• 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根上下文的初始化

     

    加载细节

  • 相关阅读:
    Vue.js+SpringBoot开发厦门旅游电子商务预订系统
    231n--CNN 卷积神经网络
    Redis HyperLogLog的使用
    SpringBoot交友APP项目实战(详细介绍+案例源码) - 9.小视频(SpringCache缓存)
    项目实战 | Excel导出(三)——Excel导出样式
    JavaEE初阶 --多线程(一)
    客户管理系统中的常用术语都有哪些 (下)
    21.4 Python 使用GeoIP2地图定位
    vue3中props中数组报错 ‘item‘ is of type ‘unknown‘
    计算机毕业设计Python+Django的学生考勤管理系统(源码+系统+mysql数据库+Lw文档)
  • 原文地址:https://www.cnblogs.com/BlueStarWei/p/17527616.html