#启动流程 SpringMVC通过javaweb的web.xml配置来初始化Spring容器,启动web项目后,web容器首先回去找web.xml文件,读取这个文件,web.xml配置执行顺序为:context-param -> listener-> filter -> servlet。
context-param是参数配置如SpringMVC中Spring的xml路径配置
contextConfigLocation
classpath*:applicationcontext-*.xml
listener是web容器的监听器配置如SpringMVC中Spring容器加载器的配置
org.springframework.web.context.ContextLoaderListener
filter是web容器的过滤器配置如SpringMVC中字符集过滤器的配置
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encoding
UTF-8
forceEncoding
true
encodingFilter
/*
servlet是web容器的请求收集器配置如SpringMVC中请求调度器的配置
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath*:springmvc-context.xml
1
springmvc
/
SpringMVC中初始化Spring容器的主要有org.springframework.web.context.ContextLoaderListener和org.springframework.web.servlet.DispatcherServlet。web启动时会调用ContextLoaderListener#contextInitialized方法其功能主要是初始化Spring的xml的配置,接着调用DispatcherServlet#init方法其功能主要是初始化SpringMVC的xml的配置。
ContextLoaderListener#contextInitialized方法先会创建org.springframework.web.context.support.XmlWebApplicationContext类型的WebApplicationContext然后获取web.xml
DispatcherServlet#init方法同样先会创建org.springframework.web.context.support.XmlWebApplicationContext类型的WebApplicationContext,然后获取
1.MultipartResolver:文件上传解析器
系统带文件上传功能需要配置此解析器,可以将HttpServletRequest包装成MultipartHttpServletRequest来处理上传文件。
2.LocaleResolver:i18n国际化解析器
先获取用户配置的LocaleResolver,如果未配置使用AcceptHeaderLocaleResolver。其功能是使前端页面显示国际化可以使不同的地区显示不同的页面。
3.HandlerMapping:url映射器
Spring启动时会根据Controller初始化HandlerMapping,在请求时根据url获取HandlerMapping。
4.HandlerAdapter:Handler适配器
HandlerMapping中的Handler的类型Object,所以需要找到一个适配Handler执行的适配器。
5.HandlerExceptionResolver:异常处理器
当在执行过程中出现异常,会将其捕获交给异常处理器处理。
6.RequestToViewNameTranslator:默认视图转化器
先获取用户配置的RequestToViewNameTranslator,未配置使用DefaultRequestToViewNameTranslator,当请求的Controller没有设置视图时,会调用视图转化器取默认视图资源。
7.ViewResolver:视图解析器
先获取用户配置的ViewResolver(如velocity),未配置使用InternalResourceViewResolver,ViewResolver的主要作用是把一个逻辑上的视图名称解析为一个真
正的视图View,由View渲染视图。
8.FlashMapManager:闪存
先获取用户配置的FlashMapManager,未配置使用SessionFlashMapManager,重定向(Redirect)时如果设置了FlashMap会进行存储且存储带过期时间,可以将想要的数据带到重定向的Controller。
9.ThemeResolver:主题风格解析器
主要是前端页面使用,前端可以使用spring:theme 标签配置前端不同的样式