thumbnail

Spring MVC 패턴

MVC란 Model-View-Controller의 약자로, 사용자의 인터베이스 비즈니스로직을 분리하여 개발 하는 것을 말한다

  • Model : 애플리케이션의 정보, 즉 데이터를 말한다 (POJO)

  • View : 뷰는 사용자에게 보여주는 인터페이스, 즉 화면이다

  • Controller : 사용자가 접속한 URL에 따라서, 로직을 수행후 결과 Model을 View에 넘겨준다.

<br/>

<br/>

Spring MVC 패턴 흐름

<img alt="" src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/WKEOZZ181224235511.PNG" style="width:554px">

<br/>

  • Dispatcher Servlet은 모든 요청을 받아, 어느 Controller에 해당 요청을 전달할지 결정하는 역할을 한다.

  • 요청을 받은 Dispatcher Servlet은 Handler Mapping에게 URL과 매핑되는 Controller의 메소드를 물어보고 결정한다.

  • 결정된 Controller는 로직을 수행한 후, View의 이름을 리턴한다. 이과정에서 Model이 생성되어 View에게 같이 전달된다.

  • Distpatcher Servlet은 Controller가 보낸 View 이름을 View Resolver에게 확인받아 물리적 View를 검색한다.

  • 결정된 View는 Model 정보와 함께 화면을 표시한 후, Distpatcher Servlet에 보낸다.

  • Dispatcher Servlet이 결과를 최종 출력한다.

<br/>

<br/>

Spring MVC 패턴 구현

<img alt="" src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/XOFXER181224235511.PNG" style="border-style:solid; border-width:1px; width:300px">

  • Spring MVC Project를 생성하였다.

<br/>

<br/>

<img alt="" src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/HII7AZ181224235511.PNG" style="border-style:solid; border-width:1px; width:400px">

  • Pom.xml에 GroupId, Artifact ID를 다시 정의 해주고 Spring 4.2버전으로 바꾸었다.

<br/>

<br/>

	
	<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>*.do</url-pattern>
	</filter-mapping>
  • Web.xml에 UTF-8 인코딩을 위해 다음을 추가하자.

<br/>

<br/>

<img alt="" src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/NAYNEJ181224235512.PNG" style="border-style:solid; border-width:1px; width:560px">

<img alt="" src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/GW5JBV181224235512.PNG" style="border-style:solid; border-width:1px; width:184px">

  • Web.xml에 스프링 설정파일의 위치를 잡아주자

<br/>

<br/>

<img alt="" src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/GHYJHS181224235512.PNG" style="border-style:solid; border-width:1px; width:294px">

  • 우선 MVC구조에 맞게, Controller, Service, Dao, Model로 패키지를 구분해주었다.

  • Student는 임의로 작성

<br/>

<br/>

<img alt="" src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/TUBLWY181224235512.PNG" style="border-style:solid; border-width:1px; width:217px">

<?xml version="1.0" encoding="UTF-8"?>
<!-- servelt-Context.xml -->
<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 http://www.springframework.org/schema/mvc/spring-mvc.xsd
		http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
		http://www.springframework.org/schema/context http://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/" />
		<beans:property name="suffix" value=".jsp" />
	</beans:bean>
	
	<beans:bean id="StudentController" 	class="com.changoos.springmvc.controller.StudentController">
		<beans:property name ="studentService" ref="StudentService"></beans:property>
	</beans:bean>
</beans:beans>
<br/>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Service-Context.xml -->
<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">

	<bean id="StudentService" class="com.changoos.springmvc.service.StudentService">
		<property name="studentDao" ref="StudentDao"></property>
	</bean>
</beans>
<br/>
<?xml version="1.0" encoding="UTF-8"?>
<!-- Dao-Context.xml -->
<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">
	<bean id="StudentDao"
		class="com.changoos.springmvc.dao.StudentDao">
	</bean>
</beans>
<br/>
  • configure 설정파일 추가, 의존성 주입

<br/>

<br/>

public class StudentController {
	private StudentService studentService;
	
	public void setStudentService(StudentService studentService) {
		this.studentService = studentService;
	}

	@RequestMapping(value = "/", method = RequestMethod.GET)
	public String home(Model model) {
		StudentVO student = studentService.get("이찬구");
		model.addAttribute("student", student);
		return "home";
	}
}
  • localhost:8080/springMVC/ 라는 URL을 호출해보자

  • Handler Mapping에 의해 Controller를 결정해주고, StudentController의 home() 메소드가 호출 될 것이다.

  • home 메소드는 StudentService 클래스에 로직을 넘기고, Model(POJO) 정보를 받는다.

  • Model 객체를 통해, student 정보를 view단으로 넘겨준다.

  • 메소드는 view의 이름을 리턴한다.

<br/>

<br/>

<img alt="" src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/CIVZJU181224235512.PNG" style="border-style:solid; border-width:1px; width:720px">

<img alt="" src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/OHC7SA181224235512.PNG" style="border-style:solid; border-width:1px; width:188px">

  • ViewResolver는 view이름을 검색하여 물리적 view파일을 찾을것이다.

  • servlet-context.xml 설정을 보면 View에대한 prefix, suffix가 설정되어있다.

  • 완성된 경로는 /WEB-INF/views/home.jsp가 될 것이다.

<br/>

<br/>

<br/>

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
</head>
<body>
	<c:out value="${student.name}"></c:out>
	<c:out value="${student.hakbun}"></c:out>
</body>
</html>
<br/>
  • 해당 View단은 Model에서 데이터 정보를 받아 다음과 같이 화면에 표시한다.

<br/>

<br/>

<img alt="" src="https://static.podo-dev.com/blogs/images/2019/07/10/origin/OYZCNW181224235512.PNG" style="border-style:solid; border-width:1px; width:348px">

  • 최종화면 출력

<br/>

CommentCount 0
이전 댓글 보기
등록
이 포스팅은 쿠팡 파트너스 활동의 일환으로, 이에 따른 일정액의 수수료를 제공받습니다.
TOP