Introducation of Servlet filter(servlet过滤器介绍 )
本文章向大家介绍Servlet Filter,主要包括 Servlet Filter使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
过滤器是一个可以转换请求或响应的标头和内容(或两者)的对象。过滤器与Web组件的不同之处在于过滤器通常不会自行创建响应。相反,过滤器提供可以“附加
”到任何类型的Web资源的功能。因此,过滤器不应该对作为过滤器的Web资源有任何依赖性; 这样,它可以由多种类型的Web资源组成。
过滤器可以执行的主要任务如下。
查询请求并采取相应措施。
阻止请求和响应对进一步传递。
修改请求标头和数据。您可以通过提供请求的自定义版本来完成此操作。
修改响应标头和数据。您可以通过提供自定义版本的响应来完成此操作。
与外部资源互动。
过滤器的应用包括身份验证,日志记录,图像转换,数据压缩,加密,标记化流,XML转换等。
您可以按特定顺序配置由一个零个,一个或多个过滤器链过滤的Web资源。在部署包含组件的Web应用程序时指定此链,并在Web容器加载组件时实例化该链。
编程过滤器
过滤API由定义Filter
,FilterChain
和 FilterConfig
在所述接口javax.servlet
包。您可以通过实现Filter
接口来定义过滤器。
使用@WebFilter
注释在Web应用程序中定义过滤器。此批注在类上指定,并包含有关正在声明的过滤器的元数据。带注释的过滤器必须至少指定一个URL模式。这是通过 在注释上使用urlPatterns
or 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
,您还必须实现init
和destroy
方法。init
当实例化过滤器时,容器调用该方法。如果您希望将初始化参数传递给过滤器,则可以从FilterConfig
传递给的对象中 检索它们init
。
编程自定义请求和响应
过滤器有许多方法可以修改请求或响应。例如,过滤器可以向请求添加属性,也可以在响应中插入数据。
修改响应的过滤器通常必须在响应返回到客户端之前捕获响应。为此,您将一个替代流传递给生成响应的servlet。备用流阻止servlet在完成时关闭原始响应流,并允许过滤器修改servlet的响应。
要将此替换流传递给servlet,过滤器会创建一个响应包装器,该响应包装器会覆盖getWriter
或getOutputStream
返回此预留流的方法。包装器被传递给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。
回想一下,过滤器链是传递给doFilter
过滤器方法的对象之一 。该链通过过滤器映射间接形成。链中的过滤器顺序与过滤器映射在Web应用程序部署描述符中的显示顺序相同。
当过滤器映射到servlet S1时,Web容器调用doFilter
F1 的 方法。doFilter
S1的过滤器链中的每个过滤器的方法由链中的前一过滤器通过该chain.doFilter
方法调用。因为S1的滤波器链包含滤波器F1和F3,所以F1的调用chain.doFilter
调用doFilter
滤波器F3 的方法。当F3的doFilter
方法完成时,控制返回F1的doFilter
方法。
Introducation of Servlet filter(servlet过滤器介绍 )的更多相关文章
- 【转载】Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门
Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...
- Servlet Filter(过滤器)、Filter是如何实现拦截的、Filter开发入门
Servlet Filter(过滤器).Filter是如何实现拦截的.Filter开发入门 Filter简介 Filter也称之为过滤器,它是Servlet技术中最激动人心的技术,WEB开发人员通过F ...
- Servlet Filter(过滤器)
Servlet Filter 又称 Servlet 过滤器,它是在 Servlet 2.3 规范中定义的,能够对 Servlet 容器传给 Web 资源的 request 对象和 response 对 ...
- Introduction of Servlet Filter(介绍javaweb组件之一过滤器filter)
javaweb的三大组件都需要交给web服务器运行,都需要在web.xml文件中配置. ①Servlet:javax.servlet.Servlet通过http协议接受客户端的请求,并作出响应的Jav ...
- java Servlet中的过滤器Filter
web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...
- Servlet中的过滤器Filter详解
加载执行顺序 context-param->listener->filter->servlet web.xml中元素执行的顺序listener->filter->stru ...
- Servlet中的过滤器Filter
链web.xml中元素执行的顺序listener->filter->struts拦截器->servlet. 1.过滤器的概念 Java中的Filter 并不是一个标准的Servlet ...
- Servlet过滤器介绍之原理分析
zhangjunhd 的BLOG 写留言去学院学习发消息 加友情链接进家园 加好友 博客统计信息 51CTO博客之星 用户名:zhangjunhd 文章数:110 评论数:858 访问量:19 ...
- 理解Servlet过滤器 (javax.servlet.Filter)
过滤器(Filter)的概念 过滤器位于客户端和web应用程序之间,用于检查和修改两者之间流过的请求和响应. 在请求到达Servlet/JSP之前,过滤器截获请求. 在响应送给客户端之前,过滤器截获响 ...
随机推荐
- App Store评论优化,让你的APP评论上涨
App Store评论优化怎么做 App Store评论优化,让你的APP评论上涨 关于「ASO评论优化」,主要分为三块.换评论,买评论,引导用户写评论. 可能有些刚接触ASO的朋友会问,为什么要给A ...
- redis加固
一.背景描述 1.漏洞描述 Redis 因配置不当存在未授权访问漏洞,可以被攻击者恶意利用. 在特定条件下,如果 Redis 以 root 身份运行,黑客可以给 root 账号写入 SSH 公钥文件, ...
- Linux-centos7下python3 环境设置
首先安装依赖包 yum -y groupinstall "Development tools" yum -y install zlib-devel bzip2-devel open ...
- tensorflow 基本内容
tensorflow的结构 1.使用图(graphs)来表示计算任务 2.在被称之为会话(Session)的上下文(context)中执行图 3.使用tensor表示数据 4.通过变量(Variabl ...
- 读高性能MySql笔记
1.1 MySQL逻辑架构 MySql服务器逻辑架构图 1.连接管理与安全性 每个客户端连接都会在服务器进程中拥有一个线程,这个连接的查询只会在这个单独的线程中执行,该线程只能轮流在某个CPU核心或者 ...
- netcore log4相关
配置: 1:NuGet程序包 - 搜索log4net - 安装 2:配置代码 Startup文件 #region log4 public static ILoggerRepository ...
- docker-compose介绍
docker-compose 常用命令 Commands: build Build or rebuild services bundle Generate a Docker bundle from t ...
- 【SpringBoot】springboot -- 2.0版本自定义ReidsCacheManager的改变
1. 问题发现 在1.0版本中,我们配置redis的cacheManager是这种方式: //缓存管理器 @Bean public CacheManager cacheManager(@Suppres ...
- CVU -fixup
cluvfy(Cluster Verify),简称CVU,是随Oracle集群管理软件一起发布的检查工具. 1.不带fixup grid@WWJD-DB1:/oracle/app/12.2.0/gri ...
- MongoDB系列----mongostat
mongostat是mongodb自带的监测工具,位于bin目录下.能用于实时监测mongodb的运行状态.在mongodb运行出现问题需要检测的时候应该优先考虑使用mongostat查看mongo运 ...