한 Controller 에서 여러 개의 요청을 처리할 수 있도록 설계된 Controller 이다.
package com.test.pro05.ex02; // 패키지 선언 (현재 클래스가 속한 패키지명)
import java.io.UnsupportedEncodingException; // 문자 인코딩 관련 예외 처리 클래스 임포트
import javax.servlet.http.HttpServletRequest; // HTTP 요청 정보를 다루는 클래스 임포트
import javax.servlet.http.HttpServletResponse; // HTTP 응답 정보를 다루는 클래스 임포트
import org.springframework.web.servlet.ModelAndView; // MVC 패턴에서 모델과 뷰 정보를 다루는 클래스 임포트
import org.springframework.web.servlet.mvc.multiaction.MultiActionController; // 여러 개의 요청을 처리할 수 있는 MultiActionController 클래스 임포트
// UserController 클래스 선언 (MultiActionController를 상속하여 여러 요청을 처리할 수 있음)
public class UserController extends MultiActionController {
// 로그인 요청을 처리하는 메서드
public ModelAndView login(HttpServletRequest request, HttpServletResponse response) throws Exception {
ModelAndView mav = new ModelAndView(); // ModelAndView 객체 생성 (데이터와 뷰 정보를 저장)
request.setCharacterEncoding("utf-8"); // 요청 데이터의 문자 인코딩을 UTF-8로 설정 (한글 깨짐 방지)
String id = request.getParameter("id"); // 요청 파라미터에서 'id' 값을 가져옴
String pwd = request.getParameter("pwd"); // 요청 파라미터에서 'pwd' 값을 가져옴
mav.addObject("id", id); // ModelAndView에 'id' 값을 저장 (뷰에서 사용 가능)
mav.addObject("pwd", pwd); // ModelAndView에 'pwd' 값을 저장
mav.setViewName("result"); // 뷰 페이지를 'result.jsp'로 설정
return mav; // ModelAndView 객체 반환
}
// 로그인 폼 화면을 보여주는 메서드
public ModelAndView loginForm(HttpServletRequest request, HttpServletResponse response) throws Exception {
return new ModelAndView("loginForm"); // 'loginForm.jsp'를 뷰 페이지로 설정하여 반환
}
// 회원가입 폼 화면을 보여주는 메서드
public ModelAndView memberForm(HttpServletRequest request, HttpServletResponse response) throws Exception {
return new ModelAndView(getViewName(request)); // getViewName() 메서드를 호출하여 동적 뷰 설정
}
// 회원 정보를 처리하는 메서드
public ModelAndView memberInfo(HttpServletRequest request, HttpServletResponse response) throws Exception {
request.setCharacterEncoding("utf-8"); // 요청 데이터의 문자 인코딩을 UTF-8로 설정
ModelAndView mav = new ModelAndView(getViewName(request)); // getViewName()을 통해 뷰 이름을 동적으로 설정하여 ModelAndView 객체 생성
mav.addObject("id", request.getParameter("id")); // 요청 파라미터에서 'id' 값을 가져와 저장
mav.addObject("pwd", request.getParameter("pwd")); // 요청 파라미터에서 'pwd' 값을 가져와 저장
mav.addObject("name", request.getParameter("name")); // 요청 파라미터에서 'name' 값을 가져와 저장
mav.addObject("email", request.getParameter("email")); // 요청 파라미터에서 'email' 값을 가져와 저장
return mav; // ModelAndView 객체 반환
}
}
<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://www.springframework.org/schema/mvc"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:beans="http://www.springframework.org/schema/beans"
xmlns:context="http://www.springframework.org/schema/context"
xsi:schemaLocation="http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd
http://www.springframework.org/schema/beans https://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd">
<!-- DispatcherServlet Context: defines this servlet's request-processing infrastructure -->
<!-- Enables the Spring MVC @Controller programming model -->
<annotation-driven />
<!-- Handles HTTP GET requests for /resources/** by efficiently serving up static resources in the ${webappRoot}/resources directory -->
<resources mapping="/resources/**" location="/resources/" />
<!-- Resolves views selected for rendering by @Controllers to .jsp resources in the /WEB-INF/views directory -->
<beans:bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<beans:property name="prefix" value="/WEB-INF/views/test/" />
<beans:property name="suffix" value=".jsp" />
</beans:bean>
<context:component-scan base-package="com.test.pro05" />
<!-- SimpleUrlHandlerMapping을 사용하여 URL 패턴과 컨트롤러를 매핑 -->
<beans:bean id="userUrlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<!-- 특정 URL 패턴을 userController 빈과 연결 -->
<beans:property name="mappings">
<beans:props>
<beans:prop key="/test/*.do">userController</beans:prop>
<!-- /test/ 경로 아래의 모든 .do 확장자를 userController로 처리 -->
</beans:props>
</beans:property>
</beans:bean>
<!-- userController 빈을 생성 (UserController 클래스를 사용) -->
<beans:bean id="userController"
class="com.test.pro05.ex02.UserController">
<!-- userController가 methodNameResolver를 사용하도록 설정 -->
<beans:property name="methodNameResolver">
<beans:ref bean="userMethodNameResolver" />
<!-- userMethodNameResolver 빈을 참조하여 메서드 이름을 매핑 -->
</beans:property>
</beans:bean>
<!-- PropertiesMethodNameResolver를 사용하여 URL과 메서드 이름을 매핑 -->
<beans:bean id="userMethodNameResolver"
class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
<!-- 요청 URL과 실행할 메서드 이름을 매핑 -->
<beans:property name="mappings">
<beans:props>
<beans:prop key="/test/login.do">login</beans:prop>
<!-- /test/login.do 요청 시 UserController의 login 메서드 실행 -->
<beans:prop key="/test/loginForm.do">loginForm</beans:prop>
<!-- /test/loginForm.do 요청 시 UserController의 loginForm 메서드 실행 -->
<beans:prop key="/test/memberForm.do">memberForm</beans:prop>
<!-- /test/memberForm.do 요청 시 UserController의 memberForm 메서드 실행 -->
<beans:prop key="/test/memberInfo.do">memberInfo</beans:prop>
<!-- /test/memberInfo.do 요청 시 UserController의 memberInfo 메서드 실행 -->
</beans:props>
</beans:property>
</beans:bean>
MultiActionController 를 사용하여 URL 요청을 특정 메서드에 매핑하는 설정
✅ 1. SimpleUrlHandlerMapping 을 이용한 URL 매핑
<beans:bean id="userUrlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">/test/*.do 패턴의 모든 요청을 userController로 매핑
(예: /test/login.do , /test/memberForm.do 등)
✅ 2. userController 설정
<beans:bean id="userController" class="com.test.pro05.ex02.UserController">
컨트롤러 클래스 (UserController) 를 빈으로 등록
methodNameResolver 를 사용하여 URL에 맞는 메서드를 찾아 실행
✅ 3. PropertiesMethodNameResolver 를 이용한 메서드 매핑
<beans:bean id="userMethodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
요청된 URL과 UserController 의 특정 메서드를 매핑
/test/login.do → login() 실행
/test/loginForm.do → loginForm() 실행
/test/memberForm.do → memberForm() 실행
/test/memberInfo.do → memberInfo() 실행
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
</head>
<body>
<form method="post" action="/pro05/test/login.do">
<table border="1" width="80%" align="center">
<tr align="center">
<td>아이디</td>
<td>암호</td>
</tr>
<tr align="center">
<td><input type="text" name="id"></td>
<td><input type="password" name="pwd"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="로그인">
<input type="reset" value="다시 입력">
</td>
</tr>
</table>
</form>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
</head>
<body>
<form method="post" action="/pro05/test/login.do">
<table border="1" width="80%" align="center">
<tr align="center">
<td>아이디</td>
<td>암호</td>
</tr>
<tr align="center">
<td><input type="text" name="id"></td>
<td><input type="password" name="pwd"></td>
</tr>
<tr>
<td colspan="2" align="center">
<input type="submit" value="로그인">
<input type="reset" value="다시 입력">
</td>
</tr>
</table>
</form>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>회원정보</title>
</head>
<body>
<form action="post" action="/pro05/test/memberInfo.do">
<table border="1" width="80%" align="center">
<tr align="center">
<td>아이디</td>
<td>암호</td>
<td>이름</td>
<td>이메일</td>
</tr>
<!-- ModelAndView.addObject 저장된 값 출력 -->
<tr align="center">
<td>${id }</td>
<td>${pwd }</td>
<td>${name }</td>
<td>${email }</td>
</tr>
</table>
</form>
</body>
</html>

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>결과창</title>
</head>
<body>
<form action="post" action="/pro05/test/login.do">
<table border="1" width="80%" align="center">
<tr align="center">
<td>아이디</td>
<td>암호</td>
</tr>
<!-- ModelAndView.addObject 저장된 값 출력 -->
<tr align="center">
<td>${id }</td>
<td>${pwd }</td>
</tr>
</table>
</form>
</body>
</html>
