<?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 继承体系中只有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
创建九大内置对象
- 解析请求 - 通过请求路径得到那个处理器可以处理这个请求 - heandermaping - heanderadeter 去解析 映射器 执行方法 - 如果出现异常处理异常 - 返回视图对象