[url]http://hi.baidu.com/lizhm/item/9f33d24c8d05eb0e6cc2f07c[/url]
[quote]在servlet-2.3中,Filter会过滤一切请求,包括服务器内部使用forward转发请求和<%@ include file="/index.jsp"%>的情况。
到了servlet-2.4中Filter默认下只拦截外部提交的请求,forward和include这些内部转发都不会被过滤,但是有时候我们需要forward的时候也用到Filter,这样就需要如下配置。
<filter><filter-name>TestFilter</filtername><filter-class>anni.TestFilter</filter-class></filter><filter-mapping><filter-name>TestFilter</filtername><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher><dispatcher>INCLUDE</dispatcher><dispatcher>EXCEPTION</dispatcher></filter-mapping>
这里FORWARD是解决request.getDispatcher("index.jsp").forward(request, response);无法触发Filter的关键,配置上这个以后再进行forward的时候就可以触发过滤器了。[/quote]
[quote]在servlet-2.3中,Filter会过滤一切请求,包括服务器内部使用forward转发请求和<%@ include file="/index.jsp"%>的情况。
到了servlet-2.4中Filter默认下只拦截外部提交的请求,forward和include这些内部转发都不会被过滤,但是有时候我们需要forward的时候也用到Filter,这样就需要如下配置。
<filter><filter-name>TestFilter</filtername><filter-class>anni.TestFilter</filter-class></filter><filter-mapping><filter-name>TestFilter</filtername><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher><dispatcher>INCLUDE</dispatcher><dispatcher>EXCEPTION</dispatcher></filter-mapping>
这里FORWARD是解决request.getDispatcher("index.jsp").forward(request, response);无法触发Filter的关键,配置上这个以后再进行forward的时候就可以触发过滤器了。[/quote]
本文详细解释了在Servlet 2.4版本中Filter如何仅拦截外部提交请求,而忽略forward和include的内部转发。并提供了解决在使用forward时也能触发Filter的方法,通过配置Filter的<dispatcher>元素来实现FORWARD、INCLUDE和EXCEPTION的拦截。
4305

被折叠的 条评论
为什么被折叠?



