过滤器

过滤器

  • 他会在一组资源的前面执行
  • 有拦截请求的能力

如何书写过滤器

  • 写一个类实现filter接口这里写图片描述
  • 在web.xml中进行配置这里写图片描述
  • 注意:Filter-mapping中可以使用Servlet-name执行要过滤的资源这里写图片描述

Filter接口

  • init(FilterConfig)创建Filter之后,立即执行,FIlter会在服务器启动的时候就进行创建
    • FilterConfig 对应web.xml中配置文件,可以获取Filter的名字,初始化参数,和ServletContext
  • destroy()销毁之前执行,在服务器关闭时销毁
  • doFilter(ServletRequest,ServletResponse,FilterChain)每次过滤时都会执行
    • ==FilterChain的一个doFilter方法可以放行==
      • 如果有下一个目标过滤器,那么就执行目标过滤器,如果没有下一个目标过滤器,就执行下一个目标资源

多个过滤器的执行顺序

  • web服务器根据Filter在web.xml中的注册顺序,决定先调用哪个Filter,当第一个Filter的doFilter方法被调用时,web服务器会创建一个代表Filter链的FilterChain对象传递给该方法,在doFilter方法中,开发人员如果调用了FilterChain对象的doFilter方法,则web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第二个filter,如果没有,则调用目标资源
  • 现在过滤器中配置的先执行,如果放行了,还有过滤器就执行过滤器,如果没有就执行资源

过滤器的四种拦截方式

  • 拦请求(REQUEST)
    • 直接访问目标资源时执行过滤器。包括:在地址栏中直接访问、表单提交、超链接、重定向,只要在地址栏中可以看到目标资源的路径,就是REQUEST;
  • 拦转发(FORWARD)
    • 转发访问执行过滤器。包括RequestDispatcher#forward()方法,标签都是转发访问
  • 拦包含(INCLUDE)
    • 包含访问执行过滤器。包括RequestDispatcher#include()方法,标签都是包含访问;
  • 拦错误(ERROR)
    • 当目标资源在web.xml中配置为中时,并且真的出现了异常,转发到目标资源时,会执行过滤器。
  • ==还需要进行配置才可以生效,拦截方式的配置,在Filter的配置文件内==
    • 拦截方式的配置问题:可以在中添加0~n个子元素,来说明当前访问的拦截方式。
    • 格式:这里写图片描述
    • 默认的拦截方式是:REQUEST
    • REQUEST和FORWARD用的多一点
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值