Introducation of Servlet filter(servlet过滤器介绍 )

本文章向大家介绍Servlet Filter,主要包括 Servlet Filter使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

过滤器是一个可以转换请求或响应的标头和内容(或两者)的对象。过滤器与Web组件的不同之处在于过滤器通常不会自行创建响应。相反,过滤器提供可以“附加

”到任何类型的Web资源的功能。因此,过滤器不应该对作为过滤器的Web资源有任何依赖性; 这样,它可以由多种类型的Web资源组成。

过滤器可以执行的主要任务如下。

  • 查询请求并采取相应措施。
  • 阻止请求和响应对进一步传递。
  • 修改请求标头和数据。您可以通过提供请求的自定义版本来完成此操作。
  • 修改响应标头和数据。您可以通过提供自定义版本的响应来完成此操作。
  • 与外部资源互动。

过滤器的应用包括身份验证,日志记录,图像转换,数据压缩,加密,标记化流,XML转换等。

您可以按特定顺序配置由一个零个,一个或多个过滤器链过滤的Web资源。在部署包含组件的Web应用程序时指定此链,并在Web容器加载组件时实例化该链。

编程过滤器

过滤API由定义FilterFilterChain和 FilterConfig在所述接口javax.servlet包。您可以通过实现Filter接口来定义过滤器。

使用@WebFilter注释在Web应用程序中定义过滤器。此批注在类上指定,并包含有关正在声明的过滤器的元数据。带注释的过滤器必须至少指定一个URL模式。这是通过 在注释上使用urlPatternsor value属性来完成的。所有其他属性都是可选的,具有默认设置。value当注释上的唯一属性是URL模式时,请使用该属性; 在使用urlPatterns其他属性时使用该属性。

使用@WebFilter注释注释的类必须实现该 javax.servlet.Filter接口。

要将配置数据添加到过滤器,请指定注释的initParams 属性@WebFilter。该initParams属性包含@WebInitParam注释。以下代码段定义了一个过滤器,指定了一个初始化参数:

import javax.servlet.Filter;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebInitParam;

@WebFilter(filterName = "TimeOfDayFilter",
urlPatterns = {"/*"},
initParams = {
    @WebInitParam(name = "mood", value = "awake")})
public class TimeOfDayFilter implements Filter {
    ...

Filter接口中最重要的方法doFilter是传递请求,响应和过滤器链对象。此方法可以执行以下操作。

  • 检查请求标头。
  • 如果过滤器希望修改请求标头或数据,请自定义请求对象。
  • 如果过滤器希望修改响应标头或数据,请自定义响应对象。
  • 调用过滤器链中的下一个实体。如果当前过滤器是链中以目标Web组件或静态资源结束的最后一个过滤器,则下一个实体是链末尾的资源; 否则,它是WAR中配置的下一个过滤器。过滤器通过调用doFilter链对象上的方法来调用下一个实体,传入它所调用的请求和响应,或者它可能创建的包装版本。或者,过滤器可以选择通过不调用调用下一个实体来阻止请求。在后一种情况下,过滤器负责填写响应。
  • 在调用链中的下一个过滤器后检查响应头。
  • 抛出异常以指示处理中的错误。

除此之外doFilter,您还必须实现initdestroy 方法。init当实例化过滤器时,容器调用该方法。如果您希望将初始化参数传递给过滤器,则可以从FilterConfig传递给的对象中 检索它们init

编程自定义请求和响应

过滤器有许多方法可以修改请求或响应。例如,过滤器可以向请求添加属性,也可以在响应中插入数据。

修改响应的过滤器通常必须在响应返回到客户端之前捕获响应。为此,您将一个替代流传递给生成响应的servlet。备用流阻止servlet在完成时关闭原始响应流,并允许过滤器修改servlet的响应。

要将此替换流传递给servlet,过滤器会创建一个响应包装器,该响应包装器会覆盖getWritergetOutputStream 返回此预留流的方法。包装器被传递给doFilter过滤器链的 方法。包装器方法默认调用包装的请求或响应对象。

要覆盖请求方法,请将请求包装在扩展名为ServletRequestWrapper或的对象中HttpServletRequestWrapper。要覆盖响应方法,请将响应包装在扩展ServletResponseWrapper或扩展的对象中HttpServletResponseWrapper

指定过滤器映射

Web容器使用筛选器映射来决定如何将筛选器应用于Web资源。筛选器映射按名称将筛选器与Web组件匹配,或按URL模式匹配Web资源。按照过滤器映射出现在WAR的过滤器映射列表中的顺序调用过滤器。您可以使用NetBeans IDE或使用XML手动编写列表来为其部署描述符中的WAR指定过滤器映射列表。

如果要将每个请求记录到Web应用程序,请将命中计数器筛选器映射到URL模式/*

您可以将过滤器映射到一个或多个Web资源,并且可以将多个过滤器映射到Web资源。这在示出 图18-1,其中,过滤器F1被映射到的servlets S1,S2,和S3; 过滤器F2映射到servlet S2; 并且过滤器F3映射到servlet S1和S2。

图18-1 Filter-to-Servlet映射

回想一下,过滤器链是传递给doFilter过滤器方法的对象之一 。该链通过过滤器映射间接形成。链中的过滤器顺序与过滤器映射在Web应用程序部署描述符中的显示顺序相同。

当过滤器映射到servlet S1时,Web容器调用doFilterF1 的 方法。doFilterS1的过滤器链中的每个过滤器的方法由链中的前一过滤器通过该chain.doFilter方法调用。因为S1的滤波器链包含滤波器F1和F3,所以F1的调用chain.doFilter调用doFilter滤波器F3 的方法。当F3的doFilter方法完成时,控制返回F1的doFilter方法。

原文地址:http://www.manongjc.com/article/79968.html

原文地址:https://www.cnblogs.com/kltutz/p/10721348.html

时间: 2024-08-29 17:03:59

Introducation of Servlet filter(servlet过滤器介绍 )的相关文章

【转载】Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门

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

Servlet过滤器介绍之原理分析

zhangjunhd 的BLOG   写留言去学院学习发消息 加友情链接进家园 加好友 博客统计信息 51CTO博客之星 用户名:zhangjunhd文章数:110 评论数:858访问量:1923464无忧币:6720博客积分:6145博客等级:8注册日期:2007-02-03 热门专题更多>> Linux系统基础之菜鸟进阶 阅读量:2359 ARM驱动之Linux驱动程序设计入门 阅读量:2252 HTML5入门教程 阅读量:1392 深入浅出学MySQL 阅读量:1558 热门文章 基于T

Servlet中的过滤器Filter详解

转自: http://blog.csdn.net/sd0902/article/details/8395641 web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ,它不能处理用户请求,也不能对客户端生成响应. 主要用于对HttpServletRequest 进行预处理,也可以对HttpServletResponse 进行后处理,是个典型的处理链. 优点:过滤

Servlet Filter过滤器

Servlet FilterJavaEE Servlet规范中描述到的三种技术,Servlet Filter ListenerServlet技术是生成动态web资源Filter技术对服务器web资源进行拦截(权限控制)Filter也称之为过滤器,它是Servlet技术中最实用的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能.例如实现URL级别的权限访问控制.过滤敏感

Servlet高级部分Filter(过滤器)

一:Filter称之为"过滤器",用在Servlet外,对request和response进行修改.它是AOP(面向切面编程思想的一种体现),Filter中有一个FilterChain的概念,称之为"过滤器链".一个FilterChain包含了多个Filter,一个请求到达Servlet或者一个响应到达客户端都要经过FilterChain串联起来的所有Filter.Filter的处理流程如下[Filter于Servlet的耦合性不高,可以随意装装载和卸载]: *:一

理解Servlet过滤器(javax.servlet.Filter)

佟强  2009年12月14日 过滤器(Filter)的概念 过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应.在请求到达Servlet/JSP之前,过滤器截获请求.在响应送给客户端之前,过滤器截获响应.多个过滤器形成一个过滤器链,过滤器链中不同过滤器的先后顺序由部署文件web.xml中过滤器映射<filter-mapping>的顺序决定.最先截获客户端请求的过滤器将最后截获Servlet/JSP的响应信息.过滤器的链式结构 可以为一个Web应用组件部署多个过滤器,

servlet/filter/listener/interceptor过滤器、监听器、拦截器区分

因为之前一直分不清过滤器和拦截器的区别,所以有了两者差不多的错觉,因此在这里总结下servlet/filter/listener/interceptor过滤器.监听器.拦截器. 在此之前先简单回顾下servlet: 概述:servlet是一种运行服务器端的java应用程序,它工作在客户端请求与服务器响应的中间层. 主要作用:在于交互式地浏览和修改数据,生成动态 Web 内容. 访问流程: 1,客户端发送请求至服务器端: 2,服务器将请求信息发送至 Servlet: 3,Servlet 生成响应内

web.xml之context-param,listener,filter,servlet加载顺序及其周边

先以加载spring为例子看看加载顺序的作用: Spring加载可以利用ServletContextListener 实现,也可以采用load-on-startup Servlet 实现,但比如filter 需要用到 bean ,但加载顺序是: 先加载filter 后加载spring,则filter中初始化操作中的bean为null:所以,如果过滤器中要使用到 bean,此时就可以根据加载顺序listener>filter>servlet,将spring 的加载 改成 Listener的方式.

web.xml 之contextParam,listener,filter,servlet的加载顺序

先以加载spring为例子看看加载顺序的作用: Spring加载可以利用ServletContextListener 实现,也可以采用load-on-startup Servlet 实现,但比如filter 需要用到 bean ,但加载顺序是: 先加载filter 后加载spring,则filter中初始化操作中的bean为null:所以,如果过滤器中要使用到 bean,此时就可以根据加载顺序listener>filter>servlet,将spring 的加载 改成 Listener的方式.