뷰 모듈은 일단 Spring MVC를 기반으로 한다. Tapestry는 천천히...
Spring MVC를 사용한다면, 그것은 DispatcherSevlet을 사용하는 것이다. 일단 가보자.
/WebContent/web.xml에 다음 코드를 삽입한다 :
<servlet>
<servlet-name>springbloom</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>springbloom</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
이게 무슨 뜻인가? *.htm이라는 형식의 url은 몽땅 DispatcherServlet이 처리하게 한다는 말이다.
그러면, 시스템이 구동되고 http://localhost:8080/springbloom/.../*.htm 이라는 형식의 요청은 모두 DispatcherServlet으로 들어온다. 이제 DispatcherServlet은 들어온 request를 어떻게 처리할까?
이 그림과 같다. 즉, DispatcherServlet으로 들어온 request는 WebApplicationContext로 전달되어 HandlerMapping을 통해서 적절한 Controller로 전달되고 이 Controller는 middle tier로 넘기는 것이다. 그리고 그 결과를 받아온 Controller는 ViewResolver를 통하여 적절한 View Page를 통해서 response하게 된다.
그러면, 이제 우리가 할 일은 HandlerMapping/Controller/ViewResolver를 만들고 서로의 관계를 설정하는 것이다. 이 과정에서 우리는 IoC(또는 Dependency Injection)를 이용하고 그 위력을 느끼게 될 것이다. 어떻게 할까? HandlerMapping, Controller, ViewResolver 객체를 만든 다음, 이들 사이의 관계를 xml파일에 기록한다.
DispatcherServlet는 구동시에 [servlet-name]-serlvet.xml 파일을 읽는다. 우리는 여기에 설정 정보를 기록한다. 여기서 serlvet name이 springbloom이므로 우리는 /WebContent/WEB-INF/springbloom-serlvet.xml 파일을 작성하면 된다.
먼저 HanlderMapping 객체는 springframework에서 제공해준다. 몇 가지 클래스가 존재하는데... 우리는 그 중에서 SimpleUrlHandlerMapping 클래스를 사용한다. Controller 객체도 역시 springframework에서 제공하는데...이를 그대로 사용할 수는 없다. 그 이유는 당연하다. 우리의 로직이 필요하니까... 우리는 Controller클래스를 작성하여야 한다. 마지막으로 ViewResolver도 springframework에서 제공한다. 역시 몇 가지를 제공하는데...우리는 여기서 InternalResourceViewResolver 객체를 사용한다.
그러니까 우리는 Controller 객체만을 코딩하면 되는 것이다. 그리고 springbloom-servlet.xml에 3가지 객체사이의 연관관계를 설정하면 된다.
이제 다시 계획이다
우리의 시나리오는 다음과 같다:
/app/home.htm -> HomeController -> /WEB-INF/jsp/home.jsp
즉, 사용자가 /app/home.htm으로 url 요청을 하면 이를 HomeController 객체가 받아서 처리를 하고 /WEB-INF/jsp/home.jsp 페이지를 보여주는 것이다. 그러니까 우리가 만들어야 하는 파일은 2개이다 :
- HomeController class
- home.jsp 파일
springbloom-serlvet.xml에 들어가는 설정은 다음과 같다:
<bean id="homeController" class="myhost.web.HomeController" />
<bean id="handlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/app/home.htm">homeController</prop>
</props>
</property>
</bean>
<bean id="jspViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/WEB-INF/jsp/"/>
<property name="suffix" value=".jsp"/>
</bean>
마지막 bean에 JstlView클래스가 지정되는데, 이 과정에서 jstl이 요구된다. spring framework 패키지에서 jstl.jar파일을 찾아 /WebContent/lib/ 폴더에 넣는다.
여기서 몇 가지 포인트 :
- 첫 번째 bean의 id homeController와 두 번째 bean의 내부에 key prop의 값 homeController가 서로 일치해야 한다. 그래야 /app/home.htm을 HomeController로의 매핑이 이루어진다.
- 경로를 /home.htm으로 하지 않고 /app/home.htm으로 한 것은 나중을 위해서이다. 지금은 그냥 그러려니 하시기 바란다.
- ViewResolver는 HomeController의 코드에서 그 쓸모를 알게 된다. 대충 눈치를 챌 수도 있는데, HomeController의 어떤 값이 /WEB-INF/jsp/OOOO.jsp 의 URI를 만들게 된다. 이 때 그 어떤 값은 아마도 OOOO일 것이다.
'Programming > SpringFrameWork' 카테고리의 다른 글
[펌]Spring Framework 따라하기 [4] - 프로세스 결과 보여주기 (0) | 2008.11.07 |
---|---|
[펌]Spring Framework 따라하기 [3] - Hello Application (0) | 2008.11.07 |
[펌]Spring Framework 따라하기 [1] - 환경 설정 (0) | 2008.11.07 |
[펌]Spring Framework v2.0 - Jar Files (0) | 2008.11.07 |
[펌]Spring Framework v2.0? (0) | 2008.11.07 |