프로젝트 진행시 a,b,c라는 팀원이 각각 컨트롤러를 만들어 코드를 합치게되면 컨트롤러의 개수가 많아지게 된다.
마치 Struts 처럼 Action을 한곳으로 모으는 역할을 하는 컨트롤러가 존재하는데 바로 MultiActionController이다.
MultiActionController 클래스의 요청을 처리하는 메소드는 ModelAndView, Map, String, void 중의하나를 리턴 타입으로 가질 수 있다.
① ModelAndView 인 경우 : 메소드가 리턴값을 그대로 리턴 ② Map 인 경우 : new ModelAndView().addAllObjects(map) ③ String 인 경우 : new ModelAndView(str) ④ void 인 경우 : null
1. MultiActionController
package com.test3; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.web.servlet.ModelAndView; import org.springframework.web.servlet.mvc.multiaction.MultiActionController; public class MultiTestController extends MultiActionController{ //struts의 execute와 동일함 public ModelAndView list(HttpServletRequest request, HttpServletResponse response) throws Exception { request.setAttribute("message", "list 페이지"); return new ModelAndView("test3/testList"); } //struts의 execute와 동일함 public ModelAndView view(HttpServletRequest request, HttpServletResponse response) throws Exception { request.setAttribute("message", "view 페이지"); return new ModelAndView("test3/testList"); } } |
2. view생성 ① 리스트 페이지
<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% request.setCharacterEncoding("UTF-8"); String cp = request.getContextPath(); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>리스트</title> </head> <body> ${message } </body> </html> |
2. view생성 ② 뷰 페이지
<%@ page contentType="text/html; charset=UTF-8"%> <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %> <% request.setCharacterEncoding("UTF-8"); String cp = request.getContextPath(); %> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>뷰</title> </head> <body> ${message } </body> </html> |
3. dispatcher-servlet.xml
MethodNameResolver 종류 |
설명 |
InternalPathMethodNameResolver |
URL 패턴에 기초하여 메소드 이름을 결정. |
ParameterMethodNameResolver |
요청 파라미터를 기초로 하여 실행 메소드 이름을 결정. Struts의 DispatchAction과 유사한 개념. |
PropertiesMethodNameResolver |
프로퍼티 파일 내용 중에 키-값 쌍의 목록을 기초로 하여 실행 메소드 이름 결정. (URL과 메소드 이름의 매핑을 프로퍼티로 설정) |
액션의 이름은 사용자 정의이다. PropertiesMethodNameResolver를 통해 액션의 이름에 따라서 어느 메소드가 실행되어야하는지 매핑정보를 등록한다. 프로퍼티 파일 내용 중에 키-값 쌍의 목록을 기초로 하여 실행메소드 이름을 결정한다. (URL과 메소드 이름의 매핑을 프로퍼티로 설정)
<prop key="/multi/a.action">list</prop>
<prop key="/multi/b.action">view</prop>
4. 출력 페이지
'Dev > Spring' 카테고리의 다른 글
Spring2.5 - 게시판 만들기 (0) | 2019.04.08 |
---|---|
Spring2.5 - Annotation (0) | 2019.04.08 |
Spring2.5 MVC - AbstractWizardFormController (0) | 2019.04.05 |
Spring2.5 MVC - Exception & SimpleFormController (0) | 2019.04.05 |
Spring2.5 MVC - SimpleUrlHandlerMapping (0) | 2019.04.05 |