摘要:当容器启动或终止应用时,会触发事件,该事件由来处理。监听器的作用就是启动容器时,自动装配的配置信息。初始化在架构中,负责请求分发,起到控制器的作用。
公司项目使用 struts2 作为控制层框架,为了实现前后端分离,计划将 struts2 切换为 SpringMVC ,因此,这段时间都在学习新的框架,《Spring实战》是一本好书,里面对 Spring 的原理实现以及应用都说得很透彻,强烈推荐,但是如果想深挖 Spring 的实现,还是要从他的源码入手,这次,就先从 SpringMVC 初始化开始。
Web 容器初始化过程
SpringMVC的Web.xml配置
DispatchServlet初始化
Web容器初始化过程web容器初始化的过程,其官方文档给出了这样的描述:
Instantiate an instance of each event listener identified by a
For instantiated listener instances that implement ServletContextListener, call the contextInitialized() method.
Instantiate an instance of each filter identified by a
Instantiate an instance of each servlet identified by a
其初始化的过程实际如下:
web.xml 配置代码:
contextConfigLocation classpath:applicationContext.xml org.springframework.web.context.ContextLoaderListener mvc-dispatcher org.springframework.web.servlet.DispatcherServlet 1 mvc-dispatcher /
在 Servlet API中有一个ServletContextListener接口,它能够监听ServletContext对象的生命周期,实际上就是监听Web应用的生命周期。当Servlet容器启动或终止Web应用时,会触发ServletContextEvent事件,该事件由ServletContextListener来处理。在ServletContextListener接口中定义了处理ServletContextEvent 事件的两个方法contextInitialized()和contextDestroyed()。
ContextLoaderListener监听器的作用就是启动Web容器时,自动装配ApplicationContext的配置信息。因为它实现了ServletContextListener这个接口,在web.xml配置了这个监听器,启动容器时,就会默认执行它实现的方法。由于在ContextLoaderListener中关联了ContextLoader这个类,所以整个加载配置过程由ContextLoader来完成。
DispatchServlet初始化在SpringMVC架构中,DispatchServlet负责请求分发,起到控制器的作用。下面详细来解释说明:
DispatchServlet名如其义,它的本质上是一个Servlet,子类不断的对HttpServlet父类进行方法扩展
HttpServlet有两大核心方法:init()和service()方法。HttpServletBean重写了init()方法,在这部分,我们可以看到其实现思路:公共的部分统一来实现,变化的部分统一来抽象,交给其子类来实现,故用了abstract class来修饰类名。此外,HttpServletBean提供了一个HttpServlet的抽象实现,使的Servlet不再关心init-param部分的赋值,让servlet更关注于自身Bean初始化的实现
FrameworkServlet提供了整合web javabean和spring application context的整合方案。在源码中可以看到通过执行initWebApplicationContext()方法和initFrameworkServlet()方法实现
DispatchServlet是HTTP请求的中央调度处理器,它将web请求转发给controller层处理,它提供了敏捷的映射和异常处理机制,DispatchServlet转发请求的核心代码在doService()方法中实现
DispatchServlet类和ContextLoaderListener类的关系图:
用ContextLoaderListener初始化上下文,接着使用DispatchServlet来初始化WebMVC的上下文
文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。
转载请注明本文地址:https://www.ucloud.cn/yun/67387.html
摘要:问题来了,我们到底还在用吗答案是,不全用。后者是初始化的配置,主要是的配置。启动类测试启动项目后,在浏览器里面输入。通过查询已装载的,并且支持该而获取的。按照前面对的描述,对于而言,这个必定是。的核心在的方法中。 之前已经分析过了Spring的IOC(《零基础带你看Spring源码——IOC控制反转》)与AOP(《从源码入手,一文带你读懂Spring AOP面向切面编程》)的源码,本次...
摘要:环境要求使用纯来搭建环境,要求的版本必须在以上。即视图解析器解析文件上传等等,如果都不需要配置的话,这样就可以了。可以将一个字符串转为对象,也可以将一个对象转为字符串,实际上它的底层还是依赖于具体的库。中,默认提供了和的,分别是和。 在 Spring Boot 项目中,正常来说是不存在 XML 配置,这是因为 Spring Boot 不推荐使用 XML ,注意,并非不支持,Spring...
摘要:核心类类的继承关系前端控制器是规范中的核心类,实现接口,继承此类用于处理用户请求。主要配置中初始化参数。 Spring MVC 核心类 类的继承关系Spring MVC前端控制器DispatcherServlet-->FrameworkServlet-->HttpServletBean-->HttpServletshowImg(https://segmentfault.com/img/...
摘要:接口接口作用是将请求映射到处理程序,以及预处理和处理后的拦截器列表,映射是基于一些标准的,其中的细节因不同的实现而不相同。该参数是类型,作用是检查所有的映射解析器或使用或为的,默认为,即从上下文中检查所有的。 概述 在Spring MVC启动章节https://segmentfault.com/a/1190000014674239,介绍到了DispatcherServlet的onRef...
摘要:概述用久了,深受其约定大于配置的便利性毒害之后,我想回归到时代,看看开发模式中用户是如何参与的。备注当然本文所使用的全是非注解的配置方法,即需要在中进行配置并且需要遵循各种实现原则。而更加通用主流的基于注解的配置方法将在后续文章中详述。 showImg(https://segmentfault.com/img/remote/1460000015244684); 概述 用久了Sprin...
阅读 1129·2021-11-24 10:43
阅读 3053·2021-11-22 09:34
阅读 3534·2021-10-08 10:04
阅读 3890·2021-09-23 11:58
阅读 3100·2019-08-30 15:44
阅读 452·2019-08-30 13:01
阅读 1141·2019-08-28 18:07
阅读 1412·2019-08-26 13:42