• 过滤器(Filter)入门


    概述

    Filter 表示过滤器,是 JavaWeb 三大组件(Servlet、Filter、Listener)之一.过滤器可以把对资源的请求拦截下来,从而实现一些特殊的功能。

    过滤器一般完成一些通用的操作。比如每个资源都要写一些代码完成某个功能,我们总不能在每个资源中写这样的代码吧, 而此时我们可以将这些代码写在过滤器中,因为请求每一个资源都要经过过滤器。

    创建第一个Filter

    定义类,实现 Filter接口,并重写其所有方法 ,配置Filter拦截资源的路径:在类上定义 @WebFilter 注解。而注解的 value 属性值 /* 表示拦截所有的资源。在doFilter方法中输出一句话,并放行

    1. package com.chen.filter;
    2. import javax.servlet.*;
    3. import javax.servlet.annotation.WebFilter;
    4. import java.io.IOException;
    5. @WebFilter("/*")
    6. public class FilterDemo implements Filter {
    7. @Override
    8. public void init(FilterConfig filterConfig) throws ServletException {
    9. }
    10. @Override
    11. public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
    12. System.out.println("放行前逻辑被执行");
    13. //放行前一般对request进行处理
    14. filterChain.doFilter(servletRequest,servletResponse);//放行
    15. System.out.println("放行后逻辑被执行");
    16. //放行后对request进行处理
    17. }
    18. @Override
    19. public void destroy() {
    20. }
    21. }

    执行流程

     

    放行后访问对应资源,资源访问完成后,还会回到Filter中吗?

    从上图就可以看出肯定 会 回到Filter中

    如果回到Filter中,是重头执行还是执行放行后的逻辑呢?

    如果是重头执行的话,就意味着 放行前逻辑 会被执行两次,肯定不会这样设计了;所以访问完资源后,会回到 放行后逻 辑 ,执行该部分代码。

    过滤器拦截路径的配置

    Filter拦截路径配置 拦截路径表示 Filter 会对请求的哪些资源进行拦截,使用 @WebFilter 注解进行配置。如: @WebFilter("拦截路径") 拦截路径有如下四种配置方式:

    拦截具体的资源:/index.jsp:只有访问index.jsp时才会被拦截

    目录拦截:/user/*:访问/user下的所有资源,都会被拦截

    后缀名拦截:*.jsp:访问后缀名为jsp的资源,都会被拦截

    拦截所有:/*:访问所有资源,都会被拦截

    拦截路径的配置方式和 Servlet 的请求资源路径配置方式一样,但是表示的含义不 同。

    过滤器链

    过滤器链是指在一个Web应用,可以配置多个过滤器,这多个过滤器称为过滤器链。

     注解配置的filter,执行的顺序,是按类名的排序顺序。比如的过滤器类名为A,那一定会比类名为B的过滤器执行的要先

  • 相关阅读:
    hadoop之hdfs生产数据块损坏修复方法
    儿童学生护眼台灯哪个牌子好?双十二儿童护眼台灯精选
    OceanBase 4.0 三节点生产环境部署两三事
    210. 课程表 II
    ChatGLM2-6B 部署与微调
    【Pytorch】模型的可复现性
    测试需要写测试用例吗?
    Vue3 provide 和 inject 实现祖组件和后代组件通信
    【深入浅出Java并发编程指南】「实战篇」教你如何使用AbstractQueuedSynchronizer实现自己的同步器组件
    JNI理解学习
  • 原文地址:https://blog.csdn.net/m0_64365315/article/details/127769243