web.xml加载过程

1,当启动一个WEB项目时,容器包括(JBoss、Tomcat等)首先会读取项目web.xml配置文件里的配置,当这一步骤没有出错并且完成之后,项目才能正常地被启动起来。

servlet2.2和2.3申明格式:

<!DOCTYPE web-app PUBLIC"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN""http://java.sun.com/dtd/web-app_2_3.dtd" >

servlet2.4以后的申明格式:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" 
       version="3.0" >  

</web-app>

使用tomcat5.x和非5.x时,不能讲二者部署文件混淆,否则tomcat不能正常启动,5.x兼容servlet 2.2 2.3 2.4 而以前的版本不兼容2.4。

servlet 2.2 2.3使用的文件为dtd文件 ,而 servlet 2.4使用的文件为xsd文件。

2,加载顺序与它们在web.xml文件中的先后顺序无关,即不会因为filter写在listener前面就先加载filter。加载顺序是:context-param->listener->filter->servlet。

3,容器创建一个ServletContext(application),这个web项目的所有部分都将共享这个上下文。容器以<context-param></context-param>的name作为键,value作为值,将其转化为键值对,存入ServletContext。 

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

4,容器创建<listener></listener>中的类实例,根据配置的class类路径<listener-class>来创建监听,在监听中会有初始化方法,启动Web应用时,系统调用Listener的该方法 contextInitialized(ServletContextEvent args),在这个方法中获得:

  ServletContext application =ServletContextEvent.getServletContext();

  context-param的值= application.getInitParameter("context-param的键");

  得到这个context-param的值之后,你就可以做一些操作了。

  举例:你可能想在项目启动之前就打开数据库,那么这里就可以在<context-param>中设置数据库的连接方式(驱动、url、user、password),在监听类中初始化数据库的连接。这个监听是自己写的一个类,除了初始化方法,它还有销毁方法,用于关闭应用前释放资源。比如:说数据库连接的关闭,此时,调用contextDestroyed(ServletContextEvent args),关闭Web应用时,系统调用Listener的该方法。

        接着,容器会读取<filter></filter>,根据指定的类路径来实例化过滤器。

<filter>
		<filter-name>struts2</filter-name>
		<filter-class>com.george.filter.MyStrutsFilter</filter-class>
		<init-param>
			<param-name>config</param-name>
			<param-value>struts-default.xml,struts-plugin.xml,struts.xml</param-value>
		</init-param>
</filter>

  以上都是在WEB项目还没有完全启动起来的时候就已经完成了的工作。如果系统中有Servlet,则Servlet是在第一次发起请求的时候被实例化的,而且一般不会被容器销毁,它可以服务于多个用户的请求。所以,Servlet的初始化都要比上面提到的那几个要迟。总的来说,web.xml的加载顺序是: <context-param>-> <listener> -> <filter> -> <servlet>。其中,如果web.xml中出现了相同的元素,则按照在配置文件中出现的先后顺序来加载。

详解1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值