Dev/Spring

Spring2.5 MVC - MultiActionController

창문닦이 2019. 4. 5. 18:27

프로젝트 진행시 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