JavaEE——Spring Web MVC启动流程
摘要:
web容器正是通过ContextLoaderListener和dispatcherServlet这两个配置才和spring管理起来。ContextLoaderListener与web容器的ServletContext关联,为Spring的IOC容器提供了一个宿主环境。在建立起IOC容器体系之后,把DispatcherServlet作为SpringMVC处理web请求的转发器建立起来,完成响应http请求的准备。
SpringMVC启动过程大致分为两个阶段:
第一阶段.ContextLoaderListener初始化,实例化IOC容器,并将此容器注册到ServletContext中。
第二阶段DispatcherServlet初始化,建立自己的上下文,也注册到ServletContext中。
一、servlet注册
(1)上图为servlet在web.xml中的配置
(2)DispatchServlet本质上是一个Servlet,web容器启动的时候,servlet也会初始化,其init方法被调用。以'/'结尾的action都让org.springframework.web.servlet.DispatcherServlet这个类来处理,这时servlet不用初始化,而是交给容器去处理。
二、IoC容器创建
(1)loc容器启动流程
ContextLoaderListener实现ServletContextListener,这个接口里面的方法会结合web容器的生命周期被调用。因为ServletContextListener是ServletContext的监听者,如果ServletContext发生变化,会触发相应的事件,而监听者一直对这些事件进行监听,如果接受到了监听的事件,就会作于相应处理。例如在服务器启动,ServletContext被创建的时候,ServletContextListener的contextInitialized()方法被调用,从而拉开了初始化Spring IOC容器的序幕。
(2)配置loc容器
三、bean初始化
(1)bean的介绍
Spring Bean是被实例的,组装的及被Spring 容器管理的Java对象。
Spring 容器会自动完成@bean对象的实例化。
创建应用对象之间的协作关系的行为称为:装配(wiring),这就是依赖注入的本质。
(2)bean的配置——自动化装配bean
1.组件扫描(Configuration scanning):Spring 会自动发现应用上下文中所创建的bean。
2.自动装配(autowiring):Spring自动满足bean之间的依赖。
四、MVC的流程
(1)MVC的介绍
MVC即Model-View-Controller,将应用按照Model(模型)、View(视图)、Controller(控制)这样的方式分离。
(2)Spring MVC的工作流程
1、用户发送请求至前端控制器DispatcherServlet。
2、DispatcherServlet收到请求调用HandlerMapping处理器映射器。
3、处理器映射器找到具体的处理器(可以根据xml配置、注解进行查找),生成处理器对象及处理器拦截器(如果有则生成)一并返回给DispatcherServlet。
4、 DispatcherServlet调用HandlerAdapter处理器适配器。
5、HandlerAdapter经过适配调用具体的处理器(Controller,也叫后端控制器)。
6、Controller执行完成返回ModelAndView。
7、HandlerAdapter将controller执行结果ModelAndView返回给DispatcherServlet。
8、DispatcherServlet将ModelAndView传给ViewReslover视图解析器。
9、ViewReslover解析后返回具体View.
10、DispatcherServlet根据View进行渲染视图(即将模型数据填充至视图中)。
11、DispatcherServlet响应用户。