Spring 3일차

진창호·2023년 4월 19일
0

Spring

목록 보기
3/7

Spring은 MVC Pattern을 지원한다.

MVC Pattern은 확장성을 위한 웹 구조이다. 자세한 내용은 해당 링크를 참고하자.

Spring MVC의 구성요소는 아래와 같다.

  1. DispatcherServlet

모든 클라이언트의 요청을 전달받는다.
Controller에게 Client의 요청을 전달하고, Controller가 리턴한 결과값을 View에게 전달하여 알맞은 응답을 생성한다.

  1. HandlerMapping

클라이언트의 요청 URL을 어떤 Controller가 처리할지를 결정한다.

  1. Controller

클라이언트의 요청을 처리한 뒤, Model을 호출하고 그 결과를 DispatcherServlet에 알려준다.

  1. ModelAndView

Controller가 처리한 데이터 및 화면에 대한 정보를 보유한 객체

  1. ViewResolver

Controller가 리턴한 뷰 이름을 기반으로 Controller의 처리 결과를 보여줄 View를 결정한다.

  1. View

Controller의 처리결과를 보여줄 응답하면을 생성한다.

아래는 Spring MVC 요청 흐름을 보여준다.
Spring MVC 요청 흐름

2, 3번 과정과 6, 7번 과정은 Spring에서 자동으로 해준다.
5번 과정에서 String을 리턴하기도 한다.


Spring MVC의 동작 원리는 체계적이다.

Spring MVC의 동작 원리는 아래와 같다.
Spring MVC의 동작 원리

해당 과정은 web.xml로 설정할 수 있다. web.xml의 예시는 아래와 같다.

<?xml version="1.0" encoding="UTF-8"?> <!-- 1번 과정 -->
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee https://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">

	<!-- The definition of the Root Spring Container shared by all Servlets and Filters --> 
	<context-param>
		<param-name>contextConfigLocation</param-name> 
		<param-value>/WEB-INF/spring/root-context.xml</param-value> <!-- 3번 과정 -->
	</context-param>
	
	<!-- Creates the Spring Container shared by all Servlets and Filters -->
	<listener> 
		<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> <!-- 2번 과정 -->
	</listener>
	
	<!-- Processes application requests -->
	<servlet>
		<servlet-name>appServlet</servlet-name>
		<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
		<init-param>
			<param-name>contextConfigLocation</param-name> <!-- 7번 과정 -->
			<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
		</init-param>
		<load-on-startup>1</load-on-startup> <!-- 이 줄 때문에 WAS가 실행될 때 DispatcherServlet가 같이 생성됨. --> <!-- 따라서 6번 과정은 생략됨. -->

	</servlet>
		
	<servlet-mapping>
		<servlet-name>appServlet</servlet-name> <!-- 5번 과정 -->
		<url-pattern>/</url-pattern> <!-- / 이하의 모든 걸 받는다는 의미 -->
	</servlet-mapping>
</web-app>

<!-- 4번 과정은 개발자가 Service, DAO 등 로직을 만듦. -->
<!-- 8번 과정은 DispatcherServlet이 적절한 Controller가 실행됨. -->
profile
백엔드 개발자

0개의 댓글