概念:

过滤器(Filter)是处于客户端与服务器目标资源之间的一道过滤技术。

过滤器作用:

  • 执行地位在Servlet之前,客户端发送请求时,会先经过Filter,再到达目标Servlet中;响应时,会根据执行流程再次反向执行Filter。
  • 可以解决多个Servlet共性代码的冗余问题。

编写过滤器:

Servlet API中提供了一个Filter接口,开发人员编写一个Java类实现这个接口即可,这个Java类称之为过滤器(Filter)。

实现过程:

  • 编写Java类实现Filter接口,重写三个方法init()、doFilter()、destroy()。
  • 在doFilter方法中编写拦截逻辑。
  • 设置拦截路径。

代码:

@WebFilter(value="/*")
public class Demo1Filter implements Filter {@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// 初始化...System.out.println("filter init ...");}@Overridepublic void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {System.out.println("filter execute ...");// 继续执行其他的组件(过滤器/Servlet)filterChain.doFilter(servletRequest, servletResponse);}@Overridepublic void destroy() {// 销毁...System.out.println("filter destroy ...");}}

两种过滤器配置方式:

  • 注解配置

在自定义的Filter类上使用注解@WebFilter(value="/过滤目标资源")

  • xml配置
<!--过滤器的xml配置>
<filter><!--名称--><filter-name>my</filter-name><!--过滤器类全称--><filter-class>com.it.SecondFilter</filter-class>
</filter><!--映射路径-->
<filter-mapping><!--名称--><filter-name>my</filter-name><!--过滤的url匹配规则和Servlet类似,配置要拦截的路径,不是访问路径--><url-pattern>/*</url-pattern>
</filter-mapping>

关于拦截路径:

        过滤器的拦截路径通常有三种形式:

  • 精确拦截匹配,如:/index.jsp      /myservlet
  • 后缀拦截匹配,如:*.jsp          *.html       *.jpg
  • 通配符拦截匹配,/* 表示拦截所有。(过滤器不能使用 "/" 匹配;/aa/bb/* :允许)

过滤器链:

客户端对服务器请求之后,服务器调用Servlet之前会执行一组过滤器(多个过滤器),那么这组过滤器就称为一条过滤器链。

每个过滤器实现某个特定的功能,当第一个Filter的doFilter()方法被调用时,Web服务器会创建一个代表Filter链的FilterChain对象传递给该方法。在doFilter()方法中,开发人员如果调用了FilterChain对象的doFilter方法,则Web服务器会检查FilterChain对象中是否还有filter,如果有,则调用第二个filter,如果没有,则调用目标资源。

过滤器链的优先级:

  • 如果都是注解的话,是按照类全名称的字符串顺序决定作用顺序(字母排序:AFilter.java 高于BFilter.java)。
  • 如果是web.xml,按照filter-mapping注册顺序,从上到下。
  • web.xml配置高于注解。
  • 如果注解和web.xml同时配置,会创建多个过滤器对象,造成过滤多次。

【Servlet-过滤器】相关推荐

  1. (七)Servlet过滤器

    2019独角兽企业重金招聘Python工程师标准>>> Servlet过滤器简介 过滤器通过Web部署描述符(web.xml)中XML标签来声明,这样就可以允许添加和删除过滤器而无需 ...

  2. javaweb:servlet过滤器

    servlet过滤器能够对Servlet容器的请求和响应对象进行检查和修改. Servlet过滤器本身并不生成请求和响应对象,它只提供过滤作用. Servlet过滤器能够在Servlet被调用之前检查 ...

  3. Servlet过滤器介绍之原理分析(转)

    http://zhangjunhd.blog.51cto.com/113473/20629 本文主要介绍Servlet过滤器的基本原理 author: ZJ 2007-2-21 Blog: [url] ...

  4. Java web—Servlet过滤器(Filter)

    前言:         过滤器是Servlet中一个非常重要的组成部分,进行WEB开发时无不用到过滤器:因此这篇blog来单独总结下关于过滤器的知识点. 一.首先来了解一下什么是过滤器: 下面这句话引 ...

  5. Java Servlet 过滤器与 springmvc 拦截器的区别?

    前言:在工作中,遇到需要记录日志的情况,不知道该选择过滤器还是拦截器,故总结了一下. servlet 过滤器 定义 java过滤器能够对目标资源的请求和响应进行截取.过滤器的工作方式分为四种 应用场景 ...

  6. java 该改变request url_如何在Java中使用servlet过滤器来更改传入的servlet请求URL?...

    如何使用servlet过滤器来更改传入的servlet请求URL web.xml 至 web.xml ? 更新:根据BalusC的以下步骤,我想出了以下代码: public class UrlRewr ...

  7. servlet过滤器 实例_Java Servlet过滤器示例教程

    servlet过滤器 实例 Java Servlet Filter is used to intercept the client request and do some pre-processing ...

  8. Servlet过滤器Filter和监听器

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

  9. java servlet过滤器简解及实例

    在整个概念中,个人觉得有一篇文章写得不错,通俗易懂,这里就直接套用以上原博文, 一.概念: Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术, ...

  10. jsp/servlet过滤器和struts2拦截器的有什么区别

    jsp/servlet过滤器和struts2拦截器的有什么区别 542430725 | 浏览 3715 次  问题未开放回答  推荐于2016-11-14 01:43:29 最佳答案 过滤器,是在ja ...

最新文章

  1. 【 C 】const 学习笔记
  2. [Flash开发笔记] 关于Flash中的ASO文件
  3. 嵌入式网络那些事LwIP协议深度剖析与实战演练pdf
  4. C语言给定数字n阶乘的末尾计算零个数(附完整源码)
  5. [导入]ASP.NET 配置节架构
  6. c语言递归建链表,递归创建二叉树c语言实现+详细解释
  7. 个性化联邦学习PFedMe详细解读(NeurIPS 2020)
  8. php未定义常量破解,PHP未定义的常量错误没有意义
  9. 软件开发demo是什么意思_地府后台管理系统demo出来了!附地址
  10. Windows 重装系统后 开发环境配置 软件安装列表
  11. 汽车故障诊断技术【11】
  12. 联想y430完全拆机图解_y430p拆机详细步骤及如何安装mSATA接口的固态硬盘?
  13. 如何设置局域网内的固定IP地址?
  14. GEE:LandTrendr时间序列曲线拟合
  15. 关于 安装完MathType 后 Microsoft Word出现 53号错误 的解决方法
  16. FDTD_谐振腔的Q值计算(2D/3D)
  17. 控制input标签只能输入数字
  18. 任务01-信息编码:纯⽩⾊的bmp图⽚ 用Hex Editor Neo画一个“C
  19. 【微信早安定时推送3.0最牛版】微信消息推送后 可提醒可顶置,聊天框名称,头像都可修改~
  20. java中的 输入 方法

热门文章

  1. Google让我们变蠢?
  2. 树莓派ARM汇编语言编程十讲(第1讲)
  3. pytorch中的torch.squeeze()函数
  4. 从 no-code 到 low-code:企业级 hpaPaaS 的未来
  5. 去除PDF的水印和广告的方法
  6. 基于Python的FTP客户端服务端设计
  7. 海思Hi3536开发——处理器整体架构了解
  8. 图片与十六进制之间的相互转换
  9. CityEngine 导入规则后贴图不显示
  10. [Network] 计算机网络基础知识总结