본문 바로가기

Programming/SpringFrameWork

[펌]Spring Framework 따라하기 [2] - Hello Application

Spring Framework 따라하기 [2] - Hello Application
먼저 spring.jar 파일을 /WebContent/WEB-INF/lib폴더에 넣는다. 사실 앞에서 언급된 라이브러리 파일들을 모두 넣어야 하지만, 그것들은 필요할 때마다 그때 그때 넣기로 하자. 결국 모두 들어가게 된다.

뷰 모듈은 일단 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일 것이다.