1、Spring MVC类图和流程
(1)Spring MVC流程
流程描述:
1.用户向服务器发送请求,请求被Spring前端控制DispatcherServlet捕获
2.DispatcherServlet对请求URL进行解析,得到请求资源标识符。然后根据该标识符,调用HandlerMapping获得该Handler配置的所有相关对象(包括Handler对象以及Handler对象对应的拦截器),最后已HandlerExecutionChain对象形式返回。
3.DispatcherServlet根据获得的Handler,选择一个合适的HandlerAdator.
4.提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller).在填充Handler的入参过程中,根据配置,Spring帮我们做一些额外的工作:HttpMessageConvert: 将请求消息(如Json、Xml等数据)转换成一个对象,将队形转换为指定的响应消息
5.Handler执行完成后,向DispatcherServlet返回衣蛾ModelAndView对象
6.根据返回的ModelAndView,选择一个适合的ViewResolver返回给DispatcherServlet
7.ViewResolver结合Model和View,来渲染视图
8.将渲染的结果返回给客户端
(3)ContextLoaderListener初始化上下文和DispatcherServlet上下文之间的关系
ContextLoaderListener初始化的上下文加载的Bean是对整个应用程序共享的,不管是使用什么表现层技术,一般如Dao层、Service层Bean
DispatcherServlet初始化的上下文加载的Bean是只对Spring Web MVC有效的Bean,如Controller、HandlerMapping、HandlerAdaptor等,该初始化上下文只加载Web相关的组件。
DispatcherServlet初始化自己的上下文工作在其initStrategies方法中,只初始化了处理器映射器、视图解析等。
2、源码解析
(1)ContextLoaderListener初始化过程 类层次结构
ContextLoaderListener初始化时序图
(2)DispatcherServlet初始化过程
首先对于一个web应用,其部署在web容器中,web容器提供其一个全局的上下文环境,这个上下文就是ServletContext,其为后面的Spring IOC容器提供宿主环境。