栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Filter过滤器

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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配置: 依次按照的顺序执行,谁在上面就先执行谁

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/591630.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号