프로젝트 로딩 구조
프로젝트 구동 시 관여하는 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 |