본문 바로가기
Java Web Programming/6. Spring | MyBatis

[SpringMVC] xml 기반으로 SpringMVC 패턴 적용해보기

by 파프리카_ 2020. 11. 4.
728x90
반응형

- servlet 설정

- post방식 한글처리를 위한 인코딩 설정

/web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1">
  <display-name>SpringMVC2</display-name>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
  
  <!-- servlet 설정 -->
  <servlet>
  	<!-- servlet-name을 기반으로 spring 파일을 찾는다. -->
  	<servlet-name>springmvc</servlet-name>
 	<!-- Libary 제공 -->
  	<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
  	<!-- load-on-startup 
  		 : Serlvet LifeCycle에 의거해서, 
  		   어플리케이션 최초 실행 시 해당 servlet을 객체 생성, init()까지 실행되도록 설정
  		   만약 이 태그를 기입해주지 않으면, 클라이언트 최초 요청 시점에 서블릿이 초기화된다. -->
  	<load-on-startup>1</load-on-startup>
  </servlet>
  
  <!-- servlet-mapping 설정 -->
  <servlet-mapping>
  	  <!-- DispatcherSerlvet은 자신의 설정 파일(springMVC 설정)을 
  	  	   [serlvet-name]-serlvet.xml로 찾아서 로딩한다. -->
	  <servlet-name>springmvc</servlet-name>
	  <!-- 클라리언트 요청 url이 .action으로 마치는 요청은
	  	   모두 DispatcherSerlvet이 처리한다. -->
	  <url-pattern>*.do</url-pattern>
  </servlet-mapping>
  
  
  <!-- POST 방식으로 전송 시, 한글처리를 위한 인코딩 설정 -->
  <filter>
  	<filter-name>EncodingFilter</filter-name>
  	<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
  	<init-param>
  		<param-name>encoding</param-name>
  		<param-value>utf-8</param-value>
  	</init-param>
  </filter>
  
  <filter-mapping>
  	<filter-name>EncodingFilter</filter-name>
  	<!-- 모든 요청에 인코딩 처리하겠다는 의미 -->
  	<url-pattern>/*</url-pattern>
  </filter-mapping>

</web-app>

Spring configure 설정

 

MultiActionController를 위한 설정 
 : 하나의 컨트롤러에서 다수의 요청을 처리하기 위해 사용

 * paramName의 value를 command로 설정하면, member.vo?command=[methodName]

 

/springmvc-servlet.xml

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	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.xsd">
	
	<!-- HandlerMapping 
		: 클라이언트의 요청을 처리할 실제 컨트롤러를 연결하는 객체 -->
	<bean id="handlerMapping" class="org.springframework.web.servlet.handler.BeanNameUrlHandlerMapping"/>
	
	<!-- ViewResolver
		 : 컨트롤러가 클라이언트에게 응답할 view에 대한 방식을 담당하는 객체 -->
	<bean id="ViewResolver" class="org.springframework.web.servlet.view.InternalResourceViewResolver">
		<property name="prefix" value="/views/"/>
		<property name="suffix" value=".jsp"/>
	</bean>

	<bean id="/test.do" class="org.kosta.controller.TestController"></bean>
	
	<!-- MultiActionController를 위한 설정 
		 : 하나의 컨트롤러에서 다수의 요청을 처리하기 위해 사용
		 * paramName의 value를 command로 설정하면, member.vo?command=[methodName]
	-->
	<bean id="methodNameResolver" class="org.springframework.web.servlet.mvc.multiaction.ParameterMethodNameResolver">
		<property name="paramName" value="command"/>
	</bean>
	
	<bean id="/member.do" class="org.kosta.controller.MemberController">
		<property name="methodNameResolver" ref="methodNameResolver"/>
	</bean>
	
</beans>

Model

-- 사용하지 않음 --


View

/index.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>
	<a href="test.do">springMVC Test</a>
	<br><br>
	<form action="test.do" method="POST">
		이름 <input type="text" name="userName" required="required">
		<input type="submit" value="전송">
	</form>
	<hr>
	<a href="member.do?command=insert">MultiActionController insert test</a><br>
	<a href="member.do?command=select">MultiActionController select test</a><br>
	
	<form action="member.do">
		<input type="hidden" name="command" value="findMemberByAddress">
		주소 <input type="text" name="address">
		<input type="submit" value="검색">
	</form>
</body>
</html>

/Views

 

/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 bgcolor="yellow">
	result page
</body>
</html>

 

/multi-result.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>MultiActionController Test</title>
</head>
<body>
	MultiActionController Test result page <br>
	${param.command}
</body>
</html>

Controller

/TestController.java

package org.kosta.controller;

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

import org.springframework.web.servlet.ModelAndView;
import org.springframework.web.servlet.mvc.AbstractController;

/*AbstractController : dispacherSevlet에서 계층구조 형성을 위해 사용한다.
 * - controller라는 것을 알려주기 위해서 공통된 타입을 찾게하기 위해서다!
 * model2 방식으로 할 때네는 Controller<<interface>>를 만들어서 상속받아 사용했다.
*/
public class TestController extends AbstractController{

	@Override
	protected ModelAndView handleRequestInternal(HttpServletRequest request, 
			HttpServletResponse response)
			throws Exception {
		//System.out.println("TestController 실행");
		
		//View에서 정보 받아오기
		String name = request.getParameter("userName");
		System.out.println(name);
		
		// views/result.jsp가 응답된다.
		return new ModelAndView("result");
	}
}

 

/MemberController.java

package org.kosta.controller;

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

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

//MultiActionController : 하나의 컨트롤러에서 여러 기능을 동작하기 위해 상속받음
public class MemberController extends MultiActionController{
	
	// member.dao?command=insert
	public ModelAndView insert(HttpServletRequest request, HttpServletResponse response) {
		//System.out.println("MemberController insert");
		return new ModelAndView("multi_result");
	}
	
	// member.dao?command=select
	public ModelAndView select(HttpServletRequest request, HttpServletResponse response) {
		//System.out.println("MemberController select");
		return new ModelAndView("multi_result");
	}
	
	public ModelAndView findMemberByAddress(HttpServletRequest request, HttpServletResponse response) {
		return new ModelAndView("multi_result");
	}
}

[ 결과 ]

> 홈화면

 

> 'springMVC Test' 클릭 시,

 

> 폼에 이름 입력 후, 전송 누르면 화면과 console

 

 

> 'MultiActionController insert test' or 'MultiActionController select test' 클릭 시,

 

 

> 주소 입력 후, '전송' 시,

728x90
반응형