Spring MVC的大致流程:
- 在Spring MVC框架下,请求通常会被拦截交给DispatcherServlet进行处理,DispatcherServlet会根据配置信息(HandlerMapping)调用合适的handler进行处理;
- handler会进行相关业务逻辑处理,必要的时候会通过dao层与数据库进行数据交互;
处理完成之后会将处理结果封装到一个Model中,这个Model通常包含两部分信息:视图名信息以及处理结果数据信息; - DispatcherServlet会根据handler返回的Model调用对应的视图;
- 视图负责将Model中的数据信息以合适的方式展现给用户。
Spring MVC的流程基本上就如上面所述,本次主要对3,4步进行介绍
1 初始化视图解析器
在启动web容器时,会根据web.xml配置文件,在指定时间启动Spring MVC,此时会进行相关初始化工作:
protected void initStrategies(ApplicationContext context) {
this.initMultipartResolver(context);
this.initLocaleResolver(context);
this.initThemeResolver(context);
this.initHandlerMappings(context);
this.initHandlerAdapters(context);
this.initHandlerExceptionResolvers(context);
this.initRequestToViewNameTranslator(context);
this.initViewResolvers(context);
this.initFlashMapManager(context);
}
注意语句this.initViewResolvers(context);
语句,Spring MVC会根据配置文件初始化对应视图解析器,并所有的视图解析器实例对象放入到一个List集合中,用于后面的视图解析;
private void initViewResolvers(ApplicationContext context) {
this.viewResolvers = null;
if (this.detectAllViewResolvers) {
Map<String, ViewResolver> matchingBeans = BeanFactoryUtils.beansOfTypeIncludingAncestors(context, ViewResolver.class, true, false);
if (!matchingBeans.isEmpty()) {
this.viewResolvers = new ArrayList(matchingBeans.values());
AnnotationAwareOrder