• Spring原理之web.xml加载过程


     

    web.xml是部署描述文件,它不是Spring所特有的,而是在Servlet规范中定义的,是web应用的配置文件。web.xml主要是用来配置欢迎页、servlet、filter、listener等以及定制servlet、JSP、Context初始化参数。
     
    启动一个WEB项目时,容器(包括JBoss、Tomcat等)首先会读取项目web.xml配置文件里的配置,当这一步骤没有出错并且完成之后,项目才能正常地被启动起来。
     
    Spring容器技术通过web.xml与web容器耦合。读取Web.xml就可以获取Spring容器的初始化信息。
     
    加载流程
     
    context-param -> listener -> filter  -> servlet

    •  读取
    • 创建全局共享的ServletContext【ServletContext是容器的宿主环境】
    • 配置转化为键值对,存入ServletContext
    
    <context-param>
      <param-name>contextConfigLocationparam-name>
      <param-value>/WEB-INF/applicationContext.xmlparam-value>
    context-param>
    context-param配置
    • 创建中的类实例
    <listener>
      <listener-class>
        org.springframework.web.context.ContextLoaderListener
      listener-class>
    listener>
    listener配置
    • 读取,根据指定的类路径来实例化过滤器
    <filter>
      <filter-name>encodingFilterfilter-name>
      <filter-class>
        org.springframework.web.filter.CharacterEncodingFilter
      filter-class>
      <init-param>
        <param-name>encodingparam-name>
        <param-value>utf-8param-value>
      init-param>
      <init-param>
        <param-name>forceEncodingparam-name>
        <param-value>trueparam-value>
      init-param>
    filter>
    
    <filter-mapping>
      <filter-name>encodingFilterfilter-name>
      <servlet-name>springmvcservlet-name>
    filter-mapping>
    filter配置
    • 如果系统中有,则Servlet是在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求【使用1可以控制servlet在容器加载时就被实例化】
    
    <servlet>
      <servlet-name>springmvcservlet-name>
      <servlet-class>
        org.springframework.web.servlet.DispatcherServlet
      servlet-class>
      <load-on-startup>1load-on-startup>
      
    servlet>
    <servlet-mapping>
      <servlet-name>springmvcservlet-name>
      <url-pattern>/url-pattern>
    servlet-mapping>
    servlet配置

     

    总结:ServletContext是WebApplicationContext的底层支撑,所有的外界配置信息读到ServletContext中,然后再通过ContextLoaderListener触发Spring根上下文的初始化

     

    加载细节

  • 相关阅读:
    【吴恩达机器学习-笔记整理】SVM-支持向量机(新的代价函数,最大间隔,高斯核函数,特征数与样本数不同大小关系时的选择)
    05-SA8155 QNX SPI 全双工通讯
    力扣100题——贪心算法
    Linux性能优化--补充
    C语言数组
    Unity - 手动创建 dithering tex 3d
    模拟对抗之红队免杀开发实践
    note_前端框架Vue的安装和简单入门(Windows 11)
    leetcode做题笔记138. 复制带随机指针的链表
    使用makecert.exe创建数字证书
  • 原文地址:https://www.cnblogs.com/BlueStarWei/p/17527616.html