web.xml 시작 -> root-context.xml 처리 -> DispatcherServlet 관련 설정 동작
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>
<!-- 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>
root-context.xml의 일부분
컴포넌트 스캔을 실행한다.
스프링 메모리 영역(context)에 빈(객체)로 생성<beans> <context:component-scan base-package="org.zerock.sample"></context:component-scan> </beans>
servlet-context.xml의 일부분
- DispatcherServlet으로 request를 받을 수 있는 상태가 되면, 실질적으로 request가 도착할 때 마다, 해당 요청을 담당하는 컨트롤러, 메소드와의 매핑을 설정정보를 메모리에 로딩.
=> 개발자가 만든 컨트롤러에 어노테이션으로 매핑을 설정.
=> <context:component-scan base-package="org.zerock.controller"/>
<!-- 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>
<context:component-scan base-package="org.zerock.controller" />

사용자의 Request는 Front-Controller인 DispatcherServlet을 통해서 처리한다. 생성된 프로젝트의 web.xml을 보면 아래와 같은 모든 Reequest를 DispatcherServlet이 받도록 처리하고 있다.
HandlerMapping은 Request의 처리를 담당하는 컨트롤러를 찾기 위해서 존재한다. HandlerMapping 인터페이스를 구현한 여러 객체들 중 RequestMappingHandlerMapping 같은 경우는 개발자가 @RequestMapping 어노테이션이 적용된 것을 기준으로 판단한다.
적절한 컨트롤러가 찾아졌다면 HandlerAdapter을 이용해서 해당 컨트롤러를 동작시킨다.
Controller는 개발자가 작성하는 클래스로 실제 Request를 처리하는 로직을 작성하게된다. 이때 View에 전달해야하는 데이터는 주로 Model이라는 객체에 담아서 전달한다. Controller는 다양한 타입을 반환하는데 이에 대한 처리는 ViewResolver를 이용한다.
ViewResolver는 Controller가 반환한 결과를 어떤 View를 통해서 처리하면 좋을지 해석한다. 가장 흔하게 사용하는 설정은 servlet-context.xml에 정의된 InternalResourceViewResolver이다.
View는 실제로 응답 보내야 하는 데이터를 JSP등을 통해서 생성하는 역할을 하게 된다.
만들어진 응답은 DispatcherServlet을 통해서 전송된다.