过滤器是Servlet的高级特性之一,也别把它想得那么高深,只不过是实现Filter接口的Java类罢了!

Java Web开发中的过滤器(filter)是从Servlet 2.3规范开始增加的功能,并在Servlet 2.4规范中得到增强。对Web应用来说,过滤器是一个驻留在服务器端的Web组件,它可以截取客户端和服务器之间的请求与响应信息,并对这些信息进行过 滤。当Web容器接受到一个对资源的请求时,它将判断是否有过滤器与这个资源相关联。如果有,那么容器将把请求交给过滤器进行处理。在过滤器中,你可以改 变请求的内容,或者重新设置请求的报头信息,然后再将请求发送给目标资源。当目标资源对请求作出响应时候,容器同样会将响应先转发给过滤器,再过滤器中, 你可以对响应的内容进行转换,然后再将响应发送到客户端。

常见的过滤器用途主要包括:对用户请求进行统一认证、对用户的访问请求进行记录和审核、对用户发送的数据进行过滤或替换、转换图象格式、对响应内容进行压缩以减少传输量、对请求或响应进行加解密处理、触发资源访问事件、对XML的输出应用XSLT等

和过滤器相关的接口主要有:Filter、FilterConfig、FilterChain。

为什么需要用到过滤器

也就是说:如果我每次接受客户端带过来的中文数据,在Serlvet中都要设定编码。这样代码的重复率太高了!!!!

有过滤器的情况就不一样了:只要我在过滤器中指定了编码,可以使全站的Web资源都是使用该编码,并且重用性是非常理想的!

过滤器 API

只要Java类实现了Filter接口就可以称为过滤器!Filter接口的方法也十分简单:

其中init()和destory()方法就不用多说了,他俩跟Servlet是一样的。只有在Web服务器加载和销毁的时候被执行,只会被执行一次!

值得注意的是doFilter()方法,它有三个参数(ServletRequest,ServletResponse,FilterChain),从前两个参数我们可以发现:过滤器可以完成任何协议的过滤操作

那FilterChain是什么东西呢?我们看看:

我们可以这样理解:过滤器不单单只有一个,那么我们怎么管理这些过滤器呢?在Java中就使用了链式结构把所有的过滤器都放在FilterChain里边,如果符合条件,就执行下一个过滤器(如果没有过滤器了,就执行目标资源)

注意,它的完整流程顺序是这样的:客户端发送http请求到Web服务器上,Web服务器执行过滤器,执行到”准备放行“时,就把字符串输出到控制台上,接着执行doFilter()方法,Web服务器发现没有过滤器了,就执行目标资源(也就是test.jsp)。目标资源执行完后,回到过滤器上,继续执行代码,然后输出”放行完成“

注意:过滤器之间的执行顺序看在web.xml文件中mapping的先后顺序的,如果放在前面就先执行,放在后面就后执行!如果是通过注解的方式配置,就比较urlPatterns的字符串优先级。

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. Spring-Boot注入自定义properties文件配置
  2. python sqlite和mysql_python怎么与mysql、sqlite数据库通信——适配器:DB-API
  3. [YTU]_2532(投简历)
  4. 【Android Studio安装部署系列】十三、Android studio添加和删除Module 2
  5. 如何在Outlook 2013中管理附件
  6. 远程办公招聘_招聘远程人才时要寻找的5种技能
  7. pycharm创建python虚拟环境好处_PyCharm虚拟环境创建Django2项目一些问题的解决方案...
  8. linux主题管理器,XFCE 主题管理器:一款单一的GUI主题管理器,更改任何XFCE主题(带预览)...
  9. JS获取地址栏参数的方法
  10. 剑指offer——面试题20:顺时针打印矩阵
  11. go 类型断言_深入理解Go的interface内部执行原理
  12. python之collections模块Counter类使用学习
  13. VMware ESXi 6.7注入第三方RAID驱动
  14. 6.Linux中的进程管理
  15. 国家缩写大全 mysql_各个国家的名称缩写和时区列表
  16. c语言大一期中考试知识点,大一期末考试复习计划
  17. WPF 逻辑树和可视化树
  18. 代码审计--12--源代码审计思路(上)
  19. 云漫圈 | 什么是DNS?什么是DNS污染?什么又是DNS劫持?
  20. 暨南大学计算机科学研究生,计算机科学系硕士研究生在IEEE Virtual Reality (VR) 2020上发表两篇论文...

热门文章

  1. ps添加图层蒙版的两种方法
  2. STM32触摸屏校准数据的存取
  3. tensorflow目标检测API实现血细胞图像识别和计数
  4. [高通MSM8953_64][Android10]新增并挂载custom分区
  5. 庸人自谈爬虫二三事——兴之所至,心之所安,尽其在我
  6. 10X Genomics单细胞转录组测序
  7. 一招解决网页文字无法复制
  8. C# IE环境 - 重置IE( 注册表)
  9. 晒晒自己写的C++小程序(初学,书上的题目)
  10. python中如何使用seek来移动文件指针位置