web.xml文件加载顺序
一、
1
、启动一个
WEB
项目的时候,
WEB
容器会去读取它的配置文件
web.xml
,读取
<listener>
和
<context-param>
两个结点。
2
、紧急着,容创建一个
ServletContext
(
servlet
上下文),这个
web
项目的所有部分都将共享这个上下文。
3
、容器将
<context-param>
转换为键值对,并交给
servletContext
。
4
、容器创建
<listener>
中的类实例,创建监听器。
二、
load-on-startup
元素在
web
应用启动的时候指定了
servlet
被加载的顺序,它的值必须是一个整数。如果它的值是一个负整数或是这个元素不存在,那么容器会在该
servlet
被调用的时候,加载这个
servlet
。如果值是正整数或零,容器在配置的时候就加载并初始化这个
servlet
,容器必须保证值小的先被加载。如果值相等,容器可以自动选择先加载谁。 在
servlet
的配置当中,
<load-on-startup>5</load-on-startup>
的含义是: 标记容器是否在启动的时候就加载这个
servlet
。 当值为
0
或者大于
0
时,表示容器在应用启动时就加载这个
servlet
; 当是一个负数时或者没有指定时,则指示容器在该
servlet
被选择时才加载。 正数的值越小,启动该
servlet
的优先级越高。
三、
在项目中总会遇到一些关于加载的优先级问题,近期也同样遇到过类似的,所以自己查找资料总结了下,下面有些是转载其他人的,毕竟人家写的不错,自己也就不重复造轮子了,只是略加点了自己的修饰。
首先可以肯定的是,加载顺序与它们在
web.xml
文件中的先后顺序无关。即不会因为
filter
写在
listener
的前面而会先加载
filter
。最终得出的结论是:
listener -> filter -> servlet
同时还存在着这样一种配置节:
context-param
,它用于向
ServletContext
提供键值对,即应用程序上下文信息。我们的
listener,
filter
等在初始化时会用到这些上下文中的信息,那么
context-param
配置节是不是应该写在
listener
配置节前呢?实际上
context-param
配置节可写在任意位置,因此真正的加载顺序为:
context-param ->
listener -> filter -> servlet
对于某类配置节而言,与它们出现的顺序是有关的。以
filter
为例,
web.xml
中当然可以定义多个
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()
方法的。
servlet
同
filter
类似 ,此处不再赘述。
由此,可以看出,
web.xml
的加载顺序是:
context-param
-> listener -> filter -> servlet
,而同个类型之间的实际程序调用的时候的顺序是根据对应的
mapping
的顺序进行调用的。
分享到:
相关推荐
1、启动一个WEB项目的时候,WEB容器会去读取它的配置文件web.xml,读取和两个结点。 2、紧急着,容创建一个ServletContext(servlet上下文),这个web项目的所有部分都将共享这个上下文。 3、容器将转换为键值对,并...
一、1、启动一个WEB项目,WEB容器会先去读取它的配置文件web.xml,读取和两个节点 二、load-on
1.6.1 监听器(Listener)顺序 ...............................................................................................................14 1.6.2 注解处理 .............................................
1.6.1 监听器(Listener)顺序 ...............................................................................................................14 1.6.2 注解处理 ...............................................
本文后面的章节将从数据持久层->业务层->Web层的开发顺序,逐层讲解文件上传下载的开发过程。 数据持久层 1、领域对象及映射文件 您可以使用Hibernate Middlegen、HIbernate Tools、Hibernate ...
16、下面的代码有什么不妥之处? ............................................................................... 14 17、请说出作用域 public,private,protected,以及不写时的区别 ...........................
13.6.2 XML Web服务器控件 452 13.6.3 XSLT调试 454 13.7 数据库和XML 454 13.7.1 FOR XML AUTO子句 455 13.7.2 SQL Server Yukon 2005和XML数据类型 459 13.8 小结 459 第14章 站点导航 461 14.1 基于XML的...
从Web服务中把XML译码成为强类型对象 第二十章与浏览器通信(628) 20.1节连接到外部URL 20.2节使用FlashVars 20.3节在Flex里面调用JavaScript函数方法 20.4节在JavaScript中调用ActionScript方法函数 20.5节经由...
ClassPathXmlApplicationContext:使用这个工厂创建对象,他会根据scope智能判断是否懒加载,如果是单例则创建容器时就会创建里面bean的实例,如果是多例在获取使用时才会创建bean实例 ...
1. 目录 1. 2. 目录 .........................................................................................................................................................1 JVM ........................
Visual.Basic.2010.&.NET4.高级编程(第6版)-文字版.pdf 第I部分 语言结构和环境 第1章 visual studio 2010 3 ...14.3.6 panel和groupbox容器控件 559 14.3.7 扩展的provider控件 560 14.3.8 数据...
26.3 使用简单的XML Web服务953 26.3.1 添加Web引用953 26.3.2 在客户应用程序中 调用Web服务955 26.4 Web服务的传输协议957 26.4.1 HTTP-GET959 26.4.2 HTTP-POST961 26.4.3 SOAP962 26.5 WebMethod的重载962 ...
内容提要:Quartz 从属性文件中加载多个插件类时不能保证加载的顺序,所以本节引入一个自定义的统一按顺序加载其他插件的,名之为插件加载器的东西,其实也就是其他插件类的父亲。 第八章. 使用 Quartz 插件 (第五...
59.1. web 容器 40 59.2. EJB容器 40 59.3. JNDI 40 59.4. JMS 41 59.5. JTA 41 59.6. JAF 41 59.7. RMI/IIOP 41 60. JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块...