- DispatcherServlet static initialization block : 기본 전략 설정 파일 로딩
- DispatcherServlet.properties : 기본 전략 설정 파일
- HttpServletBean.init()
- FrameworkServlet.initServletBean()
- FrameworkServlet.initWebApplicationContext()
- @MVC
- AnnotationDrivenBeanDefinitionParser:
<mvc: annotation-driven />
- https://github.com/spring-projects/spring-framework/blob/4.3.x/spring-webmvc/src/main/java/org/springframework/web/servlet/config/AnnotationDrivenBeanDefinitionParser.java
- MvcNamespaceUtils.registerDefaultComponents()
<mvc:resources />
사용 시@Controller
설정이 먹지 않는 오류를 해결하기 위해 BeanNameUrlHandlerMapping, HttpRequestHandlerAdapter, SimpleControllerHandlerAdapter 를 추가 등록- https://github.com/spring-projects/spring-framework/blob/4.3.x/spring-webmvc/src/main/java/org/springframework/web/servlet/config/MvcNamespaceUtils.java#L63
- WebMvcConfigurationSupport:
@EnableWebMvc
- AnnotationDrivenBeanDefinitionParser:
- FrameworkServlet.configureAndRefreshWebApplicationContext()
- https://github.com/spring-projects/spring-framework/blob/4.3.x/spring-webmvc/src/main/java/org/springframework/web/servlet/FrameworkServlet.java#L639
- cf.) ApplicationContext 와 WebApplicationContext의 차이는?
- DispatcherServlet.onRefresh() -> DispatcherServlet.initStrategies()
- initialize each strategies ...
- FrameworkServlet.service() -> HttpServlet.doGet()/doPost()/... -> FrameworkServlet.processRequest()
- FrameworkServlet.processRequest()
- DispatcherSevlet.doService()
-
DispatcherServlet.doDispatch()
-
Handler Execution Chain (Controller + Interceptors) 실행
if (!mappedHandler.applyPreHandle(processedRequest, response)) {
return;
}
// Actually invoke the handler.
mv = ha.handle(processedRequest, response, mappedHandler.getHandler());
// ...
mappedHandler.applyPostHandle(processedRequest, response, mv);
- DispatcherServlet.processDispatchResult()
- DispatcherServlet.processHandlerException()
- DispatcherServlet.render()
- DispatcherServlet.processRequest().finally