springmvc从入门到源码分析专题3_tomcat服务启动过程中DispatcherServlet初始化过程
在上一篇 springmvc从入门到源码分析专题2_tomcat服务启动过程中如何加载ContextLoaderListener的 文章中我们分析了 ContextLoaderListener 是如何初始化的,讲解了springmvc是如何创建根ApplicationContext的过程,本篇文章我们来分析DispatcherServlet初始化过程
web.xml的配置
<!--
SpringMVC的前端控制器,当DispatcherServlet载入后,它将从一个XML文件中
载入Spring的应用上下文,该XML文件的名字取决于这里DispathcerServlet将试图从一个
叫做Springmvc-servlet.xml的文件中载入应用上下文
-->
<servlet>
<servlet-name>springmvc</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring-servlet.xml</param-value>
</init-param>
</servlet>
DispatcherServlet的继承关系
首先我们先看下DispatcherServlet的继承关系,然后我们再来逐步分析。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传
重要接口Servlet详解
/**
* 该接口定义了初始化Servlet,处理请求以及从服务器中删除Servlet的方法。这些称为生命周期方法,按以下顺序调用:
* 1.构建servlet,然后使用init方法初始化。
* 2.处理客户对服务方法的任何调用。
* 3.停止使用Servlet,然后使用destroy方法将其销毁,然后对垃圾进行收集并最终确定。
*
* 除了生命周期方法外,此接口还提供了Servlet可用于获取任何启动信息的getServletConfig方法,以及允许Servlet返回有关自身的基本信息(如作者,版本和版本)的getServletInfo方法。版权。
*/
public interface Servlet {
/**
* 在servlet的配置当中,<load-on-startup>1</load-on-startup>的含义是:
* <p> 当值为0或者大于0时,表示容器在应用启动时就加载这个servlet;
* <p> 当是一个负数时或者没有指定时,则指示容器在该servlet被选择时才加载。
* <p> 正数的值越小,启动该servlet的优先级越高。
*
* <p> 如果我们在web.xml中设置了多个servlet的时候,可以使用load-on-startup来指定servlet的加载顺序,服务器会根据load-on-startup的大小依次对servlet进行初始化。不过即使我们将load-on-startup设置重复也不会出现异常,服务器会自己决定初始化顺序
*
* <p> 配置load-on-startup后,servlet在startup后立即加载,但只是调用servlet的init()方法,用以初始化该servlet相关的资源。初始化成功后,该servlet可响应web请求;如未配置lo