kxbin
成功留给有准备的人
posts - 10,  comments - 35,  trackbacks - 0

Filter是一个很有用的东西,使用filter可以修改request, response, session, application中的内容。

1. javax.servlet.Filter有两个重要的方法 
public void init(FilterConfig config)
public void doFilter(ServletRequest request, ServletResponse response, 

  FilterChain chain)
其中init方法用来作一些初始化的方法,而doFilter方法用来执行真正的过滤操作。

2. Filter的部署方法 
在web.xml中要声明filter元素,并分配需要其处理的url,如下:
<filter>
    <filter-name>Filter1</filter-name>
    <filter-class>com.baidu.Filter1</filter-class>
</filter>
<filter>
    <filter-name>Filter2</filter-name>
    <filter-class>com.baidu.Filter2</filter-class>
</filter>
<filter-mapping>
    <filter-name>Filter1</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
    <filter-name>Filter2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

3. doFilter函数的执行顺序 
当某个url请求匹配了多个Filter时,应用服务器将多个Filter组织成FilterChain,这个链的执行顺序是由其<filter-mapping>元素在web.xml文件中的顺序决定的。
doFilter函数可以过滤请求或者响应,当其过滤完请求后将调用FilterChain的doFilter函数让FilterChain中的下一个Filter来过滤请求。最先过滤请求的Filter将最后过滤相应,下面是个简单的例子。
public void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException
{
       system.out.println(“filter request here ----”);
        // todo:
       chain.doFilter(request,response);
       system.out.println(“filter response here ----”);
        // todo:

}

4.init函数的执行顺序 
    对于不同的应用服务器,Filter的init函数的执行时间是不同的,例如:tomcat会在tomcat启动的时候执行init函数,而weblogic等一些其他的应用服务器则会在该Filter匹配的url被首次请求的时候加载。
(下面的部分是我通过实验猜想的,不一定正确。) 
    对于tomcat而言,tomcat启动时会解析web.xml文件,然后按照<filter>元素的顺序将各个Filter元素加载到一个 HashMap中。解析完成后,会从HashMap中一个个的拿出Filter元素,串行的执行其init函数(这里的执行有先后关系,是在一个线程中执 行的)。所以在tomcat中定义的多个Filter其init函数的执行顺序就是其在HashMap中的散列顺序,具体来说与其在web.xml文件中 的定义位置及其名字有关。
    对于HashMap来说,如果其元素固定不变,则其顺序也是固定不变的,但当元素个数发生变化时,便不能保证其顺序(例如:当有两个元素时,A在B的前面,当再加入20个元素的时候A就不一定在B的前面了),所以init函数的执行顺序是无法保证的。
posted on 2011-12-28 08:58 kxbin 阅读(5094) 评论(0)  编辑  收藏 所属分类: J2EE

只有注册用户登录后才能发表评论。


网站导航:
 
你恨一个人是因为你爱他;你喜欢一个人,是因为他身上有你没有的;你讨厌一个人是因为他身上有你有的东西;你经常在别人面前批评某人,其实潜意识中是想接近他。

<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

常用链接

留言簿(5)

随笔档案

文章分类

文章档案

相册

收藏夹

J2EE

java技术网站

Linux

平时常去的网站

数据库

电影网站

网站设计

搜索

  •  

最新评论

阅读排行榜

评论排行榜