这里写自定义目录标题
Spring 创建Web项目及大致运行流程导图
- Web 服务器启动(Tomcat)
- 读取 Web.xml文件
- 解析web.xml中的标签 标签解析顺序 context-param >> listener >> fileter >> servlet
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
version="4.0">
<!--sping 配置文件位置 非controller层需注入对象-->
<!--根容器对象-->
<!--context-param 不写默认找WEB-INF/applicationContext.xml -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/applicationContext.xml</param-value>
</context-param>
<!--sping -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!--前端控制器-->
<servlet>
<servlet-name>DispatcherServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath:spring/spring-mvc.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>DispatcherServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
<!--字符编码-->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceRequestEncoding</param-name>
<param-value>true</param-value>
</init-param>
<init-param>
<param-name>forceResponseEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!--rest风格 -->
<filter>
<filter-name>HiddenHttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>HiddenHttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
- 第一次被请求 创建DispatcherServlet*
- 创建dispactherServlet 对象
可知dispactherServlet 属于servlet 体系 , 方法init service 必定会执行
org.springframework.web.servlet.HttpServletBean 实现了init方法
在DispatcherServlet 继承体系中只有GenericServlet实现了init 的方法 跳转到
GenericServlet 做了一个空实现,交给子类实现
在DispatcherServlet 继承体系中只有HttpServletBean实现了GenericServlet 的 init 方法 跳转到HttpServletBean 的init()方法
PropertyValues 为web.xml 中的
contextConfigLocation
classpath:spring/spring-mvc.xml
找到指定配置文件 获取其中对象信息
BeanWrapper 用于为对象封装属性
在DispatcherServlet 继承体系中只有FrameworkServlet实现了HttpServletBean的 initServletBean方法 跳转到FrameworkServlet的 initServletBean() 方法
this.initWebApplicationContext() 内部执行了 onRefresh()方法
initWebApplicationContext() 方法
onRefresh()方法最终被DispatcherServlet 重写 创建了九大内置对象
init 线 完
DispatcherServlet 被执行时构造方法执行
其中主要做了初始化根容器,创建web容器
读取spring-mvc.xml文件内bean
把读取的对象转换成BeanWrapper
创建九大内置对象
处理service
- 解析请求
- 通过请求路径得到那个处理器可以处理这个请求
- heandermaping
- heanderadeter 去解析 映射器 执行方法
- 如果出现异常处理异常
- 返回视图对象