1 基本依懒
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>spring-webmvc</artifactId>
<version>${spring.version}</version>
</dependency>
<!-- https://mvnrepository.com/artifact/javax.servlet/javax.servlet-api -->
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.1.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
2 servlet容器(tomcat)读取 web.xml 配置并初始化
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0">
<display-name>spring-mvc</display-name>
<!--root context 配置-->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:spring-application.xml</param-value>
</context-param>
<!--1.监听web容器的启动,并初始化一个根application context-->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--2.servlet容器 把扫描到的servlet,并初始该servlet -->
<servlet>
<servlet-name>spring-mvc</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-mvc.xml</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>spring-mvc</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<listener>
<listener-class>com.xie.java.mvc.MyServletListener</listener-class>
</listener>
<welcome-file-list>
<welcome-file>/index.jsp</welcome-file>
</welcome-file-list>
</web-app>
3 创建spring root webapplicatoncontext
servlet 启容器启动后,上面的ContextLoaderListener监听到容器启动后,创建一个webapplicatoncontext (该application context 是spring context)并初化它 ,作为root context 下面是继承结构及启动源码
下面是 initWebApplicationContext 方法大概做的一些事情
4 DispatcherServlet 初始化
完成context 初化,接下来就是dispatchServlet初始化,还是先看一下继承结构图,再看具体源码
首先servlet容器会调用该servlet 的init(config)方法
创建servletcontext,获取root context 并创建servlet的子context
5 请求策略初始化
前面只是spring-mvc容器准备阶段,下面才是spring-mvc开始策略初化,包含9种策略
最后来一个调用链图