'스프링 MVC'에 해당되는 글 2건

반응형

  SimpleUrlController를 이용해 요청을 처리하려면 각 요청명에 대해 다시 스프링의 Controller 인터페이스를 구현한 각각의 컨트롤러 클래스를 만들어야만 합니다. 하지만 MultiActionController를 이용하면 여러 요청명에 대해 한 개의 컨트롤러에 구현된 각 메서드로 처리할 수 있어 편리합니다.

  

  이번 글에서는 MultiActionController를 이용해 스프링 MVC를 실습해 보겠습니다. 

  이번에 사용할 클래스들은

클래스 설명
MultiActionController URL 요청명으로 바로 컨트롤러를 지정해서 사용할 수 있습니다.
PropertiesMethodNameResolver URL 요청명으로 컨트롤러의 설정 파일에서 미리 설정된 메서드를 바로 호출해서 사용할 수 있습니다.
InternalResourceViewResolver JSP나 HTML 파일과 같이 웹 애플리케이션의 내부 자원을 이용해 뷰를 생성하는 기능을 제공합니다. 기본적으로 사용하는 View 클래스이며 prefix와 suffix 프로퍼티를 이용해 경로를 지정할 수 있습니다.

또한 MultiActionController를 이용한 실습에 필요한 파일들은

파일 설명
web.xml 브라우저에서 *.do로 요청하면 스프링의 DispatcherServlet 클래스가 요청을 받을 수 있게 서블릿 매핑을 설정합니다.
action-servlet.xml 스프링에서 필요한 빈들은 설정합니다.
UserController.java 매핑된 요청에 대해 컨트롤러의 기능을 수행합니다.
loginForm.jsp 로그인창입니다.
result.jsp 로그인 결과를 보여주는 JSP입니다.

1.  패키지를 만들고 UserController 클래스를 추가합니다. 그리고 loginForm.jsp, result.jsp등 필요한 파일을 준비하겠습니다.

 2.  action-servlet.xml을 다음과 같이 수정하겠습니다.

  브라우저에서 /test/*.do로 호출하면 userUrlMapping 빈을 이용해 userController 빈을 호출합니다.

  userController 빈의 methodNameResolver 프로퍼티에는 userMethodNameResolver가 주입되어 있으므로 /test/login.do로 요청하면 userController 빈의 login 메서드를 호출합니다. 또한 userMethodNameResolver는 스프링의 PropertiesMethodNameResolver 클래스를 이용해 요청명에 대해 호출할 메서드를 바로 지정합니다.

<?xml version="1.0" encoding="UTF-8" ?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:p="http://www.springframework.org/schema/p"
	xmlns:aop="http://www.springframework.org/schema/aop"
	xmlns:context="http://www.springframework.org/schema/context"
	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-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd">
 
 <!-- 컨트롤러에서 ModelAndView 인자로 뷰이름이 반환되면 InternalResourceViewResolver의 프로퍼티스 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>
 
 <bean id="userUrlMapping"
 	class="org.springframework.web.servlet.handler.SimpleUrlHandlerMapping">
 	<property name="mappings">
 		<props>
 			<prop key="/test/*.do">userController</prop>
 		</props>
 	</property>
 	</bean>
 	
<bean id="userController" class="com.spring.ex02.UserController">
	<!-- methodNameResover 프로퍼티에 userMethodNameResolver를 주입해서 지정한 요청명에 대해
		직접 메서드를 호출하게 합니다. -->
	<property name="methodNameResolver">
		<ref local="userMethodNameResolver" />
	</property>
</bean>

<!-- PropertiesMethodNameResolver를 이용해 /test/login.do로 요청하면 userController의 login 메서드를 호출합니다. -->
<bean id="userMethodNameResolver"
	class="org.springframework.web.servlet.mvc.multication.PropertiesMethodNameResolver" >
	<property name="mappings">
		<props>
			<prop key="/test/login.do">login</prop>
		</props>
	</property>
</bean>

</beans>

3.  UserController 클래스를 다음과 같이 작성합니다. UserController 클래스는 MultiAction Controller를 상속받음으로써 지정한 요청명에 대해 바로 메서드를 호출할 수 있으며 ModelAndView 객체에 JSP에 전달할 값을 바인딩할 수 있습니다. ModelAndView 객체를 이용하면 더 이상 request 객체에 바인딩해서 포워딩할 필요가 없고, 문자열 이외의 다른 객체들도 ModelAndView 객체에 바인딩할 수 있습니다. 따라서 ModelAndView의 setViewName()메서드를 이용해 JSP 이름을 설정한 후 반환합니다.

package com.spring.ex02;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.multiaction.MultiActionController;

// 설정 파일의 userMethodNameResolver 프로퍼티를 사용하려면 반드시 MultiActionController를 상속 받아야 합니다.
public class UserConroller extends MultiActionController{
	public ModelAndView login(HttpServletRequest request, HttpServletResponse response) 
			throws Exception{
			String userID ="";
			String passwd ="";
			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;
		}
}

4. loginForm.jsp를 다음과 같이 작성합니다. 로그인창에서 ID와 비밀번호를 입력하고 로그인을 클릭하면 /test/login.do로 DispatcherServlet에 요청합니다.

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    isELIgnored="false"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<c:set var="contextPath" value="${pageContext.request.contextPath }" />
<%
	request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>로그인 폼</title>
</head>
<body>
	<form name="frmLogin" method="post" action="${contextPath}/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="userID" value="" size="20">
				</td>
				<td>
				<input type="password" name="passwd" value="" size="20">
				</td>
			</tr>
			<tr align="center">
				<td colspan="2">
					<input type="submit" value="로그인">
					<input type="reset" value="다시입력">
				</td>
			</tr>	
		</table>
	</form>

</body>
</html>

5. result.jsp를 다음과 같이 작성합니다. 로그인창에서 전송된 ID와 비밀번호를 컨트롤러에서 바인딩해 넘긴 후 결과창에서 출력합니다.

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"
    isELIgnored="false"%>
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/fmt" %>
<%
	request.setCharacterEncoding("utf-8");
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>결과창</title>
</head>
<body>
	<table border="1" width="50%" align="center" >
		<tr align="center">
			<td>아이디</td>
			<td>비밀번호</td>
		</tr>
		<tr align="center">
		<!-- 컨트롤러에서 바인딩해 넘어온 회원 정보를 출력합니다. -->
			<td>${userID}</td>
			<td>${passwd}</td>
		</tr>
	</table>

</body>
</html>

실행해 보겠습니다.

반응형
블로그 이미지

꽃꽂이하는개발자

,
반응형

  이번에는 브라우저의 요청 URL에 대해 미리 매핑해 놓은 컨트롤러를 호출하여 컨트롤러에서 지정한 JSP를 브라우저로 전송하는 과정을 실습해 보겠습니다.

  브라우저에서 요청한 URL(http://localhost:8090/pro21/test/index.do)에 대해 매핑된 컨트롤러를 선택하고 요청명에 대한 JSP파일을 브라우저로 전송하는 과정입니다.

 

웹 브라우저 -> DispatcherServlet -> SimpleUrlController -> /test/index.jsp -> 웹브라우저

 

1. 브라우저에서 http://localhost:8090/pro21/test/index.do로 요청합니다.

2. DispatcherServlet은 요청에 대해 미리 action-servlet.xml에 매핑된 SimpleUrlController 를 요청합니다.

3. 컨트롤러는 요청에 대해 test 폴더에 있는 index.jsp를 브라우저로 전송합니다.

 

 

cglib-nodep-2.1_3.jar
0.31MB
cglib-nodep-2.2.jar
0.31MB
com.springsource.javax.validation-1.0.0.GA.jar
0.05MB
com.springsource.org.aopalliance-1.0.0.jar
0.00MB
com.springsource.org.aspectj.weaver-1.6.8.RELEASE.jar
1.57MB
commons-beanutils-1.8.3.jar
0.22MB
commons-dbcp.jar
0.10MB
commons-dbcp-1.4.jar
0.15MB
commons-digester-2.0.jar
0.14MB

 

commons-fileupload-1.2.2.jar
0.06MB
commons-io-2.0.1.jar
0.15MB
commons-logging.jar
0.05MB
commons-logging-1.1.1.jar
0.06MB
commons-pool.jar
0.06MB
commons-pool-1.5.6.jar
0.10MB
json_simple-1.1.jar
0.02MB
jstl.jar
0.02MB
log4j-1.2.16.jar
0.46MB
mybatis-3.0.5.jar
0.61MB
mybatis-spring-1.0.1.jar
0.03MB
mysql-connector-java-3.0.14-production-bin.jar
0.23MB
ojdbc6.jar
2.61MB
org.springframework.aop-3.0.6.RELEASE.jar
0.31MB
org.springframework.asm-3.0.6.RELEASE.jar
0.05MB
org.springframework.aspects-3.0.6.RELEASE.jar
0.03MB
org.springframework.beans-3.0.6.RELEASE.jar
0.53MB
org.springframework.context-3.0.6.RELEASE.jar
0.64MB
org.springframework.core-3.0.6.RELEASE.jar
0.36MB
org.springframework.expression-3.0.6.RELEASE.jar
0.16MB
org.springframework.jdbc-3.0.6.RELEASE.jar
0.37MB
org.springframework.transaction-3.0.6.RELEASE.jar
0.22MB
org.springframework.web.servlet-3.0.6.RELEASE.jar
0.40MB
org.springframework.web-3.0.6.RELEASE.jar
0.38MB
slf4j-api-1.5.8.jar
0.02MB
slf4j-jdk14-1.5.8.jar
0.01MB
spring.jar
2.43MB
standard.jar
0.38MB
tiles-api-2.2.2.jar
0.03MB
tiles-core-2.2.2.jar
0.15MB
tiles-jsp-2.2.2.jar
0.05MB
tiles-servlet-2.2.2.jar
0.06MB
tiles-template-2.2.2.jar
0.02MB

  서블릿에서는 브라우저 요청 처리 시 서블릿에서 제공하는 메서드를 이용해 요청명을 일일이 가져왔습니다. 그러나 스프링에서는 브라우저의 요청을 쉽게 가져올 수 있는 여러 가지 기능을 제공합니다. 그중 SimpleUrlController를 사용해 보겠습니다. 먼저 스프링을 설정합니다.

 

새프로젝트를 만들고 위에 있는 파일들을 다운로드하고 복사해서 lib 폴더에 붙여 넣어 줍니다.

스프링 설정을 마쳤으니 SimpleUrlController를 이용해 요청을 처리해 보겠습니다.

 

실습 파일에 대한 간단한 설명을 하자면..

파일 설명
web.xml 브라우저에서 *.do로 요청 시 스프링의 DispatcherServlet 클래스가 요청을 받을 수 있게 서블릿 매핑을 합니다.
action-servlet.xml 스프링 프레임워크에서 필요한 빈들을 설정합니다.
SimpleUrlController.java 매핑된 요청에 대해 컨트롤러의 기능을 수행합니다.
index.jsp 요청에 대한 컨트롤러가 브라우저로 전송하는 JSP파일입니다.

web.xml을 다음과 같이 작성합니다. 브라우저에서 *.do로 요청하면 스프링의 Dispacther Servlet클래스가 요청을 받을 수 있게 서블릿 매핑을 설정합니다. 또한 <load-on-startup>태그를 이용해 톰캣 실행 시 미리 스프링의 DispatcherServlet을 메모리에 로드 합니다.

  action-servlet.xml에 필요한 빈들을 다음과 같이 설정합니다. SimpleUrlController 클래스에 대해 id가 simpleUrlController인 빈을 생성합니다. 스프링의 SimpleUrlHandlerMapping 클래스 빈을 생성하면 요청명 /test/index.do에 대해 처리하는 컨트롤러를 SimpleUrlController로 설정합니다.

 

  SimpleUrlController 클래스는 다음과 같이 작성합니다. 설정 파일의 요청을 처리하기 위해서는 반드시 Controller 인터페이스를 구현해야 하며, SimplerUrlController 클래스로 요청 시 ModelAndView 객체를 생성해 응답할 jsp이름인 index.jsp로 설정하여 반환합니다.

  컨트롤러에서 ModelAndView의 인자로 설정된 index.jsp를 화면에 출력하도록 설정합니다.

실행해 봅니다.

반응형
블로그 이미지

꽃꽂이하는개발자

,