【转载】web.xml加载顺序与web.xml常用节点解析

web.xml加载顺序
应用服务器启动时web.xml加载过程,至于这些节点在xml文件中的前后顺序没有关系,不过有些应用服务器,我曾碰到过的 websphere就严格要求web.xml的节点顺序,否则部署不成功,所以还是赞成按照web.xml标准格式写
content-param –> listener –> filter –> servlet
[zhp 1118: filter,servlet加载顺序,按其所在配置文件中的顺序进行加载;但对于实际在执行中影响的顺序,则是根据*-mapping在配置文件中的顺序对程序执行产生影响]

1、启动WEB项目的时候,应用服务器会去读它的配置文件web.xml.读两个节点: 和

2、紧接着,容器创建一个ServletContext(上下文),这个WEB项目所有部分都将共享这个上下文.

3、容器将转化为键值对,并交给ServletContext.

4、容器创建中的类实例,即创建监听.

5、在监听中会有contextInitialized(ServletContextEvent args)初始化方法,在这个方法中获得:
ServletContext = ServletContextEvent.getServletContext();
context-param的值 = ServletContext.getInitParameter(“context-param的键”);

6、得到这个context-param的值之后,你就可以做一些操作了.注意,这个时候你的WEB项目还没有完全启动完成.这个动作会比所有的Servlet都要早.换句话说,这个时候,你对中的键值做的操作,将在你的WEB项目完全启动之前被执行.如果想在项目启动之前就打开数据库,那么这里就可以在中设置数据库的连接方式,在监听类中初始化数据库的连接,这个监听是自己写的一个类,除了初始化方法,它还有销毁方法.用于关闭应用前释放资源.比如说数据库连接的关闭.

对于某类配置节而言,与它们出现的顺序是有关的。
以 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 类似,此处不再赘述。
比如filter 需要用到 bean ,但加载顺序是: 先加载filter 后加载spring,则filter中初始化操作中的bean为null;所以,如果过滤器中要使用到 bean,可以将spring 的加载 改成 Listener的方式

org.springframework.web.context.ContextLoaderListener

web.xml节点解析

根节点
1、
常用节点介绍
2、 用来设定web站台的环境参数
它包含两个子元素:
用来指定参数的名称
用来设定参数值
在此设定的参数,可以在servlet中用 getServletContext().getInitParameter(“my_param”) 来取得
例子:

log4jConfigLocation
classpath*:/log4j.properties

3、 用来设定Listener接口
它的主要子元素为
定义Listener的类名称
例子:

org.springframework.web.context.ContextLoaderListener

4、 是用来声明filter的相关设定
这当然就是指定filter的名字
这是用来定义filter的类的名称
用来定义参数,它有两个子元素:
用来指定参数的名称
用来设定参数值
例子:

encodingFilter
org.springframework.web.filter.CharacterEncodingFilter

encoding
GBK


forceEncoding
true

5、 用来声明一个servlet的数据,主要有以下子元素:
指定servlet的名称
指定servlet的类名称
指定web站台中的某个JSP网页的完整路径
用来定义参数,和前面的差不多
同样,与一起使用的是
用来定义servlet所对应的URL,包含两个子元素:
指定servlet的名称
指定servlet所对应的URL

DemoServlet
com.test.DemoServlet


DemoServlet
/demoServlet

基本节点:

6、 是对站台的描述
例子:传道、授业、解惑

7、 定义站台的名称
例子:我的站点

8、
icon元素包含small-icon和large-icon两个子元素.用来指定web站台中小图标和大图标的路径.
/路径/smallicon.gif
small-icon元素应指向web站台中某个小图标的路径,大小为16 X 16 pixel,但是图象文件必须为GIF或JPEG格式,扩展名必须为:.gif或.jpg.
/路径/largeicon-jpg
large-icon元素应指向web站台中某个大图表路径,大小为32 X 32 pixel,但是图象文件必须为GIF或JPEG的格式,扩展名必须为; gif或jpg.
例子:

/images/small.gif
/images/large.gir

9、 是指定该站台是否可分布式处理

10、 用来定义web站台中的session参数
包含一个子元素:
用来定义这个web站台所有session的有效期限,单位为 分钟
11、 定义某一个扩展名和某一个MIME Type做对应该
包含两个子元素:
扩展名的名称
MIME格式
例子:

doc
application/vnd.ms-word


xls
application/vnd.ms-excel

12、

500
/message.jsp


400
/message.jsp


403
/message.jsp


404
/message.jsp


502
/index.jsp

13、


/struts-tags
/WEB-INF/struts-tags.tld


/struts-dojo-tags
/WEB-INF/struts-dojo-tags.tld


/s
/WEB-INF/struts-tags.tld

14、

index.html
index.htm
index.jsp

15、 定义利用JNDI取得站台可利用的资源
有五个子元素:
资源说明
资源名称
资源种类
资源经由Application或Container来许可
资源是否可以共享,有Shareable和Unshareable两个值,默认为Shareable
比如,配置数据库连接池就可在此配置

JNDI JDBC DataSource of shop
jdbc/sample_db
javax.sql.DataSource
Container

还有其他元素如果想更为详细的了解它可以到http://java.sun.com/xml/ns/j2ee/web-mapp_2_4.xsd网页

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看README.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值