Spring web 程序启动流程简单梳理

这里写自定义目录标题

Spring 创建Web项目及大致运行流程导图

  1. 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 对象
    Spring web 程序启动流程简单梳理 可知dispactherServlet 属于servlet 体系 , 方法init service 必定会执行
    org.springframework.web.servlet.HttpServletBean 实现了init方法

Spring web 程序启动流程简单梳理在DispatcherServlet 继承体系中只有GenericServlet实现了init 的方法 跳转到
Spring web 程序启动流程简单梳理GenericServlet 做了一个空实现,交给子类实现
Spring web 程序启动流程简单梳理
在DispatcherServlet 继承体系中只有HttpServletBean实现了GenericServlet 的 init 方法 跳转到HttpServletBean 的init()方法

PropertyValues 为web.xml 中的

contextConfigLocation
classpath:spring/spring-mvc.xml

找到指定配置文件 获取其中对象信息
BeanWrapper 用于为对象封装属性

Spring web 程序启动流程简单梳理

在DispatcherServlet 继承体系中只有FrameworkServlet实现了HttpServletBean的 initServletBean方法 跳转到FrameworkServlet的 initServletBean() 方法

this.initWebApplicationContext() 内部执行了 onRefresh()方法

Spring web 程序启动流程简单梳理
initWebApplicationContext() 方法
Spring web 程序启动流程简单梳理onRefresh()方法最终被DispatcherServlet 重写 创建了九大内置对象

init 线 完

DispatcherServlet 被执行时构造方法执行
Spring web 程序启动流程简单梳理Spring web 程序启动流程简单梳理

其中主要做了初始化根容器,创建web容器
读取spring-mvc.xml文件内bean
把读取的对象转换成BeanWrapper
创建九大内置对象

HttpServletBean FrameworkServlet DispatcherServlet 初始化容器 九大内置对象创建inint() HttpServletBean FrameworkServlet DispatcherServlet

处理service

-  解析请求
- 通过请求路径得到那个处理器可以处理这个请求
- heandermaping
- heanderadeter 去解析 映射器 执行方法
- 如果出现异常处理异常
- 返回视图对象

SpringBoot 创建Web项目及大致运行流程导图

上一篇:SpringMVC03:什么是SpringMVC


下一篇:windows DHCP根据MAC地址批量导出DHCP服务器中的计算机名,导出到csv