java web.xml 中listener、 filter、servlet 加载顺序

1、概述

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

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

  • 创建listener监听器

  • 创建filter过滤器

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

2、加载顺序

1
ServletContext -> Context-param -> listener -> filter -> servlet

  

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

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

1
2
3
4
<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>classpath:spring_context.xml</param-value>
 </context-param>

  

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

1
2
3
4
<context-param>
    <param-name>log4jConfigLocation</param-name>
    <param-value>classpath:log4j.xml</param-value>
 </context-param>

  

  • 再说 listener , 如果有2个,甚至多个他们的执行顺序是怎样的?
1
2
3
4
5
6
7
8
<listener>
    <listener-class>com.xx.Listener1</listener-class>
</listener>
 
 
<listener>
    <listener-class>com.xx.Listener2</listener-class>
</listener>

  

谁在前,谁先实例化,比如上面的,Listener1先,Listener2后
  • 再说Filter , 如果有2个,甚至多个他们的执行顺序是怎样的?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<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,值越小的先越先被加载。如果值相等,容器自动选择先加载谁,

 

见鬼网 微信公众平台 : “ 见鬼网”(ID:faceghost) 欢迎关注~



阅读更多
个人分类: java
上一篇跳槽,无非就是从一个坑到另一个坑,而区别在于
下一篇linux msmtp + mutt + ssl shell邮件发送
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

关闭
关闭