RequestDispatcher接口中定义了两个方法:forward和include方法。二者的区别在于,forward方法会把请求的控制权交出去,而include方法不会交出控制权,只是把别的资源包含到自己的响应中
HttpServletResponse.sendRedirect()方法是重定向,RequestDispatcher.forward()是请求转发
<filter-mapping>元素有一个子元素叫<dispatcher>,它的值有四个,分别是REQUEST、FORWARD、INCLUDE和ERROR。下面具体看下这四种取值的区别:
REQUEST,这是默认值。它只对直接从客户端发起的请求起作用。
FORWARD,它只过滤转发的请求
INCLUDE,它只过滤通过include方法过来的请求
ERROR,它只对通过<error-page>发起的请求进行过滤。比如:这样定义
<error-page>
<code>404</code>
<location>/error.jsp</location>
</error-page>
<filter-mapping>
<filter-name>MyFilter</filter-name>
<url-pattern>/error.jsp</url-pattern>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
总之,REQUEST、FORWARD、INCLUDE、ERROR分别使得filter对直接从客户端过来的请求、通过forward过来的请求、通过include过来请求、通过error-page过来的请求进行过滤。
本文出自 “十里稻花香” 博客,请务必保留此出处http://5880861.blog.51cto.com/5870861/1611836
原文地址:http://5880861.blog.51cto.com/5870861/1611836