Filter:过滤器

1、概念:

  • web中的过滤器:当访问服务器的资源时,过滤器可以将请求拦截下来,完成一些特殊的功能
  • 作用:
    • 一般用于完成通过的操作。如:登录验证、同一编码处理、敏感字符过滤……

2、 快速入门:

​ 1、实现步骤:

​ 1、创建类实现Filter接口(注意是javax.servlet.Filter)

​ 2、重写方法

​ 3、配置拦截路径

​ 1、web.xml配置

<filter><filter-name>Demo01</filter-name> <!--取名--><filter-class>cn.yzx.Filter.FilterDemo01</filter-class> <!--具体路径-->
</filter>
<filter-mapping><filter-name>Demo01</filter-name> <!--配置的Filter的名称--><url-pattern>/*</url-pattern> <!--拦截路径,访问那些资源会被拦截-->
</filter-mapping>

​ 2、注解配置(@WebFilter(“资源路径”))

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import java.io.IOException;@WebFilter("/*") //配置方式一:注解配置
public class FilterDemo01 implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("监听器被访问了");filterChain.doFilter(servletRequest,servletResponse); //放行}@Overridepublic void destroy() {}
}

3、过滤器细节:

​ 1、过滤器执行流程

​ step1:首先执行doFilter方法之上的代码:一般用作于增强request对象请求体的消息

​ step2:之后执行页面

​ step3:最后从doFilter方法下一行开始执行代码:一般用作与增强response对象响应体的消息

​ 2、生命周期方法

​ **init:**在服务器启动时,创建Filter对象,调用init方法,只会执行一次,一般用于加载资源

​ **doFilter:**每一次请求被拦截时,都执行一次,会执行多次,用于书写拦截的逻辑条件代码

​ **destroy:**服务器关闭后,Filter对象被销毁,如果服务器是被正常关闭,会调用destroy方法,只会执行一次,一般用

于释放资源

​ 3、配置详解

​ 1、拦截路径的配置:

​ 1、具体资源拦截:/xxx.jsp:只有访问指定资源时,才会被过滤

​ 2、目录拦截:/xxx/*:访问指定目录下的资源时,会被过滤

​ 3、后缀名拦截:*.xxx:访问指定格式的资源时,会被过滤

​ 4、所有拦截:/*:访问所有资源都会被过滤

​ 2、拦截方式的配置:资源被访问的方式

​ 1、注解配置:

@WebFilter(dispatcherTypes = DispatcherType.FORWARD)

​ 设置dispatcherTypes属性

​ 1、REQUESR:默认值。拦截浏览器直接请求的资源

​ 2、FORWARD:拦截转发访问的资源

​ 3、INCLUDE:拦截包含访问的资源

​ 4、ERROR:拦截错误跳转的资源

​ 5、ASYNC:拦截异步访问资源

​ 2、web.xml配置

<filter-mapping><filter-name>Demo01</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher>
</filter-mapping>

​ 设置dispatcherTypes标签

​ 1、REQUESR:拦截浏览器直接请求的资源

​ 2、FORWARD:拦截转发访问的资源

​ 3、INCLUDE:拦截包含访问的资源

​ 4、ERROR:拦截错误跳转的资源

​ 5、ASYNC:拦截异步访问资源

​ 4、过滤器链(配置多个过滤器)

​ 1、执行顺序:可以配置多个过滤器,就像一条直线,请求时从上到下依次执行拦截一、拦截二、……、拦截n,响应时原路返回,依次执行拦截n、……、拦截二、拦截一,且不会从头到尾执行拦截类的代码,请求时访问到diFilter会中断,随后响应时会接着doFilter继续执行

​ 2、过滤器优先级问题:

​ 1、注解配置的过滤器:

​ 按照类名,逐个字母进行比较,更小的先执行,之后停止比较,例如:aFilter和bFilter会先执行aFilter,Filter01和Filter02会先执行Filter01,因为逐个比较最后1比2小

​ 2、web.xml配置的过滤器:

​ 按<filter-mapping>标签的定义顺序,从上到下顺序执行

Filter学习笔记相关推荐

  1. 好程序员web前端分享CSS Bug、CSS Hack和Filter学习笔记

    为什么80%的码农都做不了架构师?>>>    CSS Bug.CSS Hack和Filter学习笔记 1)CSS Bug:CSS样式在各浏览器中解析不一致的情况,或者说CSS样式在 ...

  2. Dr_can Kalman Filter学习笔记(三)

    Dr_can Kalman Filter学习笔记(三) 本文学习自Dr_can卡尔曼滤波关于Kalman Gain的推导 本文对卡尔曼增益进行一个详细的推导. 一.问题引入 在笔记二中我们得到了状态空 ...

  3. Kalman Filter 学习笔记

     Intro 最近在学习伟大的Kalman Filter,这篇笔记主要是对国外的两篇介绍Kalman Filter的博客的翻译和一些个人理解,博客链接:Kalman Filter For Dumm ...

  4. Quaternion kinematics for the error-state Kalman filter 学习笔记

    1.卡尔曼滤波器的核心是追踪状态变量的均值和方差在一个动力系统里如何变化,以及计算关于测量值的条件期望和条件方差.在 IMU 的姿态估计中,姿态的均值和方差随时间的变化是由陀螺仪的误差模型所决定的. ...

  5. Vue学习(watch、computed、生命周期、filter)- 学习笔记

    文章目录 Vue学习(watch.computed.生命周期)- 学习笔记 watch 监听 computed 计算属性 set---动态添加属性 delete---删除 生命周期 filter 过滤 ...

  6. python map zip_Python学习笔记(九) map、zip和filter函数

    这篇文章主要介绍 Python 中几个常用的内置函数,用好这几个函数可以让自己的代码更加 Pythonnic 哦 1.map map() 将函数 func 作用于序列 seq 的每一个元素,并返回处理 ...

  7. 【javaweb学习笔记】servlet-api,filter和Listener

    javaweb学习笔记 1. servlet-api 1.1 servlet初始化 1.2 ServletContext和context-param 2. 什么是业务层 3. IOC 3.1 耦合/依 ...

  8. Python学习笔记(十一)

    Python学习笔记(十一): 生成器,迭代器回顾 模块 作业-计算器 1. 生成器,迭代器回顾 1. 列表生成式:[x for x in range(10)] 2. 生成器 (generator o ...

  9. Dubbo -- 系统学习 笔记 -- 示例 -- 参数验证

    Dubbo -- 系统学习 笔记 -- 目录 示例 想完整的运行起来,请参见:快速启动,这里只列出各种场景的配置方式 参数验证 参数验证功能是基于JSR303实现的,用户只需标识JSR303标准的验证 ...

最新文章

  1. 生态统计学里的数据转化与标准化
  2. 阿里古谦:阿里互联网架构的6大最佳实践-博客-云栖社区-阿里云
  3. 【深度学习】深入浅出卷积神经网络及实现!
  4. 百度数据挖掘研发工程师实习笔试面试
  5. springboot工具类
  6. angularJs中的发送请求例子
  7. NumPy Beginner's Guide 2e 带注释源码 二、NumPy 基础入门
  8. netty大白话(四)
  9. 插入u盘被计算机限制怎么回事,电脑不读u盘怎么处理,显示本次操作由于计算机的限制而被取消 请您与系统管理员联系,怎门回事?...
  10. tensorflow 安装_tensorflow安装后Failed to get convolution algorithm问题
  11. 2022-07-17 mysql使用的flex/yacc语法练习
  12. 用计算机进行实时自动采集,动态数据采集
  13. win10系统怎么改奇摩输入法_windows10如何更改输入法
  14. node创建ETH地址及导出私钥
  15. linux pap认证,linux – pppd“同行拒绝认证”
  16. 千万别用MongoDB?
  17. 荣耀V20是起点,一波炫酷荣耀潮配又来啦!
  18. ERROR sqoop.Sqoop: Got exception running Sqoop: java.lang.NullPointerException 解决方案【SOLVED】
  19. html5 邮箱后缀自动填写,JS输入用户名自动显示邮箱后缀列表的方法
  20. ubuntu Qt 找不到 -lGL

热门文章

  1. 案例解析:pdf文件怎么转换成word
  2. Log4j输出CBE( common base event)格式
  3. 数据表系列(开个头,击穿电压走起)
  4. 嵌入式操作系统WinCE
  5. 暂时或者永久修改mac地址
  6. 高新技术企业科技人员比例要求及认定标准
  7. 面向对象与面向过程小结
  8. phpComposer Markdown版本
  9. Supermap聚合服务
  10. http常见的响应状态码