Filter过滤器的四种拦截方式和执行顺序

转发:https://blog.csdn.net/dawiebazhanlang/article/details/80619870

多个过滤器拦截同一个目标资源
  一个目标资源可以指定多个过滤器,过滤器的执行顺序是由web.xml文件中的<filter-mapping></filter-mapping>的部署顺序决定的。
一定要注意的是,那个Filter的执行顺序和Filter在web.xml文件中的位置先后无关,只和mapping的顺序有关,谁的mapping在前,就先
执行谁,然后执行的顺序是,接着执行下一个Filter,直到所有的过滤器执行结束,然后才是访问目标资源。例如:AFilter和BFilter都
拦截AServlet,mapping配置如下:
<filter>
    <display-name>AFilter</display-name>
    <filter-name>AFilter</filter-name>
    <filter-class>day15_1.AFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>AFilter</filter-name>
    <servlet-name>Aservlet</servlet-name>
  </filter-mapping>
  <filter>
    <display-name>BFilter</display-name>
    <filter-name>BFilter</filter-name>
    <filter-class>day15_1.BFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>BFilter</filter-name>
    <servlet-name>Aservlet</servlet-name>
  </filter-mapping>
(就是AFilter的mapping在BFilter之前,执行的结果如下图。)

Filter四种拦截方式:
 * request(默认)
 * forward (拦截转发)
 * include (拦截包含)
 * error (只拦截错误页面)
如果想要以不同的方式拦截,我们需要在<Filter-mapping>中添加<Dispacher>forward</Dispachaer>(这个字段会把之前的request
的值进行覆盖。并且会拦截需要转发的请求)
include 的用法和dispacher 的用法相似,不在进行介绍。
error的用法是用来来接错误信息页面,我们可以在web.xml的页面中配置错误页面的信息,具体配置如下(在Mapping之外配置):
<error-page>
 <error-code>500</error-code>//此处应该写的数错误状态码
 <location>/index.jsp</location>//此处应该写的是拦截的具体路径
</error-page>、
错误页面的信息配置完成之后,我们就可以像之前的request拦截一样,在<Filter-mapping>中进行配置<Dispacher>error</Dispachaer>
这时候,当我们要访问的页面出错误时,过滤器便会自动进行拦截,同时我们可以使用request.sendError(500,"错误信息");
来让页面产生错误。

注意:error的拦截只试用与错误页面,所谓的错误页面是在web.xml中配置的。
--------------------- 
作者:大尾巴战狼 
来源:CSDN 
原文:https://blog.csdn.net/dawiebazhanlang/article/details/80619870 
版权声明:本文为博主原创文章,转载请附上博文链接!

猜你喜欢

转载自blog.csdn.net/xqhys/article/details/84333598