Filter也称之为过滤器,它是Servlet技术中比较激动人心的技术,WEB开发人员通过Filter技术,对web服务器管理的所有web资源:例如Jsp, Servlet, 静态图片文件或静态 html 文件等进行拦截,从而实现一些特殊的功能。例如实现URL级别的权限访问控制、过滤敏感词汇、压缩响应信息等一些高级功能。

二、Filter简介
Servlet API中提供了一个Filter接口,开发web应用时,如果编写的java类实现了这个接口,则把这个java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。
三、快速入门
1、新建一个类,实现Filter接口
2、实现doFilter()方法,打印一句话,来证明能够进行拦截
3、在web.xml中进行配置(参照Servlet配置)
4、访问一个页面,看看能不能拦截

package com.test.filter; import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
public class Demo1Filter implements Filter { private FilterConfig filterConfig; public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { System.out.println("Demo1过滤前"); System.out.println(filterConfig.getInitParameter("param1")); chain.doFilter(request, response);//放行。让其走到下个链或目标资源中 System.out.println("Demo1过滤后"); } public void init(FilterConfig filterConfig) throws ServletException { System.out.println("初始化了"); this.filterConfig = filterConfig; } public void destroy() { System.out.println("销毁了"); }
} 

2>在web.xml中进行配置

< filter> Demo1Filter com.itheima.filter.Demo1Filter param1 value在这里呢 < /filter>
< filter-mapping> Demo1Filter /* REQUEST  FORWARD ERROR INCLUDE
< /filter-mapping>   

四、Filter的应用场景
通过对filter过滤器的了解,可以得知在以下三种情况下可以做些处理:
1> 通过控制对chain.doFilter的方法的调用,来决定是否需要访问目标资源。
比如,可以在用户权限验证等等。判断用户是否有访问某些资源的权限,有权限放行,没权限不执行chain.doFilter方法。
2> 通过在调用chain.doFilter方法之前,做些处理来达到某些目的。
比如,解决中文乱码的问题等等。可以在doFilter方法前,执行设置请求编码与响应的编码。甚至可以对request接口进行封装装饰来处理get请求方式的中文乱码问题(重写相应的request.getParameter方法)。
3> 通过在调用chain.doFilter方法之后,做些处理来达到某些目的。
比如对整个web网站进行压缩。在调用chain.doFilter方法之前用类A对response对象进行封装装饰,重写getOutputStream和重写getWriter方法。在类A内部中,将输出内容缓存进ByteArrayOutputStream流中,然后在chain.doFilter方法执行后,获取类A中ByteArrayOutputStream流缓存数据,用GZIPOutputStream流进行压缩下。
五、Filter实现拦截的原理
Filter接口中有一个doFilter方法,当开发人员编写好Filter类实现doFilter方法,并配置对哪个web资源进行拦截后,WEB服务器每次在调用web资源的service方法之前(服务器内部对资源的访问机制决定的),都会先调用一下filter的doFilter方法。
六、Filter生命周期
和Servlet一样Filter的创建和销毁也是由WEB服务器负责。不过与Servlet区别的是,它是1>在应用启动的时候就进行装载Filter类(与Servlet的load-on-startup配置效果相同)。2>容器创建好Filter对象实例后,调用init()方法。接着被Web容器保存进应用级的集合容器中去了等待着,用户访问资源。3>当用户访问的资源正好被Filter的url-pattern拦截时,容器会取出Filter类调用doFilter方法,下次或多次访问被拦截的资源时,Web容器会直接取出指定Filter对象实例调用doFilter方法(Filter对象常驻留Web容器了)。4>当应用服务被停止或重新装载了,则会执行Filter的destroy方法,Filter对象销毁。
注意:init方法与destroy方法只会直接一次。
七、Filter部署应用注意事项
1> filter-mapping标签中servlet-name与url-pattern。
Filter不仅可以通过url-pattern来指定拦截哪些url匹配的资源。而且还可以通过servlet-name来指定拦截哪个指定的servlet(专门为某个servlet服务了,servlet-name对应Servlet的相关配置)。
2> filter-mapping标签中dispatcher。
指定过滤器所拦截的资源被 Servlet 容器调用的方式,可以是REQUEST,INCLUDE,FORWARD和ERROR之一,默认REQUEST。用户可以设置多个 子元素用来指定 Filter 对资源的多种调用方式进行拦截。
REQUEST:
当用户直接访问页面时,Web容器将会调用过滤器。如果目标资源是通过RequestDispatcher的include()或forward()方法访问或ERROR情况时,那么该过滤器就不会被调用。
INCLUDE:
如果目标资源是通过RequestDispatcher的include()方法访问时,那么该过滤器将被调用。除此之外,该过滤器不会被调用。
FORWARD:
如果目标资源是通过RequestDispatcher的forward()方法访问时,那么该过滤器将被调用,除此之外,该过滤器不会被调用。
ERROR:
如若在A. jsp 页面page指令中指定了error属性=examError.jsp,那么A.jsp中若出现了异常,会跳转到examError.jsp中处理。而在跳转到examError.jsp时,若过滤器配置了ERROR的dispather那么则会拦截,否则不会拦截。

javaweb项目Filter过滤器详解相关推荐

  1. JavaWeb中filter的详解及应用案例

    JavaWeb中filter的详解及应用案例 转载自:http://www.cnblogs.com/vanl/p/5742501.html 一:Filter介绍 Filter可认为是Servlet的一 ...

  2. vue filter 过滤器 详解

    Vue.js 允许你自定义过滤器filter,可被用于一些常见的文本格式化. (注意vue版本号不同 用法也稍有不同) 接下来咱们就记录一下最常用的filter过滤器用法.(该示例以多个过滤器为例,当 ...

  3. 【Servlet】Filter过滤器详解、使用示例

    Filter过滤器讲解 定义 过滤器处于浏览器与servlet之间,是一个实现了 javax.servlet.Filter 接口的 Java 类 客户端发送的请求.服务器发送的资源,需要通过过滤器,才 ...

  4. logstash filter 过滤器详解

    一.grok 正则捕获插件 grok是一个十分强大的logstash filter插件,他可以通过正则解析任意文本,将非结构化日志数据解析成结构化和方便查询的结构.是目前logstash 中解析非结构 ...

  5. HBase的布隆过滤器详解

    HBase的布隆过滤器详解 1.布隆过滤器的简单介绍 2.布隆过滤器的原理分析 2.1 哈希表存在的问题 2.2 布隆过滤器的原理 2.2.1 原理详解 2.2.2 布隆过滤器失误率的调节 2.2.3 ...

  6. android edittext 过滤英文名称,Android 限制edittext 整数和小数位数 过滤器(详解)

    写了一个过滤器,根据需要限制edittext输入的整数和小数位,如下代码: package allone.verbank.apad.client.component; import android.t ...

  7. Photoshop CS 中的“照片滤镜/Photo Filter”命令详解(转)

    Photoshop CS 中的"照片滤镜/Photo Filter"命令详解(转)[@more@] 这是一个跟摄影有关的重要图像调整命令. 有关这一命令的教程,现在网上没一个能说得 ...

  8. vuecli 编译后部署_基于vue-cli 打包时抽离项目相关配置文件详解

    前言:当使用vue-cli进行开发时时常需要动态配置一些设置,比如接口的请求地址(axios.defaults.baseURL),这些设置可能需要在项目编译后再进行设置的,所以在vue-cli里我们需 ...

  9. Git学习系列之Git基本操作提交项目(图文详解)

    前面博客 Git学习系列之Git基本操作克隆项目(图文详解) 然后可以 cd 切换到 LispGentleIntro 目录, 新增或者修改某些文件.这里只是模拟一下操作, 实际情况可能是 使用 Ecl ...

最新文章

  1. 对想进入Unity开发新人的一些建议
  2. Codeforces987F AND Graph
  3. Windows程序闪退Windows日志捕获Kernelbase模块错误
  4. 平板电脑有什么用_除了盖泡面,平板电脑没什么用了
  5. 力扣-1464. 数组中两元素的最大乘积
  6. 小白如何快速入门数学建模
  7. 计算机设备管理器驱动,驱动技巧:解决设备管理器中声卡驱动安装不正确的问题...
  8. 核心期刊与统计源期刊
  9. Python3,2行代码,多种方法,直接把网页内容转换成PDF文档和图片。
  10. gps 简介---之一
  11. ansible 变量
  12. java对接支付宝三方登录
  13. Matlab 两条曲线间填充颜色,改变透明度
  14. 关于阿里巴巴icon矢量图显示空白问题
  15. UbuntuX11VNC教程
  16. 一加7t人脸识别_一加7T深度测评:它体现了最佳的技术价值吗?
  17. 重定向与重定位的理解
  18. 微信V3APP支付2022,全网最新+踩坑(已实现)
  19. [原创]矩阵键盘原理分析手稿
  20. 你需要启用steam社区界面功能以进行购买_Steam游戏库界面大改!这也太帅了

热门文章

  1. 浅析过滤敏感词过滤算法(C++)
  2. 检查python是否安装成功的命令是_Python 中的pygame安装与配置教程详解
  3. 解决:mysql服务启动后自动停止
  4. 【智能工厂】30页精彩PPT:智慧工厂的基本结构和发展路径
  5. 零基础入门进阶python导学(初识python)-01
  6. JavaScript关于JSON字符串的相关操作
  7. 加快您的网站的最佳实践(Best Practices for Speeding Up Your Web Site)
  8. Mathematica 入门 - 1
  9. 第八章 SQL聚合函数 MAX
  10. linux小红帽自带游戏在哪里,安卓手机自带的隐藏游戏在哪 自带游戏位置介绍