1.解释:过滤器,其实顾名思义,就是起到过滤的作用,比如生活中的空气净化器,净水器等,过滤出想要的东西。那么反应在程序中其实就是请求过来之后,可以拦截下来,通过自己的业务逻辑设计,让一些符合规则条件的请求过去,而不符合的就拦截,常见的例如:登录验证功能,敏感词汇替换过滤等。

2.步骤:
创建一个类实现Filter接口
复写方法
配置拦截路径

(1)注解方式:@WebFilter("/*") 表示访问时,所有资源都执行该过滤器
		还可以设置dispatcherTypes属性
					1. REQUEST:默认值。浏览器直接请求资源
					2. FORWARD:转发访问资源
					3. INCLUDE:包含访问资源
					4. ERROR:错误跳转资源
					5. ASYNC:异步访问资源
@WebFilter(value = "/*",dispatcherTypes = DispatcherType.REQUEST)
package cn.itcast.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;

@WebFilter("/*")
public class LoginFilter implements Filter {
    public void destroy() {
    }

    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        System.out.println("进来了");
        //可以写一些自己的过滤逻辑后选择是否放行
        //放行
        chain.doFilter(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {

    }

}

(2)xml配置
在web.xml中设置:

<filter>
        <filter-name>demo1</filter-name>
        <filter-class>cn.itcast.filter.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>demo1</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

3.过滤器执行流程
(1). 执行过滤器
(2). 执行放行后的资源
(3). 回来执行过滤器放行代码下边的代码

4.过滤器生命周期方法
(1) init:在服务器启动后,会创建Filter对象,然后调用init方法。只执行一次。用于加载资源
(2) doFilter:每一次请求被拦截资源时,会执行。执行多次
(3) destroy:在服务器关闭后,Filter对象被销毁。如果服务器是正常关闭,则会执行destroy方法。只执行一次。用于释放资源

5 拦截路径配置:

  1. 具体资源路径: /index.jsp 只有访问index.jsp资源时,过滤器才会被执行
  2. 拦截目录: /user/* 访问/user下的所有资源时,过滤器都会被执行
  3. 后缀名拦截: *.jsp 访问所有后缀名为jsp资源时,过滤器都会被执行
  4. 拦截所有资源:/* 访问所有资源时,过滤器都会被执行
    6.过滤器先后顺序问题:
    1. 注解配置:按照类名的字符串比较规则比较,值小的先执行
    * 如: AFilter 和 BFilter,AFilter就先执行了。
    2. web.xml配置: 谁定义在上边,谁先执行