1. 过滤器的概述

过滤器(Filter)就是通过对web服务器管理的资源(jsp,Servlet,HTML文件)进行拦截,从而实现特殊功能(敏感词的过滤,自动登录的功能);

2.过滤器的工作的原理

过滤器就是在接受到自己相同访问路径的请求时候,先进行一次过滤
有两种情况:

  1. 如果过滤器同意放行,就会放行交给下一个过滤器
  2. 如果不同意放行的话就不会执行请求所要执行的程序

执行的一般的顺序为:
请求---->过滤器1---->过滤器2…---->过滤器n---->目的地(jsp,Servlet)

3.如何实现一个过滤器

  1. 实现一个接口(Filter)
  2. 在实现接口的类上面添加一行注释:
@webFilter(urlPatterns="需要过滤的路径")

@webFilter(urlPatterns="需要过滤的路径")
  1. 通过Filter的doFilter方法使其放行,是否使其进入下一个过滤器
filterChain.doFilter(servletRequest,servletResponse);//进入到下一个滤波器

filterChain.doFilter(servletRequest,servletResponse);//进入到下一个滤波器

4.滤波器的匹配路径的方法

(1)精确匹配,路径是什么,就匹配此路径
比如/s1 /s3
(2)前缀匹配
前缀匹配的方法是:/* 匹配的是所有的路径
/user/* 匹配的是所有以user为开头的路径
(3)后缀匹配
*. jsp 匹配所有的.jsp 的文件

5.滤波器的生命的周期

Filter接口一共有只有三个方法
(1)init方法:只会在初始化的时候使用一次

void init(FilterConfig var1) throws ServletException;
//其中FilterConfig的作用是:FilterConfig对象提供对servlet环境及web.xml文件中指派的过滤器名的访问。
//FilterConfig对象具有一个getInitParameter方法,它能够访问部署描述符文件(web.xml)中分配的过滤器初始化参数。

void init(FilterConfig var1) throws ServletException;
//其中FilterConfig的作用是:FilterConfig对象提供对servlet环境及web.xml文件中指派的过滤器名的访问。
//FilterConfig对象具有一个getInitParameter方法,它能够访问部署描述符文件(web.xml)中分配的过滤器初始化参数。

(2)destroy方法:会在程序调用停止的时候执行
(3)doFilter方法:doFilter()方法每次的访问请求如果符合拦截条件都会调用

6.多个过滤器执行的顺序的问题

过滤器执行的顺序取决于过滤器的名称(按字典顺序)
或者是web.xml文件里面的

<filter>
    <!-- 过滤器名字 -->
    <filter-name>f1</filter-name>
    <!-- 过滤器对应的java类 -->
    <filter-class>filter.Filter1</filter-class>
</filter>
<filter-mapping>
    <filter-name>f1</filter-name>
    <!-- 过滤器要过滤的路径 -->
    <url-pattern>/ *</url-pattern>
</filter-mapping>
<!-- 等价于 @WebFilter(urlPatterns="/*") -->

<filter>
    <!-- 过滤器名字 -->
    <filter-name>f1</filter-name>
    <!-- 过滤器对应的java类 -->
    <filter-class>filter.Filter1</filter-class>
</filter>
<filter-mapping>
    <filter-name>f1</filter-name>
    <!-- 过滤器要过滤的路径 -->
    <url-pattern>/ *</url-pattern>
</filter-mapping>
<!-- 等价于 @WebFilter(urlPatterns="/*") -->

在这个时候的话,就会先让标签mapping在前面的执行

7.过滤器的应用

过滤器可以使用的地方为:
1.如果有重复的代码,可以在进入过滤器的的时候进行设置,减少重复的代码
2.还可以应用于登录时的自动的登录的功能
3.还可以应用于登录的验证的功能