지난 시간 SimpleUrlController 이어서 MultiActionController 통해 실습을 진행 하겠습니다.
SimpleUrlCotroller는 요청하는 Url 마다 지정한 Controller를 각각 생성 해줘야 했습니다.
하지만 MultiActionController를 이용하여 여러 요청명에 대해 한 개의 컨트롤러에서 구현된
각 메서드로 처리가 가능합니다.
MulActionController
**알고가면 좋은 스프링에서 제공하느 클래스들
클래스 | 설명 |
MultiActionController | URL 요청명으로 바로 컨트롤러를 지정해서 사용 |
PropertiesMethodNameResolver | URL 요청명으로 컨트로러러의 설정 파일에서 미리 설정된 메서드를 호출하여 사용 |
InternalResourceViewResolver | 뷰를 생성하는 기능을 제공. 기본적으로 사용하는 view클래스 prefix와 suffix 프로퍼티 사용 |
1. 필요한 파일
UserController 클래스와, loginForm, result.jsp 그리고 action-servlet.xml 파일을 준비 합니다.
2. action-servlet.xml
..........생략
<!--id 가 simpleUrlController인 빈을 생성 -->
<bean id="simpleUrlController" class="com.spring.ex01.SimpleUrlController" />
<bean id="urlMapping" class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/test/index.do">simpleUrlController</prop>
</props>
</property>
</bean>
<!-- 컨트롤러에서 ModelAndView 인자로 뷰이름이 반환되면 IntervalResourceViewResolver의 prefix 속성에 지정된 /test 폴더에서
ModelAndView 인자로 넘어온 뷰이름에 해당되는 JSP를 선택해서 DispatcherServlet으로 보냄 -->
<bean id="viewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView"/>
<property name="prefix" value="/test/"/>
<property name="suffix" value=".jsp"/>
</bean>
<!--URL 요청명이 /test/*.do로 시작되면 userController를 요청 -->
<bean id="userUrlMapping"
class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
<property name="mappings">
<props>
<prop key="/test/*.do">userController</prop>
</props>
</property>
</bean>
<!-- methodNameResolver 프로퍼티에 userMethodNameResovler를 주입해서 지정한 요청명에 대해 직접 메서드를 호출 -->
<bean id="userController" class="com.spring.ex02.UserController">
<property name="methodNameResolver">
<ref local="userMethodNameResolver"/>
</property>
</bean>
<!-- PropertiesMethodNameResolver를 이용해 /test/login.do로 요청하면 userController login 메서드를 호출 -->
<bean id="userMethodNameResolver"
class="org.springframework.web.servlet.mvc.multiaction.PropertiesMethodNameResolver">
<property name="mappings">
<props>
<prop key="/test/login.do">login</prop>
</props>
</property>
</bean>
</beans>
위에 주석에를 달아 놓았습니다. 흐름에 따라 이해하시는게 좋습니다.
3. UserController.java
//설정 파일의 userMethodNameResolver 프로퍼티를 사용하려면 반드시 MultiActionController를 상속 받아야함
public class UserController extends MultiActionController{
public ModelAndView login(HttpServletRequest request,
HttpServletResponse response) throws Exception{
String userID="";
String passwd="";
String viewName = getViewName(request);
ModelAndView mav = new ModelAndView();
request.setCharacterEncoding("utf-8");
userID = request.getParameter("userID");
passwd = request.getParameter("passwd");
//ModelAndView에 로그인 정보를 바인딩
mav.addObject("userID", userID);
mav.addObject("passwd",passwd);
//ModelAndView 객체에 포워딩할 JSP 이름을 설정
mav.setViewName("result");
return mav;
}
MultiActionController를 상속 받아 지정한 요청을 통해 메서드를 호출할 수 있고, ModelAndView를 통해서
데이터를 바인딩 한 후 포워딩할 JSP 이름을 설정하여 정보를 넘겨 주면 된다.
4. loginForm.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
//컨텍스트명 설정
<c:set var="contextPath" value="${pageContext.request.contextPath }"/>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인창</title>
</head>
<body> //해당 요청명 지정
<form action="${contextPath }/test/login.do">
<table>
<tr>
<td>아이디</td>
<td>비밀번호</td>
</tr>
<tr>
<td><input type="text" name="userID" value="" size="20"/></td>
<td><input type="password" name="passwd" value="" size="20"/></td>
</tr>
<tr>
<td colspan="2">
<input type="submit" value="로그인">
<input type="reset" value="다시입력">
</td>
</tr>
</table>
</form>
</body>
</html>
5. result.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>결과창</title>
</head>
<body>
<tr align="center">
<td>아이디</td>
<td>비밀번호</td>
</tr>
<tr>
//ModelAndView에 바인딩 정보 값 EL태그를 통해 출력
<td>${userID }</td>
<td>${passwd }</td>
</tr>
</body>
</html>
#마무리
해당 파트에서는 개인적으로 servlet.xml에서 ViewResolver, handlerMapping, MultiAction 관련해서 이해하려고 했고,
큰 흐름과 연관관계에 대해서 이해하려고 노력했습니다.
'개발 > 스프링' 카테고리의 다른 글
9. 스프링 프레임 워크 - jdbcTemplate 클래스 이용[자바웹을 다루는 기술] (0) | 2022.05.19 |
---|---|
8. 스프링 프레임워크-데이터베이스 연동[자바웹을 다루는 기술] (0) | 2022.05.17 |
6. 스프링 프레임워크-MVC 실습-1[자바웹을 다루는 기술] (0) | 2022.05.11 |
5. 스프링 프레임워크 - AOP[자바 웹을 다루는 기술] (0) | 2022.05.11 |
4. 스프링 프레임워크-DI와 IoC[자바웹을 다루는 스킬] (0) | 2022.05.09 |