web容器中web.xml中Servlet、Filter、context-param、listener的加载顺序

  web容器在启动web项目的时候,会根据项目中的web.xml配置文件进行项目的初始化操作,

通过对web容器的源码分析和项目实践,我们可以大致得出以下加载顺序:

1)、加载<context-param>,(多个context-param的加载顺序由容器自行决定,可以认为是自上而下,但有待于考证)根据配置信息,初始化上下文信息(ServletContext),因为上下文信息在整个容器中会被servlet、filter、listener的使用,所以会首先被加载;

2)、加载<listener>,(多个listener的加载顺序由容器自行决定,可以认为是自上而下,但有待于考证),根据上下文信息,创建监听器类的实例;

3)、加载<filter>,(多个filter的加载顺序由容器自行决定,可以认为是自上而下,但有待于考证),对于过滤器,需要注意,与 filter 相关的一个配置节 是 filter-mapping,这里一定要注意,对于拥有相同 filter-name 的 filter 和 filter-mapping 配置 节而言,filter-mapping 必须出现在 filter 之后,否则当解析到 filter-mapping 时,它所对应的 filter- name 还未定义。web 容器启动时初始化每个 filter 时,是按照 filter 配置节出现的顺序来初始化的,当请求资源匹配多 个 filter-mapping 时,filter 拦截资源是按照 filter-mapping 配置节出现的顺序来依次调 用 doFilter() 方法的。 

4)、加载<servlet>,对于配置多个servlet,容器会根据load- on-startup 元素在web应用启动的时候指定了servlet被加载的顺序,它的值必须是一个整数。如果它的值是一个负整数或是这个元素不存在,那么容器会在该servlet被调用的时候,加载这个servlet 。如果值是正整数或零,容器在配置的时候就加载并初始化这个servlet,容器必须保证值小的先被加载。如果值相等,容器可以自动选择先加载谁。


总结,web.xml 的加载顺序是:context- param -> listener -> filter -> servlet 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值