filter是什么,如它的字面意思,就是拦截器。它可以在request到达相关资源之前,比如servlet之前先处理requeset,也可以拦截或处理从某个资源比如servlet发出的response。

接口Filter

Filter是个接口,javax.servlet  Interface Filter

里面就三个方法:

生命周期

init方法:

filter在servlet容器(也就是服务器)启动的时候就会初始化,filter的init方法只会在容器实例化一个filter的时候调用一次,只调用一次,这个方法用于初始化filter。

FilterConfig是servlet容器传进init方法中的。

doFilter方法:

当Servlet每次处理Filter相关资源时,都会调用该Filter实例是doFilter方法,这个方法的参数有ServletRequest、ServletResponse、FilterChain三个。

在Filter的实现中,doFilter一定要调用FilterChain的doFilter方法!

一个资源可以被多个Filter关联到,一般我们叫这是Filter链条,这时我们的FilterChain的doFilter会触发Filter链条中的下一个Filter。只有在Filter链条中的最后一个Filter调用FilterChain.doFilter()方法,才会触发处理资源的方法(servlet中的service什么的)。

注意,FilterChain中的doFilter是和Filter中的doFilter不一样的,前者只有两个参数,后者有三个参数。

如果在Filter的实现中,没有调用这个chain的doFilter方法,那么对该request的处理就会终止。

destroy方法:

这个方法在Servlet容器要销毁Filter时触发,一般在应用停止时进行调用。

这里讲一下关于Filter处理response和request:

request来时,会先走每个filter中chain.doFilter方法之前的方法。然后走到chain.doFilter的时候,就走chain中其他filter,一样这样走。

当所有的filter的chain.doFilter方法前的内容都调用完以后,才会调用servlet的service方法。
service方法调用结束后会返回上一次的chain.doFilter方法,并执行doFilter方法后面的代码。接着,返回上上一个chain.doFilter方法……
因此,我们的Filter都是在chain.doFilter方法调用之前来处理request请求,在chain.doFilter方法调用之后处理response响应。

(图片转自博客:https://www.cnblogs.com/wuchaodzxx/p/6063530.html)

Filter的执行顺序

只有在部署描述符中,也就是web.xml中才能自定义filter的触发顺序,在web.xml中,哪个filter放在前面,就哪个先触发。

如果是用注解来配置的filter,那么它的触发顺序是根据Filter的类型字符排序,比如如果两个Filtrer类,一个是Filter0,一个是Filter1,那么这个Filter0就先于Filter1进行拦截……

转载于:https://www.cnblogs.com/wangshen31/p/8809491.html

记录一下filter相关推荐

  1. 解决问题记录:filter发布到tomcat时报错

    java.lang.AbstractMethodError: com.filter.LoginFilter.init(Ljavax/servlet/FilterConfig:)V 报错截图如图所示: ...

  2. access 记录集 filter find属性_《另一个伊甸》超越时空的猫时之塔阵容推荐 时之塔BOSS属性怎么打_另一个伊甸...

    标签: buff 另一个伊甸时之塔BOSS属性打法攻略是游戏第十章时之塔关卡玩法,玩家们需要战胜BOSS通关获取奖励喔,那么另一个伊甸时之塔BOSS怎么打.另一个伊甸超越时空的猫时之塔boss阵容搭配 ...

  3. logback 的 filter

    前言 logback 1.2.3 概述 logback 的 filter 有: 级别过滤器 ch.qos.logback.classic.filter.LevelFilter. 阀值过滤器 ch.qo ...

  4. Servlet过滤器Filter和监听器

    一.Servlet过滤器的概念: *********************************************************************************** ...

  5. FFMPEG SDK 开发介绍 -- Filter 篇

    From:http://m.oschina.net/blog/89373 1.简介:      ffmpeg是一套可以用来记录.转换数字音频.视频,并能将其转化为流的开源计算机程序.  使用ffmpe ...

  6. java odata filter响应,使用 OData 终结点的 OData 系统查询选项

    使用 OData 终结点的 OData 系统查询选项 07/06/2017 本文内容 发布日期: 2016年11月 适用于: Dynamics CRM 2015 您可以使用系统查询选项细化查询结果. ...

  7. introduction of severlet Filter

    web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...

  8. 2021年大数据Flink(十二):流批一体API Transformation

    目录 Transformation 官网API列表 基本操作-略 map flatMap keyBy filter sum reduce 代码演示 合并-拆分 union和connect split. ...

  9. GoldenGate的Logdump工具使用简介

    Logdump工具是GoldenGate提供的一个用于查询.分析.过滤.查看和保存存储在trail文件或extract文件中的数据的工具. 1.启动Logdump工具 [oracle@rhel6 ~] ...

  10. Python_logging模块

    日志:方便用户了解系统.软件或应用的运行情况,及时发现问题并快速定位.解决问题. 一个日志信息对应的是一个事件的发生,而一个事件需要包括的几个内容: 事件发生时间 事件发生位置 事件发生严重程度(日志 ...

最新文章

  1. ansys如何删除线_ANSYS影响面计算与绘制方法介绍
  2. 西数更新PiDrive产品线:250/375GB硬盘、64GB闪存盘
  3. NSString 去掉前后空格或回车符
  4. 关闭或开启memory_target
  5. Spring-Mybatis MapperScannerConfigurer 取不到PropertyPlaceholderConfigurer里的值
  6. gc 吞吐量和停顿时间_GC对吞吐量和延迟的影响
  7. flash位图技术研究篇(8):扫描像素点
  8. HTML|CSS之布局相关总结
  9. SharePoint 2010中增强的错误跟踪机制
  10. 网络数据库的复制和同步(一)
  11. 计算机专业的学生买什么电脑,设计类学生买什么电脑
  12. 使用安卓手机控制树莓派
  13. Excel2016工作表解除密码保护
  14. 讲解ping中的TTL是什么意思
  15. win10系统下安装tensorflow总结
  16. 1001 害死人不偿命的(3n+1)猜想 (15分) PAT (Basic Level) Practice (中文)C语言版
  17. PyTorch运行加载数据后占有大量C盘空间如何释放
  18. 停车场编码C语言,停车场系统部分C语言代码
  19. Python分别用迭代/递归的方式实现阶乘
  20. 我的世界怎么看服务器信息,我的世界怎么查看服务器种子

热门文章

  1. IDEA中安装TeaVM插件
  2. 文字处理技术:布局的核心是行布局,难点是换行算法
  3. 全网首发:FreeSwitch服务器转发引起的硬解失败原因分析
  4. You specified a pre-MSA CPU in your CFLAGS
  5. 使用jpeglib直接把NV12转为jpeg文件的代码
  6. ajax异步加载页面元素,使用jQuery的AJAX封装函数load()异步加载多个页面的相同页头/页尾(注意:js无法操作动态生成的网页元素)...
  7. mongodb mysql配置_MongoDB数据库安装配置、基本操作实例详解
  8. dynamix判定_Dynamix
  9. 责任分配矩阵和raci的区别_数字音频处理器和调音台的区别是什么
  10. html输入表,HTML 表单输入