• Filter过滤器,责任链设计模式


    一、Filter作用:

    1. Filter可以在Servlet这个目标程序执行之前添加代码。也可以在目标Servlet执行之后添加代码。之前之后都可以添加过滤规则。
    2. 一般情况下,都是在过滤器当中编写公共代码。
    3. 注意:
      Servlet对象默认情况下,在服务器启动的时候是不会新建对象的。
      Filter对象默认情况下,在服务器启动的时候会新建对象。
      在这里插入图片描述

    二、实现步骤:

    • 第一步:编写一个Java类实现一个接口:jarkata.servlet.Filter。并且实现这个接口当中所有的方法。
      • init方法:在Filter对象第一次被创建之后调用,并且只调用一次。
      • doFilter方法:只要用户发送一次请求,则执行一次。发送N次请求,则执行N次。在这个方法中编写过滤规则。
      • destroy方法:在Filter对象被释放/销毁之前调用,并且只调用一次。
    • 第二步:在web.xml文件中对Filter进行配置。这个配置和Servlet很像。
    <filter>
        <filter-name>filter2filter-name>
        <filter-class>com.bjpowernode.javaweb.servlet.Filter2filter-class>
    filter>
    <filter-mapping>
        <filter-name>filter2filter-name>
        <url-pattern>*.dourl-pattern>
    filter-mapping>
    注意:filter-mapping越靠上,越早执行
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9

    或者使用注解:@WebFilter({“*.do”})
    使用注解时,Filter类名字典序小的先执行。

    三、例子:

    import jakarta.servlet.*;
    import jakarta.servlet.annotation.WebFilter;
    import java.io.IOException;
    /*
     *
     * /crud/a精确匹配
     * /*匹配所有路径
     * *a后缀匹配
     * /crud/*前缀匹配
     * 
     */
    @WebFilter("/*")//匹配所有servlet,所有servlet执行前后都要走这个过滤器
    public class Filter1 implements Filter {
        @Override
        public void init(FilterConfig filterConfig) throws ServletException {
    
        }
    
        @Override
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            //在浏览器发送请求的时候添加过滤规则
            chain.doFilter(request,response);//执行下一个过滤器,如果下一个不是过滤器,则执行目标servlet
            //在服务器向浏览器发送响应的时候添加过滤规则
        }
    
        @Override
        public void destroy() {
    
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31

    四、责任链设计模式

    • 过滤器最大的优点:
      在程序编译阶段不会确定调用顺序。因为Filter的调用顺序是配置到web.xml文件中的,只要修改web.xml配置文件中filter-mapping的顺序就可以调整Filter的执行顺序。显然Filter的执行顺序是在程序运行阶段动态组合的。那么这种设计模式被称为责任链设计模式。
    • 责任链设计模式最大的核心思想:
      在程序运行阶段,可以动态的组合程序的调用顺序。
  • 相关阅读:
    海川润泽智慧灌区管理平台
    浅谈Python中列表元素的修改以及列表的统计与排序
    翻译软件有哪些-翻译软件大家都推荐使用的有哪些
    Android - 修改Jar包里面的代码
    使用Apache和内网穿透实现私有服务公网远程访问——“cpolar内网穿透”
    Linux操作系统:多进程拷贝
    基于nodejs+vue学籍管理系统
    剑指 Offer 10- I. 斐波那契数列
    【rust/egui】(十一)使用rfd选择文件并使用serde_json进行序列化
    java静态变量理解
  • 原文地址:https://blog.csdn.net/m0_53881899/article/details/126472723