@WebFilter 用于将一个类声明为过滤器,该注解将会在部署时被容器处理,容器将根据具体的属性配置将相应的类部署为过滤器。该注解具有下表给出的一些常用属性 ( 以下所有属性均为可选属性,但是 value、urlPatterns、servletNames 三者必需至少包含一个,且 value 和 urlPatterns 不能共存,如果同时指定,通常忽略 value 的取值 ):

表 3. @WebFilter 的常用属性

属性名    类型    描述
filterName    String    指定过滤器的 name 属性,等价于 <filter-name>
value    String[]    该属性等价于 urlPatterns 属性。但是两者不应该同时使用。
urlPatterns    String[]    指定一组过滤器的 URL 匹配模式。等价于 <url-pattern> 标签。
servletNames    String[]    指定过滤器将应用于哪些 Servlet。取值是 @WebServlet 中的 name 属性的取值,或者是 web.xml 中 <servlet-name> 的取值。
dispatcherTypes    DispatcherType    指定过滤器的转发模式。具体取值包括:
ASYNC、ERROR、FORWARD、INCLUDE、REQUEST。
initParams    WebInitParam[]    指定一组过滤器初始化参数,等价于 <init-param> 标签。
asyncSupported    boolean    声明过滤器是否支持异步操作模式,等价于 <async-supported> 标签。
description    String    该过滤器的描述信息,等价于 <description> 标签。
displayName    String    该过滤器的显示名,通常配合工具使用,等价于 <display-name> 标签。
下面是一个简单的示例:

@WebFilter(servletNames = {"SimpleServlet"},filterName="SimpleFilter") 
public class LessThanSixFilter implements Filter{...}
如此配置之后,就可以不必在 web.xml 中配置相应的 <filter> 和 <filter-mapping> 元素了,容器会在部署时根据指定的属性将该类发布为过滤器。它等价的 web.xml 中的配置形式为:

<filter> 
    <filter-name>SimpleFilter</filter-name> 
    <filter-class>xxx</filter-class> 
</filter> 
<filter-mapping> 
    <filter-name>SimpleFilter</filter-name> 
    <servlet-name>SimpleServlet</servlet-name> 
</filter-mapping>
由上文可知,使用@WebFilter相当于配置了web.xml,现在用eclipse自动生成Filter时,默认是提供这个注解的,如下所示

package webcase;
 
import java.io.IOException;
 
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
 
/**
 * Servlet Filter implementation class CountFilter
 */
@WebFilter("/CountFilter")
public class CountFilter implements Filter {
    private int count;
    private String param;
    private FilterConfig fConfig;
    /**
     * Default constructor.
     */
    /*public CountFilter() {
        // TODO Auto-generated constructor stub
    }*/
 
    /**
     * @see Filter#destroy()
     */
我们知道,tomcat根据<filter-mapping>的顺序初始化Filter,由于上面的代码包含@WebFilter("/CountFilter"),相当于在web.xml中对同一个过滤器CountFilter设置了两次<filter>和<filter-mapping>,故这个过滤器会初始化两次,故当@WebFilter设置的过滤器被初始化时,String param=getInitParameter("count")得到的字符串为空,调用Integer.parseInt(param)时引发NumberFormatException异常。去掉@WebFilter("/CountFilter")后则一切正常。

@WebFilter注解拦截相关推荐

  1. (转)Servlet3.0下@WebFilter注解配置Filter

    Servlet3.0下@WebFilter注解配置Filter Filter(过滤器)主要对请求到达前进行处理,也可以在请求结束后进行处理,类似于链式.一个请求可以被多个过滤器拦截到,会依次进入各个F ...

  2. Spring Boot 技术知识点:如何详解@WebFilter注解

    功能说明 在servlet3.0以后,我们可以不用在web.xml文件内配置Filter,只需要加上@WebFilter注解就可以实现,以达到简化配置的目的.该注解用来声明servlet过滤器,将会在 ...

  3. Springboot + redis + 注解 + 拦截器来实现接口幂等性校验

    点击上方"方志朋",选择"设为星标" 回复"666"获取新整理的面试文章 作者:wangzaiplus www.jianshu.com/p/ ...

  4. springboot + redis + 注解 + 拦截器 实现接口幂等性校验

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 来源:https://www.jianshu.com/p/6189275403ed 一.概念 ...

  5. @slf4j注解_SpringBoot + Redis + 注解 + 拦截器 实现接口幂等性校验

    一.概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如: 订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 支付宝回调接口, 可能会多 ...

  6. springboot redis token_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验

    优质文章,及时送达 作者 | wangzaiplus 链接 | www.jianshu.com/p/6189275403ed 一.概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证 ...

  7. redis 判断存在性_springboot + redis + 注解 + 拦截器 实现接口幂等性校验

    提醒:后面有些图片模糊,请点击原文查看清晰图片 一.概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如: 订单接口, 不能多次创建订单 支付接口, 重复支付同 ...

  8. springboot幂等性_Spring Boot + Redis + 注解 + 拦截器来实现接口幂等性校验

    一.概念 幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次 比如:订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 支付宝回调接口, 可能会多次 ...

  9. javaWeb自己定义可排序过滤器注解,解决Servlet3.0下@WebFilter注解无法排序问题

    javaWeb自己定义可排序过滤器注解,解决Servlet3.0下@WebFilter注解无法排序问题 参考文章: (1)javaWeb自己定义可排序过滤器注解,解决Servlet3.0下@WebFi ...

最新文章

  1. PHPUnit实践三(构建模块化的测试单元)
  2. 刚体运动中变换矩阵的逆
  3. Word 2010 制作文档结构之章节自动编号
  4. 常用有话帧检测技术(VAD)
  5. 给谷歌浏览器安装vue调试工具:vue-devtools
  6. ubuntu20.04 cudnn7.5.6_每日一题|小学数学1——6年级天天练习
  7. Win7系统 待机后 不断网的 配置方法
  8. 2022云栖大会开幕 阿里张勇:以更先进技术承担更大责任
  9. 普渡大学工程学院计算机工程,普渡大学电气工程专业申请条件.pdf
  10. 港大HKU邮箱(connect.hku.hk)添加至iphone 自带邮箱方法
  11. 广义相对论基础【2】广义相对论中的张量+张量代数
  12. 【LeetCode刷题笔记-39 714.买卖股票的最佳时机(含手续费)】
  13. 免费的css模板下载
  14. SNTP获取时间源统一时间
  15. 接入Google fit指南
  16. 【干货收藏】统计分析/机器学习吐血整理最强指南
  17. NVIDIA在GDC展示最新DX10开发套件
  18. 计算机软件如何更新,计算机显卡驱动怎么更新
  19. Python实战总结——把坑踩遍,让别人无坑可踩(二)
  20. vue搭建项目、创建登录页面和后台交互之引入axios

热门文章

  1. PlayMaker入门介绍
  2. html里div水平居中,html+css div水平居中的几种方法
  3. 解决Paragon NTFS for Mac安装分卷失败的办法
  4. 2015年电视游戏大厅将逐一死掉?
  5. 多电脑共享键鼠——sharemouse 2021-08-21
  6. MapStruct分析
  7. 算法题涂小天与他的画
  8. mybatis-plus自定义sql报错 ew.customSqlSegment
  9. JavaScript字符串方法
  10. 实用网站软文美化编辑与网站图片链接限位代码