우선 Spring 프레임워크를 설치해서 구동하는것부터 해보자. 그 유명한 Hello World 찍는것부터~~^^
우선 내 스타일대로 개발환경 세팅
1. 이클립스는 3.3 버젼 J2EE용으로 받고(eclipse-jee-europa)
2. 필요한 이클립스 플러그인 설치
3. 실행환경으로 사용할 Tomcat을 하나 설치해둔다. Tomcat5.5.9 설치했음
4. Dynamic Web Project를 하나 생성해서 HelloWorld라는 프로젝트를 만든다
TargetRuntime 부분은 설치해둔 Tomcat 으로 지정한다.
5. Spring 프레임워크(최신인 2.5.2)를 다운받아 우선 몽땅 다 들어있는 spring.jar를 lib폴더에 넣는다.
=> 중요한 부분 하나. Spring 2.5 버젼의 spring.jar에는 SpringMVC에 필요한
org.springframework.web.servlet.mvc.Controller, org.springframework.web.servlet.ModelAndView등이 포함되어 있지 않다.
대부분의 매뉴얼들이 2.0정도의 버젼으로 작성되어있어서 spring.jar만 클래스패스에 잡으라고 되있기때문에 이것땜에 한참 헤멨다.
암튼 제대로 돌리려면 spring-framework-2.5.2-with-dependencies.zip파일을 다운로드받아서 dist안에 있는 spring.jar뿐만 아니라
modules안에 있는 spring-webmvc.jar도 함께 가져온다.
또 /lib/jakarta-commons/commons-logging.jar 도 가져온다
마지막으로 태그라이브러리 사용을 위한 jstl 라이브러리. 기존에 JSTL을 사용안하고 있기 때문에 이 부분없이 해보고 싶었으나 대부분의 예제들이
그냥 이렇게 진행되있는 이유로 우선은 그대로 진행.
다운받은 스프링프레임워크 내부의 lib에도 있으나 http://jakarta.apache.org/site/downloads/downloads_taglibs-standard.cgi 에서
최신 라이브러리로 다운받는다. JSTL이 1.0과 1.1 버젼이 사용법이 다르므로 최신으로 받는다.
jstl.jar, standard.jar 를 /WEB-INF/lib폴더에 포함시킨다
이제 개발 환경은 설정완료
HelloWorld 애플리케이션을 Spring기반에 만들어보기
간단히 Sping프레임워크 동작 구조 공부 more..
펼쳐두기..
Spring 동작 구조

① 클라이언트의 요청에 대한 최초 진입 지점은 DispatcherServlet이 담당하게 된다.
대부분의 MVC를 지원하는 프레임워크가 메인 Servlet을 가지는 것처럼 Spring MVC
또한 메인 Servlet이 최초 진입지점으로 다음의 작업을 처리하게 된다.
② DispatcherServlet은 Spring Bean Definition에 설정되어 있는 Handler Mapping 정보를 참조하여 해당 요청을 처리하기 위한 Controller를 찾는다.
③ DispatcherServlet은 선택된 Controller를 호출하여 클라이언트가 요청한 작업을 처리.
④ Controller는 Business Layer와의 통신을 통하여 원하는 작업을 처리한 다음 요청에 대한 성공유무에 따라 ModelAndView 인스턴스를 반환한다. ModelAndView 클래스에는 UI Layer에서 사용할 Model데이터와 UI Layer로 사용할 View에 대한 정보가 포함되어있다.
⑤ DispatcherServlet은 ModelAndView의 View의 이름이 논리적인 View 정보이면 ViewResolver를 참조하여 이 논리적인 View 정보를 실질적으로 처리해야할 View를 생성하게 된다.
⑥ DispatcherServlet은 ViewResolver를 통하여 전달된 View에게 ModelAndView를 전달하여 마지막으로 클라이언트에게 원하는 UI를 제공할 수 있도록 한다. 마지막으로 클라이언트에게 UI를 제공할 책임은 View 클래스가 담당하게 된다.
1.web.xml 파일 수정
우선 중요한 부분은 Spring 프레임워크내의 DispatcherServlet을 매핑하게 되는데 이부분은 Spring에서 제어행위를 처리하는 서블릿이다. 그리고 이에 대한 설정파일은 서블릿명-servlet.xml이 된다.
2. 규칙대로 /WEB-INF/helloworld-servlet.xml 을 만든다.
총 3개의 Bean을 정의하고 있는데 첫번째는 처리제어를 위한 컨트롤러를 정의하고 있는데 springController라는 이름으로 web.SpringController라는 클래스를 매핑해주고 있습니다.
그리고 두번째는 hello.htm으로 들어오는 요청에 대해 springController로 넘기게 되어있고
세번째는 View의 역할을 할 JSP에 대한 설정이다
3. 다음에는 SpringController를 만듭니다
web패키지 아래에 SpringController를 만들되 org.springframework.web.servlet.mvc.Controller를 상속받아 구현합니다.
package web;
import java.util.Date;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.Controller;
public class SpringController implements Controller {
protected final Log logger = LogFactory.getLog(getClass());
public ModelAndView handleRequest(HttpServletRequest arg0,
HttpServletResponse arg1) throws Exception {
String now = (new Date()).toString();
logger.info("returning hello view with " + now);
return new ModelAndView("hello", "now", now);
}
}
소스내용을 보면 단순하게 요청에 대해 현재 시간을 담은 변수를 now라는 이름으로 hello라는 페이지로 전달하게 되어있다
이 hello는 helloworld-servlet.xml내에 viewResolver 빈에 정의한 설정에 따라 /JSP/hello.jsp가 될것이다.
4. 이제 /JSP/hello.jsp를 작성한다.
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<%@ taglib prefix="c" uri="
http://java.sun.com/jstl/core" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "
http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=EUC-KR">
<title>Hello World :: Spring Application</title>
</head>
<body>
<h1>Hello World! - Spring Application</h1>
<p>Greetings, it is now<c:out value="${now}" /></p>
</body>
</html>
컨트롤러를 통해 ModelAndView에 담겨진 now객체를 받아 뿌려주게 되어있다
여기서 문제점 하나! 태그라이브러리 선언 부분이 jstl라이브러리 버젼에 따라 달라진다. (이부분도 많이 헤멤-.-)
jstl 라이브러리 버전 1.0은 uri="http://java.sun.com/jstl/core"
1.1 버전은 uri="http://java.sun.com/jsp/jstl/core" 로 선언. 내 경우 spring다운받은 내부의 jar를 이용했는데 1.0인가보다.
5. 이제 Tomcat을 기동하고 http://localhost:8080/HelloWorld/hello.htm 으로 접근하면.. 드뎌 나온다 Hello World...ㅎㅎㅎ