JavaWeb三大组件之一 —— Filter

目录

1. 简介
2. 快速入门
3. 执行流程
4. 生命周期
5. 两种配置方式
6. 配置详解
7. 过滤器链(配置多个过滤器)

1. 简介

在 javax.servlet 包中。当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能。
过滤器的作用:一般用于完成通用的操作。如:登录验证,统一编码处理、敏感字符过滤等

2. 快速入门

  1. 定义一个类,实现接口Filter
  2. 实现Filter接口方法
  3. 配置拦截路径(访问什么资源,过滤器生效)
    • 两种配置方式
      1. web.xml配置
      2. 注解配置(常用)

3. 执行流程

  1. 执行过滤器
  2. 执行放行后的资源,如jsp、servlet等
  3. 回来执行过滤器放行代码下边定义的代码

4. 生命周期

  1. init:服务器启动后,会创建Filter对象,调用init。只执行一次。作用:用于加载资源。
  2. doFilter:每一次请求被拦截的资源时,执行。
  3. destroy:服务器关闭后,Filter对象被销毁,只执行一次。如果服务器正常关闭,则执行destory。反之不执行。作用:一般用于释放资源。

5. 两种配置方式

方式一:web.xml配置方式

<filter>
    <filter-name>demo2</filter-name>
    <!--Filter全类名-->
    <filter-class>cn.web.Filter.FilterDemo2</filter-class>
</filter>
<filter-mapping>
    <filter-name>demo2</filter-name>
    <!--url-pattern,表示拦截路径。访问所有的资源都会执行demo2的Filter-->
    <url-pattern>/*</url-pattern>
    <dispatcher>REQUEST</dispatcher>
</filter-mapping>

方式二:注解配置,只能作用在类上,保留到运行时

@WebFilter(value = "/index.jsp", dispatcherTypes = DispatcherType.REQUEST)

6. 配置详解

拦截路径的配置

  1. 具体的资源路径:如:"/index.jsp"只有访问index.jsp资源时,过滤器才会被执行。
  2. 拦截目录:如:"/user/*访问/user下的所有资源时,过滤器都会被执行。
  3. 拦截后缀名:如: "*.jsp"访问所有后缀名为jsp资源时,过滤器都会被执行
  4. 拦截所有资源:如: "/*"访问任意资源,过滤器都会被执行

拦截方式的配置:资源被访问的方式

  1. 注解配置:设置 dispatcherTypes 属性,值是一种枚举,有五种取值
    1. FORWARD:转发访问资源
      比如:@WebFilter(value = “/index.jsp”, dispatcherTypes = DispatcherType.FORWARD) 只有转发访问index.jsp时,该过滤器才会被执行
    2. INCLUDE:包含访问资源
    3. REQUEST:默认值。客户端(浏览器)直接请求资源
      比如:@WebFilter(value = “/index.jsp”, dispatcherTypes = DispatcherType.REQUEST) 客户端直接请求index.jsp时,过滤器才会被执行
    4. ASYNC:异步访问资源
    5. ERROR:错误跳转资源(例如index页面配置的错误页面)

注意:
如下注解,浏览器直接发送请求或者转发访问index.jsp,过滤器都会被执行:

@WebFilter(value = "/index.jsp", dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD})

如下注解,并且定一个Servlet转发到index.jsp。那么:在浏览器中访问这个servlet,过滤器会执行2次!!

@WebFilter(value = "/*", dispatcherTypes = {DispatcherType.REQUEST, DispatcherType.FORWARD}) 
  1. web.xml配置:设置标签即可, 也有5个属性,同注解配置的5个参数。

7. 过滤器链(配置多个过滤器)

执行顺序:

如果有2个过滤器,过滤器1和过滤器1,执行顺序如下:

  1. 过滤器1
  2. 过滤器2
  3. 资源执行
  4. 过滤器2
  5. 过滤器1

过滤器执行先后的规则:

  1. 注解配置:按照类名的字符串比较规则比较,值小的过滤器先执行!
    如:AFilter 和 BFilter。那么:AFilter先执行,BFilter后执行。
  2. web.xml配置:标签定义在前面的,先执行。

猜你喜欢

转载自blog.csdn.net/weixin_41463971/article/details/88768494