过滤器(Filter)

本文摘自servlet3.1规范

过滤器(Filter)是 Java 组件,允许运行过程中改变进入资源的请求和资源返回的响应中的有效负载和 header
信息。
本章描述了 Java Servlet v3.0 API 类和方法,它们提供了一种轻量级的框架用于过滤动态和静态内容。还描
述了如何在 Web 应用配置 Filter,它们实现的约定和语义。
网上提供了 Servlet 过滤器的 API 文档。过滤器的配置语法在第 14 章的“部署描述符”中的部署描述符模
式部分给出。当阅读本章时,读者应该是一这些资源作为参考。

什么是过滤器?

过滤器是一种代码重用的技术,它可以改变 HTTP 请求的内容,响应,及 header 信息。过滤器通常不产生
响应或像 servlet 那样对请求作出响应,而是修改或调整到资源的请求,修改或调整来自资源的响应。
过滤器可以作用于动态或静态内容。这章说的动态和静态内容指的是 Web 资源。
供开发人员使用的过滤器功能有如下几种类型:
■ 在执行请求之前访问资源。
■ 在执行请求之前处理资源的请求。
■ 用请求对象的自定义版本包装请求对请求的 header 和数据进行修改。
■ 用响应对象的自定义版本包装响应对响应的 header 和数据进行修改。
■ 拦截资源调用之后的调用。
■ 作用在 Servlet,一组 Servlet,或静态内容上的零个,一个或多个拦截器按指定的顺序执行。

过滤器组件示例:

■ 验证过滤器
■ 日志记录和审计过滤器
■ 图像转换过滤器
■ 数据压缩过滤器
■ 加密过滤器
■ 词法(Tokenizing)过滤器
■ 触发资源访问事件过滤器
■ 转换 XML 内容的 XSL/T 过滤器
■ MIME-类型链过滤器
■ 缓存过滤器

应用开发人员通过实现 javax.servlet.Filter 接口并提供一个公共的空参构造器来创建过滤器。该类及构建
Web 应用的静态资源和 Servlet 打包在 Web 应用归档文件中。Filter 在部署描述符中通过<filter>元素声明。
一个过滤器或一组过滤器可以通过在部署描述符中定义<filter-mapping>来为调用配置。可以使用 servlet 的
逻辑视图名把过滤器映射到一个特定的 servlet,或者使用 URL 模式把一组 Servlet 和静态内容资源映射到
过滤器。

过滤器的生命周期?

在 Web 应用部署之后,在请求导致容器访问 Web 资源之前,容器必须找到过滤器列表并按照如上所述的应
用到 Web 资源。容器必须确保它为过滤器列表中的每一个都实例化了一个适当类的过滤器,并调用其
init(FilterConfig config)方法。过滤器可能会抛出一个异常,以表明它不能正常运转。如果异常的类型是
UnavailableException,容器可以检查异常的 isPermanent 属性并可以选择稍候重试过滤器。
在部署描述符中声明的每个<filter>在每个 JVM 的容器中仅实例化一个实例。容器提供了声明在过滤器的部
署描述符的过滤器 config(译者注:FilterConfig),对 Web 应用的 ServletContext 的引用,和一组初始化参
数。
当容器接收到传入的请求时,它将获取列表中的第一个过滤器并调用 doFilter 方法,传入 ServletRequest 和
ServletResponse,和一个它将使用的 FilterChain 对象的引用。
过滤器的 doFilter 方法通常会被实现为如下或如下形式的子集:
1. 该方法检查请求的头。
2. 该方法可以用自定义的ServletRequest或HttpServletRequest实现包装请求对象为了修改请求的头或数据。
3. 该方法可以用自定义的ServletResponse 或 HttpServletResponse实现包装传入doFilter方法的响应对象用
于修改响应的头或数据。
4. 该过滤器可以调用过滤器链中的下一个实体。下一个实体可能是另一个过滤器,或者如果当前调用的过
滤器是该过滤器链配置在部署描述符中的最后一个过滤器,下一个实体是目标 Web 资源。调用 FilterChain
对象的 doFilter 方法将影响下一个实体的调用,且传入的它被调用时请求和响应,或传入它可能已经创建
的包装版本。
由容器提供的过滤器链的 doFilter 方法的实现,必须找出过滤器链中的下一个实体并调用它的 doFilter 方法,
传入适当的请求和响应对象。另外,过滤器链可以通过不调用下一个实体来阻止请求,离开过滤器负责填
充响应对象。
service 方法必须和应用到 servlet 的所有过滤器运行在同一个线程中。
5. 过滤器链中的下一个过滤器调用之后,过滤器可能检查响应的头。
6. 另外,过滤器可能抛出一个异常以表示处理过程中出错了。如果过滤器在 doFilter 处理过程中抛出
UnavailableException,容器必须停止处理剩下的过滤器链。 如果异常没有标识为永久的,它或许选择稍候
重试整个链。
7. 当链中的最后的过滤器被调用,下一个实体访问的是链最后的目标 servlet 或资源。
8. 在容器能把服务中的过滤器实例移除之前,容器必须先调用过滤器的 destroy 方法以便过滤器释放资源
并执行其他的清理工作。

时间: 2024-10-10 01:57:53

过滤器(Filter)的相关文章

【JavaWeb学习】过滤器Filter

一.简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感词汇.压缩响应信息等一些高级功能. Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter.通过Filter技

过滤器Filter

什么是过滤器 过滤器Filter其实就是Servlet,只不过它的职责是在过滤信息,在请求进入核心servlet时候的过滤,在响应发送给客户端时候的过滤. 使用过滤器 要想创建自己的Filter,只需要实现Filter接口,重写里面的init方法.doFilter方法.destroy方法.init方法在你进行过滤的时候的初始化方法,doFilter方法就是你的核心过滤方法,里面有两个参数,一个是ServletRequest,另外一个是ServletResponse,前面一个代表的是请求,后面一个

JSP内置对象的作用域,及过滤器filter

pageContext:只要跳转页面,就不存在. request, 只要在当前页面就存在 session, 只有浏览器关闭,才不存在. application,只有服务器关闭后,才不存在. 如果把变量放到pageContext里,就说明它的作用域是page,它的有效范围只在当前jsp页面里. 从把变量放到pageContext开始,到jsp页面结束,你都可以使用这个变量. 如果把变量放到request里,就说明它的作用域是request,它的有效范围是当前请求周期. 所谓请求周期,就是指从htt

javaweb-Servlet过滤器Filter

一.在javaweb学习中javaweb过滤器是一个非常重要的学习内容在web开发阶段的中Javaweb过滤器可以很好的优化代码,同时减少许多不必要的代码,将代码很好的集合在一起,这样的操作可以减少许多不必要的代码,同时大大的减少程序的运行. 二.正对于javaweb的过滤器Filter可以从以下几个方面进行讲解 1.Javaweb的概念 javaweb是一个服务器组键,他可以截取用户端的请求以及响应的信息,并且对信息进行过滤. 2.过滤器的api  Servlet过滤器API包含了3个接口,它

AngularJS 过滤器(filter)

过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果.主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等.ng内置了一些过滤器,它们是:currency(货币).date(日期).filter(子串匹配).json(格式化json对象).limitTo(限制个数).lowercase(小写).uppercase(大写).number(数字).orderBy(排序).总共九种.除此之外还可以自定义过滤器,这个就强大了,可以满足任何

jQuery -&gt; 获取元素的各种过滤器(filter)

通过顺序来选择 顺序选择的过滤器(filter)有 :first 第一个元素 :last 最后一个元素 :even 序号为偶数的元素 :odd 序号为奇数的元素 :eq(n) 序号等于n的元素 :lt(n) 序号小于n的元素 :gt(n) 序号大于n的元素 如果有如下的表格 0 even 1 odd 2 even 3 odd 4 even html代码如下 <table> <tr><td>0</td><td>even</td><

深入分析JavaWeb Item36 -- 过滤器Filter高级应用

在filter中可以得到代表用户请求和响应的request.response对象,因此在编程中可以使用Decorator(装饰器)模式对request.response对象进行包装,再把包装对象传给目标资源,从而实现一些特殊需求. 一.Decorator设计模式 1.1.Decorator设计模式介绍 当某个对象的方法不适应业务需求时,通常有2种方式可以对方法进行增强: 编写子类,覆盖需增强的方法. 使用Decorator设计模式对方法进行增强. 使用代理 在阎宏博士的<JAVA与模式>一书中

JavaWeb过滤器Filter

Filter也称为过滤器,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp,Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制,页面的同一编码,过滤敏感词汇.压缩响应信息等一些高级功能! Servlet API中提供了一个Filter接口,开发web应用时,如果编写的Java类实现了这个接口,则把这个java类称之为过滤器Filter.通过Filter技术,开发人员可以实现用户在访问某个目标资

【转】Asp.Net MVC3 简单入门详解过滤器Filter

原文地址:http://www.cnblogs.com/boruipower/archive/2012/11/18/2775924.html 前言 在开发大项目的时候总会有相关的AOP面向切面编程的组件,而MVC(特指:Asp.Net MVC,以下皆同)项目中不想让MVC开发人员去关心和写类似身份验证,日志,异常,行为截取等这部分重复的代码,那我们可以通过AOP截取实现,而在MVC项目中我们就可以直接使用它提供的Filter的特性帮我们解决,不用自己实现复杂的AOP了. 在Asp.net Mvc

JavaWeb--Servlet过滤器Filter和SpringMVC的HandlerInterceptor(Session和Cookie登录认证)

拦截一些请求进行处理,比如通过它来进行权限验证,或者是来判断用户是否登陆,日志记录,编码,或者限制时间点访问等等,是非常有必要的.所以就有了此篇文章啦. 文章结构:(1)Servlet过滤器Filter:(2)SpringMVC的HandlerInterceptor:(3)对比认知. 一.Servlet过滤器Filter: 此部分是从赵四大佬那里学来的,并补充自己的认知 (1)概念: 能够对Servlet容器的请求和响应对象进行检查和修改. Servlet过滤器本身并不产生请求和响应对象,它只能