JavaWeb学习笔记:拦截器

一、概述

当客户端发起请求时,Filter 过滤器可以将请求拦截下来,对请求进行一些判断,只有符合要求的请求才会放行。应用场景:登录验证,设置编码,过滤明杆字符等。

二、生命周期

过滤器的生命周期和 Servlet 类似,也是分为:新生、服务、销毁

  • init()方法:在服务器启动后创建Filter对象,每个类型的Filter只创建一个实例,在创建完Filter实例后,马上调用init()方法,只执行一次,用于加载资源

  • doFilter()方法:每一次请求被拦截请求资源时调用,对请求进行判断,满足要求就放行,可执行多次,这里面必须调用FilterChain的doFilter()方法,否则这个拦截器毫无意义

  • destory()方法:服务器正常关闭时调用distory方法销毁Filter对象,只执行一次,用于释放资源

三、执行流程和执行顺序

1、执行流程

  1. 请客户端发起请求会先经过过滤器

  2. 过滤后的请求再次请求资源

  3. 请求完资源后回到过滤器

2、执行顺序

  1. 如果有多个过滤器的话,会按照配置文件 web.xml 中从上到下的定义顺序执行

  2. 如果是注解则按照类名的字符串比较规则比较,值小的先执行

四、过滤器的配置

使用过滤器需要我们到 web.xml 文件下进行配置

<filter>
    <filter-name>myfilter</filter-name>
    <filter-class>com.org.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
    <filter-name>myfilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

1、设置目标资源

  • 具体资源路径:/index.jsp ==> 只有访问index.jsp资源时,过滤器才会被执行

  • 拦截目录:/user/* ==> 访问/user下的所有资源时,过滤器都会被执行

  • 后缀名拦截:.jsp ==> 访问所有后缀名问jsp资源时,过滤器都会被执行

  • 拦截所有资源:/ ==> 访问任何资源,过滤器都会被执行

2、四种拦截方式

过滤器有四种拦截方式,分别是:REQUEST、FORWARD、INCLUDE、ERROR。

  • REQUEST:直接访问目标资源时执行过滤器。包括:在地址栏中直接访问、表单提交、超链接、重定向,只要在地址栏中可以看到目标资源的路径,就是REQUEST

  • FORWARD:转发访问执行过滤器。如 RequestDispatcher 的 forward() 方法、jsp:forward 标签都是转发访问

  • INCLUDE:包含访问执行过滤器。包括 RequestDispatcher 的 include() 方法、jsp:include 标签都是包含访问

  • ERROR:当目标资源在web.xml中配置为<error-page>中时,并且真的出现了异常,转发到目标资源时,会执行过滤器。

2.1 在 web.xml 文件中可以在<filter-mapping>中添加0~n个<dispatcher>子元素,来说明当前访问的拦截方式

<filter-mapping>
    <filter-name>myfilter</filter-name>
    <url-pattern>/*</url-pattern>
    <dispatcher>FORWARD</dispatcher>
</filter-mapping>

2.2 注解配置(设置配置文件的 dispatcherTypes 属性)

 

 

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值