java web.xml 中listener、 filter、servlet 加载顺序
原创    xingfu2017    发表于:2018-03-27 16:25:30
  阅读 :62   收藏   编辑

1、概述

  • 当一个web项目启动时,web容器(比如:tomcat )会首先加载 WEB-INF下的web.xml

  • 至此,容器开始加载context-param(该配置向ServletContext 提供键值对)创建ServletContext(servlet上下文)。

  • 创建listener监听器

  • 创建filter过滤器

  • 创建可创建的servlet,为什么是可创建的,这取决于该servlet中的load-on-startup的值。

2、加载顺序

ServletContext -> Context-param -> listener -> filter -> servlet
  • ServletContext 和 Context-param 没什么可说的,一个是整个容器的上下文环境,一个是向该环境提供一些参数,

比如:常见的指定spring context文件地址

  <context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring_context.xml</param-value>
  </context-param>

再比如:指定log4j.xml文件地址

 <context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.xml</param-value>
 </context-param>
  • 再说 listener , 如果有2个,甚至多个他们的执行顺序是怎样的?
<listener>
    <listener-class>com.xx.Listener1</listener-class>
</listener>


<listener>
    <listener-class>com.xx.Listener2</listener-class>
</listener>
谁在前,谁先实例化,比如上面的,Listener1先,Listener2后
  • 再说Filter , 如果有2个,甚至多个他们的执行顺序是怎样的?
<filter>
    <filter-class>com.xx.Filter1</filter-class>
    <filter-name>filter1</filter-name>
</filter>

<filter-mapping>
    <filter-name>filter1</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>


<filter>
    <filter-class>com.xx.Filter2</filter-class>
    <filter-name>filter2</filter-name>
</filter>


<filter-mapping>
    <filter-name>filter2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
filter(不是filter-mapping)谁在前,谁先实例化,比如上面的,filter1先,filter2后
  • 最后再说servlet ,它的启动跟load-on-startup 有空

它是一个正整数值,如果是一个负整数或是这个元素不存在,那么容器会在该 servlet被调用的时候,加载servlet 。如果值是正整数或零,容器在启动时就会加载并初始化这个servlet,值越小的先越先被加载。如果值相等,容器自动选择先加载谁,

评论
条评论