/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는 게시판에서 서비스할 기능에 대해 인터페이스로 정의한 부분인데 다음에 구현하면서 살펴보자.
[출처]오라클자바커뮤니티
댓글 없음:
댓글 쓰기