现在的位置: 首页 > 综合 > 正文

web.xml配置讲解

2013年08月12日 ⁄ 综合 ⁄ 共 1853字 ⁄ 字号 评论关闭
web.xml两种参数的设定,以及取值
2010-04-09 08:15

web.xml可以设定两种参数

1.在servlet里面,或者filter里面有参数设置的地方,例如

<servlet>
        <servlet-name>HelloWorldExample</servlet-name>
        <servlet-class>HelloWorldExample</servlet-class>
        <init-param>
        <param-name>my</param-name>
        <param-value>you</param-value>
        </init-param>
    </servlet>

这里面的
参数设定,是针对HelloWorldExample这一个servlet设定的,我们可以在HelloWorldExample类里面通过
System.out.println(this.getInitParameter("my"));;来获取该servlet的参数。

2.就是全局性的参数,针对所有的servlet都有效,设置方式如下,在web.xml里面

<!-- 全局参数设置测试 -->
<context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/classes/META-INF/applicationContext*.xml </param-value>
</context-param>

这个参数可以再所有的servlet里面通过

System.out.println(getServletContext().getInitParameter("contextConfigLocation"));

来获取全局参数。

*************************************************************************************************************************

参考

同时可以记一下。

web.xml中context-param,listener,filter,servlet加载顺序

不同类别加载顺序:先 context-param
然后 listener
接下来 filter
最后 servlet

同类别的加载顺序:根据对应的mapping的先后顺序

 

注意:定义必须在对应的mapping之前

http://blog.csdn.net/lwzcjd/archive/2008/10/14/3072971.aspx

**********************************************************************************************************

servlet实例化,filter
实例化

filter是在容器启动的时候,就被实例化,并执行其init方法

而servlet默认(<load-on-startup>不写,或者为负数)情况下是在被请求的时候,容器才将其实例化,并执行其init方法。

以上这种情况可以通过<load-on-startup>1</load-on-startup>方式改
变,filter没有这个属性(我做的时候没有看见)在servlet里面设置了这个属性(必须是正数,负数的话也不会初始化),则该servlet会和
filter一样,在容器启动的时候被实例化,并执行其init方法。

其中<load-on-startup>的值越大,则实例化的优先级越低,即这个值好像是以ms计时的,越小实例化的
就越快。但是即使servlet设置了<load-on-startup>属性,即容器启动时实例化,filter还是会在所有
servlet实例化之前就实例化。

 

既然filter没有<load-on-startup>属性,那么如果有多个filter,他们的实例化顺序是什么样的呢?

默认情况下,web.xml最下面的filter最先实例化,也就是最先执行最下面的filter的init方法,这个init方
法和具体调用的不一样。具体调用时执行doFilter方法,这个方法的执行顺序是,按照<filter-mapping>的顺序执行的。

以上除参考部分,都是练习所得,可能有不正确的地方,还望指正。

抱歉!评论已关闭.