본문 바로가기

WEB

[Spring] MVC의 기본구조 #1 - 프로젝트 로딩 구조

프로젝트 로딩 구조

 

 

프로젝트 구동 시 관여하는 XML은 web.xml, root-context.xml, servlet-context.xml 파일이다.

 

  • web.xml : Tomcat 구동과 관련된 설정
  • root-context.xml, servlet-context.xml : 스프링 관련 설정

 

 

프로젝트의 구동은 web.xml 시작 -> root-context.xml처리 -> DispatcherServlet 관련 설정 동작 순으로 이루어진다. 

 

 

1. web.xml 시작


web.xml의 일부

<!-- 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>
</context-param>

<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
	<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

 web.xml의 상단 일부이다. web.xml의 상단에는 가장 먼저 구동되는 Context Listener가 등록되어 있다.

 

<context-param> : root-context.xml의 경로가 설정되어있음

<listener> : 스프링 MVC의 ContextLoaderListener가 등록되어있음

 

<context-param>이 동작하여 root-context.xml이 처리된다.

 

 

 

2. root-context.xml 처리


<context-param>이 동작하여 root-context.xml이 처리되면 파일에 있는 빈(Bean) 설정들이 동작하게 된다. 

root-context.xml에 정의된 객체(Bean)들은 스프링의 영역(context)안에 생성되고, 객체들 간의 의존성이 처리된다.

 

root-context.xml이 처리된 후에는 스프링 MVC에서 사용하는 DispatcherServlet이라는 서블릿과 관련된 설정이 동작한다.

 

 

 

3. DispatcherServlet 설정 동작 (servlet-context.xml 로딩)


web.xml의 일부

<!-- 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>
		<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
	</init-param>
	<load-on-startup>1</load-on-startup>
</servlet>
	
<servlet-mapping>
	<servlet-name>appServlet</servlet-name>
	<url-pattern>/</url-pattern>
</servlet-mapping>

 

org.springframework.web.context.ContextLoaderListener는 스프링 MVC의 구조에서 가장 핵심적인 역할을 하는 클래스이다. 내부적으로 웹 관련 처리의 준비작업을 진행하는데 이때 사용하는 파일이 servlet-context.xml이다.

 

DispatcherServlet에서 XmlWebApplicationContext를 이용해서 servlet-context.xml을 로딩하고 해석하기 시작한다. 이 과정에서 등록된 객체 (Bean)들은 기존에 만들어진 객체(Bean)들과 같이 연동되게 된다.

 

 

출처 - 코드로 배우는 스프링 웹 프로젝트

'WEB' 카테고리의 다른 글

[Django] 포트번호 바꾸는 방법  (0) 2022.01.11
[Spring] MVC의 기본구조 #2  (0) 2021.12.24
[Tool] 파워목업을 사용해보자  (0) 2021.12.22
[Spring] Spring 이란?  (0) 2021.12.18
[Spring] 의존성 주입(DI, Dependency Injection)  (0) 2021.12.15