Java过滤器@WebFilter用法详解

 更新时间:2024年01月28日 11:06:23   作者:Mr_superman_liu  
@WebFilter用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器,这篇文章主要给大家介绍了关于Java过滤器@WebFilter用法的相关资料,需要的朋友可以参考下

简单介绍

@WebFilter注解是JavaEE中的一种注解,用于标识一个类为过滤器(Filter)。过滤器用于对请求进行过滤和处理,可以在请求到达目标资源之前或之后执行一些操作。

使用**@WebFilter**注解可以将一个类声明为过滤器,并指定过滤器的名称、URL模式、Servlet名称等。

优势

  • 简化配置:不再需要在web.xml文件中手动配置过滤器,而是通过注解直接配置在过滤器类上。
  • 可读性高:注解方式可以将过滤器的相关信息直接写在过滤器类上,使得代码更加简洁和可读。
  • 方便管理:通过注解方式,可以更方便地管理和组织过滤器,减少了配置文件的复杂性。

方法

@WebFilter注解提供了以下属性来配置过滤器:

  • filterName:指定过滤器的名称,可选属性。
  • urlPatterns:指定过滤器拦截的URL模式,可以是一个字符串数组,表示多个URL模式。
  • value:urlPatterns的别名属性,可以用来指定过滤器拦截的URL模式。
  • servletNames:指定过滤器拦截的Servlet名称,可以是一个字符串数组,表示多个Servlet名称。
  • dispatcherTypes:指定过滤器的调度类型,可以是DispatcherType枚举类型的数组,默认为REQUEST。
  • asyncSupported:指定过滤器是否支持异步请求,默认为false。
  • initParams:指定过滤器的初始化参数,以@WebInitParam注解的数组形式提供。

过滤器原理

当我们使用过滤器时,过滤器会对游览器的请求进行过滤,过滤器可以动态的分为3个部分,1.放行之前的代码,2.放行,3.放行后的代码,这3个部分分别会发挥不同作用

  • 第一部分代码会对游览器请求进行第一次过滤,然后继续执行
  • 第二部分代码就是将游览器请求放行,如果还有过滤器,那么就继续交给下一个过滤器
  • 第三部分代码就是对返回的Web资源再次进行过滤处理

创建过滤器

创建MyFilter,只需要实现Filter接口就行,并且加一个WebFIlter注解

代码演示

Filter的三个阶段就对应着Filter的3个方法,init方法会在Filter创建时调用,doFilter方法会在请求和拦截匹配时调用,destroy方法会在Filter销毁时调用。

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

@WebFilter(initParams = {@WebInitParam(name = "aaa", value = "sss")})
public class MyFilter implements Filter {

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("调用01过滤器");
        String aaa = filterConfig.getInitParameter("aaa");
        System.out.println(aaa);
    }


    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("对01 request 进行过滤");
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("对01 response 过滤");
    }

    @Override
    public void destroy() {
        System.out.println("01 调用了destroy方法");
    }
}

启动服务器控制台输出

进行拦截时控制台输出

关闭服务器控制台输出 **

到此,我们就成功验证了Filter的生命周期。 filterConfig.getInitParameter()是获取我们注解配置得参数值value。根据上面图解,大家可能会有个疑问为什么会有02**这个过滤器。那我们接下来就讲一下。

多个过滤器

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

@WebFilter("/*")
public class MyFilter2 implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        System.out.println("调用02过滤器");
    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        System.out.println("对02 request 进行过滤");
        filterChain.doFilter(servletRequest, servletResponse);
        System.out.println("对02 response 过滤");
    }

    @Override
    public void destroy() {
        System.out.println("02 调用了destroy方法");
    }
}

我们可以看见Filter01先进行过滤,然后交给Filter02,然后访问资源,然后Filter02对响应进行过滤,然后Filter01对响应进行过滤。

多个Filter的执行顺序

如果我们是使用@WebFilter进行配置的,那么执行顺序就是字符比较顺序来执行,例如有2个过滤器,一个是AFilter,一个是BFilter,那么AFilter就会先执行。

总结

到此这篇关于Java过滤器@WebFilter用法详解的文章就介绍到这了,更多相关Java过滤器@WebFilter内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java入门绊脚石之Override和Overload的区别详解

    Java入门绊脚石之Override和Overload的区别详解

    重写是子类对父类的允许访问的方法的实现过程进行重新编写, 返回值和形参都不能改变。即外壳不变,核心重写!重写的好处在于子类可以根据需要,定义特定于自己的行为。重载是在一个类里面,方法名字相同,而参数不同。返回类型可以相同也可以不同
    2021-10-10
  • java必学必会之GUI编程

    java必学必会之GUI编程

    这篇文章主要为大家详细介绍了java GUI编程,对于GUI编程小编也不是很了解,通过这篇文章和大家一起学习GUI编程,感兴趣的小伙伴们可以参考一下
    2015-12-12
  • Nacos配置文件使用经验及CAP原则详解

    Nacos配置文件使用经验及CAP原则详解

    这篇文章主要为大家介绍了Nacos配置文件使用经验及CAP规则详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2024-02-02
  • SpringBoot集成SpringMVC的方法示例

    SpringBoot集成SpringMVC的方法示例

    这篇文章主要介绍了SpringBoot集成SpringMVC的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-01-01
  • Mybatis-Plus处理Mysql Json类型字段的详细教程

    Mybatis-Plus处理Mysql Json类型字段的详细教程

    这篇文章主要给大家介绍了关于Mybatis-Plus处理Mysql Json类型字段的详细教程,Mybatis-Plus可以很方便地处理JSON字段,在实体类中可以使用@JSONField注解来标记JSON字段,同时在mapper.xml中使用json函数来操作JSON字段,需要的朋友可以参考下
    2024-01-01
  • SpringBoot图文并茂详解如何引入mybatis与连接Mysql数据库

    SpringBoot图文并茂详解如何引入mybatis与连接Mysql数据库

    这篇文章主要介绍了SpringBoot如何引入mybatis与连接Mysql数据库,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-07-07
  • 两种java文件上传实例讲解

    两种java文件上传实例讲解

    这篇文章主要为大家详细介绍了两种java文件上传实例,一种是附件上传,另一种是上传简历功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Scala小程序详解及实例代码

    Scala小程序详解及实例代码

    这篇文章主要介绍了Scala 第一个Scala小程序详解的相关资料,需要的朋友可以参考下
    2017-01-01
  • 带你用Java方法轻松实现树的同构

    带你用Java方法轻松实现树的同构

    给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树
    2021-06-06
  • 浅析Java 数据结构常用接口与类

    浅析Java 数据结构常用接口与类

    本篇文章主要介绍了Java中的数据结构,Java工具包提供了强大的数据结构。需要的朋友可以参考下
    2017-04-04

最新评论