🔴 DispatcherServlet
1. 클라이언트의 요청의 매핑되는 Controller를 HandlerMapping객체를 통해 찾는다.
2. 해당 Controller에게 요청을 넘기고 요청 결과를 받는다.
3. 요청 결과를 ViewResolver객체 넘기고 클라이언트에게 보여줄 viewd의 jsp 경로를 받는다.
4. ViewResolver로부터 얻은 View의 경로를 알기 때문에 View를 생성할 수 있다.
🔴 HandlerMapping
🔴 Controller
Model And View
: Controller가 처리한 데이터 및 화면에 대한 정보를 보유한 객체
@RequestMapping(value = "/", method = RequestMethod.GET)
public String home(Locale locale, Model model) {
...
model.addAttribute("serverTime", formattedDate );
return "home";
}
🔴 ViewResolver
<!-- 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>
🔴 View
web.xml
을 읽어서 초기화한다.ContextLoaderListener
객체가 생성된다.ContextLoaderListener
가 WebApplicationContext
(Root Spring Container)를 생성하고 관리한다.WebApplicationContext
는 /WEB-INF/spring/root-context.xml
을 읽어서 Bean
으로 만들어야 할 객체가 있다면 Bean객체로 등록한다.DispatcherServlet
객체를 생성한다.DispatcherServlet
초기화 시에 servlet-context.xml
(Spring Container)을 읽어 WebApplicationContext(Spring Container)을 생성한다.🤔 여기서 WebApplicationContext(Spring Container)가 2개 생성되는 이유 ❓
ContextLoaderListener가 Root WebApplicationContext를 생성 및 관리하고,
DispatcherServlet가 servlet WebApplicationContext를 생성 및 관리한다.
Root WebApplicationContext는 주로 애플리케이션의 비즈니스 로직, 서비스, DAO와 같이 핵심 비즈니스 구성요소를 로드하는데 사용된다. 또한 애플리케이션 전체에 걸려 공유되는 Bean을 정의하는데 사용된다.
Servlet WebApplicationContext는 Servlet에 대한 , Controller, View, Resolver, Handler Mapping등 웹 관련 Bean을 로드하는 데 사용된다.
또한 각 Servlet마다 별도의 Servlet WebApplicationContext를 가질 수 있으며, 각 Servlet 자체 설정 파일을 가질 수 있다.
web.xml 파일
<?xml version="1.0" encoding="UTF-8"?>
<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>
</context-param>
<!-- ContextLoaderListener가 생성 -->
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- DispatcherServlet가 생성 -->
<!-- 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>
</web-app>