关于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直接发送到用户。

浙公网安备 33010602011771号