Filter过滤器

目录

Filter过滤器

–1,概述

–2,使用步骤

–3,创建过滤器

–4,测试

–5,Filter生命周期

–6,测试

–7,过滤器的匹配规则 

FilterChain过滤器链

执行顺序:

过滤器的先后顺序


Filter过滤器

–1,概述

用来过滤请求或者响应
当A请求B时,可以在中间添加一个过滤器
当A给B做出响应时,可以在中间添加一个过滤器

–2,使用步骤

1, 创建类implements Filter接口
2, 重写抽象方法doFilter
3, 能否触发过滤器

–3,创建过滤器

package cn.tedu.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
//创建过滤器:implements Filter+重写抽象方法
@WebFilter("/*")//拦截所有请求
public class Filter1 implements Filter {
    //销毁,执行1次
    public void destroy() {
    }
    //类似于Servlet的service(),会被执行多次
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        System.out.println("过滤器开始执行任务~~");
        chain.doFilter(req, resp);//放行,解除阻塞状态
    }
    //初始化,执行1次
    public void init(FilterConfig config) throws ServletException {
    }
}

–4,测试

直接浏览器访问Servlet就可以触发过滤器的规则

–5,Filter生命周期

package cn.tedu.filter;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
//创建过滤器:implements Filter+重写抽象方法
@WebFilter("/*")//拦截所有请求
public class Filter1 implements Filter {
    //第三阶段,销毁阶段,Filter会自动调用destroy(),只会执行1次
    public void destroy() {
        System.out.println("filter被销毁~~~");
    }
    //第二阶段,类似于Servlet的service()服务阶段,会被Filter执行多次
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        System.out.println("过滤器开始执行任务~~");
        chain.doFilter(req, resp);//放行,继续访问目标资源,否则目标资源无法执行
    }
    //第一阶段,初始化阶段,Filter会自动调用init(),只会执行1次
    public void init(FilterConfig config) throws ServletException {
        System.out.println("filter被初始化完成~~~");
    }
}

–6,测试

–7,过滤器的匹配规则 

可以有4种配置方式:
1,具体文件: /index.jsp ,是指只有访问index.jsp这一个资源时,过滤器会被执行
2,匹配前缀: /user/* ,是指访问user下的所有资源时,过滤器会被执行
3,匹配后缀: * .jsp, 是指访问所有后缀名为jsp的文件时,过滤器会被执行
4,匹配所有: /* ,是指访问所有资源时,过滤器会被执行

package cn.tedu.filterdemo;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;
//@WebFilter("/hello1.html") //只拦截固定资源
//@WebFilter("/user/*") //按照请求前缀拦截
//@WebFilter("*.jsp") //按照请求后缀拦截
@WebFilter("/*") //啥都拦截
public class Filter4 implements Filter {
    public void destroy() {
    }
    public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
        System.out.println("filter doFilter....");
        chain.doFilter(req, resp);
    }

    public void init(FilterConfig config) throws ServletException {

    }

}

 

FilterChain过滤器链

执行顺序:

有多个过滤器配置时,依次按照:
过滤器1
过滤器2
执行资源
过滤器2
过滤器1
在这里插入图片描述

过滤器的先后顺序

注解配置: 哪个过滤器将会先被执行,会按照类名的字符串比较规则,较小的先执行.如: AFilter先于BFilter执行,Filter3先于Filter4执行
web.xml配置: 依次按照的顺序执行,谁在上面就先执行谁

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

#空城

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值