2013년 7월 27일 토요일

(Spring3.2 Board) Spring 3.2에서 게시판 작성하기[3. action-servlet.xml , spring controller정의, URL매핑, viewresolver spring configuration]

/WEB-INF/action-servlet.xml 파일을 만들자.

구로디지털 오엔제이프로그래밍실무교육센터


action-servlet.xml 파일에서는 Spring MVC와 관련된 오라클에 접속하기 위한 DataSource 정의, 요청 파라미터 URL에 따른 컨트롤러, 컨트롤러의 실행 메소드 정의, 뷰 해석을 위한 뷰리졸버 등에 대해 정의하고 있다


<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"

    "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>



<bean id="dataSource"

       class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">

       <property name="driverClassName">

           <value>oracle.jdbc.driver.OracleDriver</value>

       </property>

       <property name="url">

           <value>jdbc:oracle:thin:@127.0.0.1:1521:onj</value>

       </property>

       <property name="username">

           <value>scott</value>

       </property>

       <property name="password">

           <value>tiger</value>

       </property>      

    </bean>         

      

       <!-- 넘어오는 URL 따라 컨트롤러에서 실행될 메소드 매핑 -->

       <!--  PropertiesMethodNameResolver prop key 넘어오는 url 대해 실행할 컨트롤러의 메소드 정의 -->

       <bean id="userControllerMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">

             <property name="mappings">

                           <props>

                               <!--  list.html 요청이 오면 컨트롤러의 list 메소드 실행 -->

                                 <prop key="/list.html">list</prop>  

                                

                           </props>

             </property>

       </bean>



       <!-- 리졸버 -->

       <bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

             <property name="prefix">

                    <value>/jsp/</value>

             </property>

             <property name="suffix">

                    <value>.jsp</value>

             </property>

       </bean>     



       <!-- 컨트롤러 매핑 -->

       <bean name="/list.html" class="board.controller.BoardMultiController">

             <property name="methodNameResolver">

                           <ref local="userControllerMethodNameResolver"/>

             </property>

             <property name="boardService">

                    <ref bean="boardService"/>

             </property>

       </bean>     

</beans>





게시판에서는 다중 액션 컨트롤러(MultiActionController) 이용하여 스프링 컨트롤러를 정의하는데, 비슷하거나 관련 있는 로직을 수행하는 다수의 액션을 가지고 있을 용이하게 이를 처리하는 컨트롤러이다. (글읽기, 글쓰기, 수정하기, 삭제하기 등을 하나의 컨트롤러에서 처리)



action-servlet.xml정의 에서 사용된 PropertiesMethodNameResolver 요청 URL 넘어오는 값을 기준으로 다중 액션 컨트롤러의 실행 메소드를 결정하는 역할을 한다. ParameterMethodNameResolver 사용한다면 요청 파라미터를 기초로 하여 컨트롤러의 실행 메소드 이름을 정할 있다.





<props>

             <!-- /list.html 요청이 오면 컨트롤러의 list 메소드 실행 -->

             <prop key="/list.html">list</prop>



      </props>



이번에는 뷰 리졸버에 설정에 관해 알아보자.


ViewResolver는 컨트롤러의 메소드에서 리턴되는 ModelAndView의 뷰 이름을 취하여 실제 클라이언트에 보여질 뷰와 매핑 하는데 prefix 특성의 값과 suffix 특성의 값을 각각 접두어와 접미어로서 붙인다.


아래 문장을 해석하면 접두사로 “/jsp/”, 접미어로 “.jsp”가 붙는데 만약 View이름이 list라면 /jsp/list.jsp라고 해석되어 /list.jsp가 뷰 로서 사용자의 화면에 처리 결과로써 보여진다.


<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">

             <property name="prefix">

                    <value>/jsp/</value>

             </property>

             <property name="suffix">

                    <value>.jsp</value>

             </property>

       </bean>     





다음은 실제 컨트롤러를 매핑 하는 과정인데,


<bean name="/list.html" class="board.controller.BoardMultiController">

             <property name="methodNameResolver">

                           <ref local="userControllerMethodNameResolver"/>

             </property>

             <property name="boardService">

                    <ref bean="boardService"/>

             </property>

       </bean>


디스패처 서블릿에서 사용하는 기본적인 URL과 컨트롤러의 매핑 방법은 빈 이름에 기초하여 컨트롤러와 URL과 매핑한다. 위 구문을 보면 /list.html 이라는 빈 이름을 가진 경우 컨트롤러는 board.controller.BoardMultiController 라는 뜻이다. methodNameResolver BoardMultiController가 상속받은 MultiActionController의 속성값으로 다중액션 컨트롤러의 메소드 이름을 넘어오는 URL로부터 어떻게 해석할 것인지를 결정하는데, 위에서 정의 한 userControllerMethodNameResolver를 넣어 준다. 요청 URL 넘어오는 값을 기준으로 다중 액션 컨트롤러의 실행 메소드를 결정하겠다는 것인데 /list.html 요청이 오면 컨트롤러인 BoardMultiController list 메소드 실행하겠다는 것이다.



다음 boardService 게시판에서 서비스할 기능에 대해 인터페이스로 정의한 부분인데 다음에 구현하면서 살펴보자.


[출처]오라클자바커뮤니티

댓글 없음:

댓글 쓰기