전체소스를 따로 제공하지 않음.
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 실무 프로그래밍(성윤정)

+ Recent posts