전체소스를 따로 제공하지 않음.
MultiActionController가 어떻게 구현하는지만 알고 넘어감.
다음 강좌(?)에서 MultiActionController를 이용하여 게시판(CRUD)을 구현
BoardController.java
package controller;
import java.util.List;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import logic.BoardLogic;
import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;
import vo.BoardVO;
public class BoardController extends MultiActionController {
private BoardLogic boardLogic;
public void setBoardLogic(BoardLogic boardLogic) {
this.boardLogic = boardLogic;
}
//boardList
public ModelAndView boardList(HttpServletRequest request, HttpServletResponse response) throws Exception{
List<BoardVO> boardList = boardLogic.getBoardList();
for(int i=0; i<boardList.size(); i++){
BoardVO boardVo = boardList.get(i);
System.out.println(i + " : " + boardVo.getTitle());
}
ModelAndView modelAndView = new ModelAndView("board/boardList");
modelAndView.addObject("boardList", boardList);
return modelAndView;
}
//boardDetail
public ModelAndView boardDetail(HttpServletRequest request, HttpServletResponse response) throws Exception{
int boardSeq = Integer.parseInt(request.getParameter("boardIdx"));
BoardVO boardDetail = boardLogic.getBoardDetail(boardSeq);
ModelAndView modelAndView = new ModelAndView("board/boardDetail");
modelAndView.addObject("boardDetail", boardDetail);
return modelAndView;
}
//boardUpdate
public ModelAndView boardUpdate(HttpServletRequest request, HttpServletResponse response) throws Exception{
int boardSeq = Integer.parseInt(request.getParameter("boardIdx"));
BoardVO boardVo = boardLogic.getBoardDetail(boardSeq);
ModelAndView modelAndView = new ModelAndView("board/boardUpdate");
modelAndView.addObject("boardVo", boardVo);
return modelAndView;
}
//boardDelete
public ModelAndView boardDelete(HttpServletRequest request, HttpServletResponse response) throws Exception{
//구현부분
return null;
}
}
|
※ MultiActionController 클래스
- MultiActionController 클래스를 계승한 리퀘스트 컨트롤러(위에서는 BoardController)는 복수의 리퀘스트에 대해서 각각의 처리를 하나의 클래스에 기술하고 리퀘스트 별로 할당할 수 있음.
- MultiActionController 클래스를 계승한 경우의 호출 메소드 시그너쳐
public ModelAndView methodName(HttpServletRequest request, HttpServletResponse response) throws Exception{ ... ... }
|
- 리퀘스트 URL과 메소드를 관련 짓기 위해서는 스프링 MVC가 제공하는 MethodNameResolver 인터페이스를 이용한다.(위 예제에서는 MethodNameResolver 인터페이스의 구현 클래스인 PropertiesMethodNameResolver 클래스 이용)
- 서블릿명
-servlet.xml의 설정파일에 리퀘스트 URL과 메소드의 관련성을 정의(아래 xml 참조)
myHome04-servlet.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- HandlerMapping 설정 : SimpleUrlHandlerMapping -->
<bean id="simpleUrlHandlerMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/boardList.htm">boardController</prop>
<prop key="/boardDetail.htm">boardController</prop>
<prop key="/boardUpdate.htm">boardController</prop>
<prop key="/boardDelete.htm">boardController</prop>
<!-- prop key="/boardSave.htm">boardController</prop -->
</props>
</property>
</bean>
<!-- ViewResolver 설정 : InternalResourceViewResolver -->
<bean id="internalResourceViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass">
<value>org.springframework.web.servlet.view.JstlView</value>
</property>
<property name="prefix">
<value>WEB-INF/jsp/</value>
</property>
<property name="suffix">
<value>.jsp</value>
</property>
<property name="contentType">
<value>text/html; charset=UTF-8</value>
</property>
</bean>
<!-- 각종 bean 설정 -->
<bean id="boardController" class="controller.BoardController">
<property name="methodNameResolver" ref="boardMethodNameResolver"></property>
<property name="boardLogic" ref="boardLogic"></property>
</bean>
<bean id="boardMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
<property name="mappings">
<props>
<prop key="/boardList.htm">boardList</prop>
<prop key="/boardDelete.htm">boardDelete</prop>
<prop key="/boardDetail.htm">boardDetail</prop>
<prop key="/boardUpdate.htm">boardUpdate</prop>
</props>
</property>
</bean>
<bean id="boardLogic" class="logic.BoardLogicImpl">
<property name="boardDao" ref="boardDao"></property>
</bean>
<bean id="boardDao" class="dao.BoardDaoImpl">
<property name="sqlMapClient" ref="sqlMapClient"></property>
</bean>
</beans>
|
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
<display-name>myHome04</display-name>
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/applicationContext.xml</param-value>
</context-param>
<servlet>
<servlet-name>myHome04</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>myHome04</servlet-name>
<url-pattern>*.htm</url-pattern>
</servlet-mapping>
</web-app>
|
applicationContext.xml
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
<!-- 1. dataSource 생성 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
<property name="driverClassName" value="oracle.jdbc.OracleDriver"></property>
<property name="url" value="jdbc:oracle:thin:@123.456.789.000:1521:orcl"></property>
<property name="username" value="xxxxxxx"></property>
<property name="password" value="yyyyyyy"></property>
</bean>
<!-- 2. ibatis 코딩을 지원해주는 SqlMapClient 빈 생성 -->
<bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
<property name="dataSource" ref="dataSource"></property>
<property name="configLocation" value="/WEB-INF/SqlMapConfig.xml"></property>
</bean>
<!-- 3. 공통 빈 생성 - 그외의 빈은 myHome02-servlet.xml에서 설정 -->
</beans>
|
[참고자료] Spring 2.5 실무 프로그래밍(성윤정)