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

多个过滤器拦截同一个目标资源
  一个目标资源可以指定多个过滤器,过滤器的执行顺序是由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中配置的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
filter过滤器拦截器是Web开发中常用的两种组件,它们在请求处理过程中起到了类似于"中间件"的作用,用于对请求进行处理和拦截Filter过滤器是Servlet规范中定义的一种组件,它可以对请求进行预处理和后处理。Filter可以拦截特定的URL请求,对请求进行处理,并将请求传递给下一个过滤器或Servlet。Filter可以用于对请求进行身份验证、日志记录、编码转换、资源过滤等等操作。一个应用可以配置多个Filter,它们按照配置的顺序依次执行拦截器是在Spring框架中使用的一种组件,它也可以对请求进行预处理和后处理。拦截器的使用更加灵活,可以对请求进行更加细粒度的控制。拦截器可以拦截Controller方法的调用,在方法执行前后做一些处理,例如身份验证、日志记录、性能监控等。一个应用可以配置多个拦截器,它们按照配置的顺序依次执行。 在使用上,filter和interceptor有一些区别: - Filter是基于Servlet规范的,而Interceptor是Spring框架提供的; - Filter可以对所有的请求进行拦截,而Interceptor可以对Controller方法进行拦截; - Filter只能通过web.xml或注解进行配置,而Interceptor可以通过Java代码进行配置; - Interceptor可以访问Spring的上下文,而Filter不能。 总结来说,filter和interceptor都可以用于对请求进行处理和拦截,但是它们的具体实现和使用方式有一些差异。在使用时,可以根据具体需求选择适合的组件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值