关于JSP Filter的概念

web.xml中要配置Filter.
Filter的主要功能是对Request和Response预处理,一个比较生动的例子是,request和response分别是条路,而Filter是在这条路中的一个加油站。

预处理主要包括:

1. 根据URL-Pattern的指定模式,截获用户Request, 检查和修改Request Header && Content

2. 根据URL-Pattern的指定模式,假定该Filter转发请求至对应的Servlet,那么在Servlet进行Response时,该Filter可以修改Response Header && Content

多个Filter组成一个预处理的Filter Chain.

根据在Web.xml的声明顺序,来确定Filter的预处理顺序.

模拟一个用户Request.

web.xml

<filter>
<filter-name>first</filter>
<filter-class>com.baidu.first</filter-class>
</filter>
<filter-mapping>
<filter-name>first</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>second</filter>
<filter-class>com.baidu.second</filter-class>
</filter>
<filter-mapping>
<filter-name>second</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

根据Web.xml的配置顺序,url-pattern截获所有的用户请求。


对于
package com.baidu
class first implements Filter{
    public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ){
        ...
        ...
        ...
        chain.doFilter( request,response );
        ...
        ...
        ...
    }
}
package com.baidu
class second implements Filter{
    public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain ){
        ...
        ...
        ...
        chain.doFilter( request,response );
        ...
        ...
        ...
    }
}
已doFilter为界,正常的顺序:

Request -->  first chain.doFilter 之前的代码  -->  second  chain.doFilter 之前的代码  -->  对应的Servlet
                                                                                    
Response <-- first chain.doFilter 之后的代码  <--  second  chain.doFilter 之后的代码  <--  Servlet的Response    

加入FilterChain,给Filter Chain带来了很大的方便,当执行第一个Filter时,不调用chain.doFiler方法之后,那么之后的所有步骤都不会发生,Servlet产生的response直接发送到用户。                                                                            
























posted @ 2011-12-29 11:36  papertiger  阅读(440)  评论(0)    收藏  举报