过滤器可以对资源的请求和相应提供过滤功能,配置在web.xml文件中。
过滤器可用来实现以下功能
1. 权限过滤
2. 登陆和检查验证
3. 图像转换
4. 数据压缩
5. 加密
6. 令牌验证
7. 触发访问资源的事件
8. XSL/T过滤
9. Mime-type chain过滤

在filter服务被加载到web容器中时首先调用init函数,且仅调用一次,如果init函数调用失败,filter将不能工作。参数FilterConfig对象包含过滤器在web.xml中的配置参数。

过滤功能在doFilter函数中实现,包含ServletContext参数。doFilter函数在每次请求或响应经过过滤器链的时候被调用,FilterChain.doFilter用于调用下一个过滤器的doFilter方法。

该函数可实现:
1. 检查request
2. 替换请求内容或请求头信息
3. 替换响应内容或响应头信息

destroy方法由web容器调用,指示它正在退出服务的过滤器。此方法仅调用一次,即当过滤器的doFilter方法​​中的所有线程都退出后或超时时间已过。
Web容器调用此方法后,这个过滤器的doFilter方法将不会再被调用​​。
该方法让过滤器可以清理其占有的资源,如内存,文件和线程,并确保任何持久性状态与内存中的过滤器的当前状态同步。

Example:

web.xml

  <filter>
<filter-name>filter1</filter-name>
<filter-class>com.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter1</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping> <filter>
<filter-name>filter2</filter-name>
<filter-class>com.filter.MyFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>filter2</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

在web.xml文件中配置两个过滤器filter1和filter2,拦截所有请求

MyFilter.java

 public class FilterOne implements Filter {

     //Filter 链的执行
public void doFilter(ServletRequest arg0, ServletResponse arg1, FilterChain arg2)
throws IOException, ServletException {
// 对请求进行过滤
System.out.println("filter one before"); // 下一个过滤器或
arg2.doFilter(arg0, arg1); // 对响应的过滤
System.out.println("filter one after");
} // 初始化过滤器
public void init(FilterConfig arg0) throws ServletException {
System.out.println("filter one init");
} // 释放过滤器使用的资源
public void destroy() {
System.out.println("filter one destroy");
} }

输出:

filter one before

filter two before

filter two after

filter one after

Java过滤器原理方法的更多相关文章

  1. java绘图原理------在窗口界面(或面板上)画出一张或多张图片问题解决方法

    /** *@author blovedr * 功能: java绘图原理------在窗口界面(或面板上)画出一张或多张图片问题解决方法 * 日期: 2018年4月28日     16:20 * 注释: ...

  2. 《Java虚拟机原理图解》1.5、 class文件中的方法表集合--method方法在class文件中是怎样组织的

    0. 前言 了解JVM虚拟机原理是每一个Java程序员修炼的必经之路.但是由于JVM虚拟机中有很多的东西讲述的比较宽泛,在当前接触到的关于JVM虚拟机原理的教程或者博客中,绝大部分都是充斥的文字性的描 ...

  3. [JavaEE]Java NIO原理图文分析及代码实现

    转http://weixiaolu.iteye.com/blog/1479656 目录: 一.java NIO 和阻塞I/O的区别      1. 阻塞I/O通信模型      2. java NIO ...

  4. JAVA监听器原理

    http://blog.csdn.net/longyulu/article/details/25054697 JAVA监听器原理 标签: 监听器 2014-05-05 15:40 9070人阅读 评论 ...

  5. Java NIO原理分析

    Java IO 在Client/Server模型中,Server往往需要同时处理大量来自Client的访问请求,因此Server端需采用支持高并发访问的架构.一种简单而又直接的解决方案是“one-th ...

  6. Java基础——clone()方法浅析

    一.clone的概念 clone顾名思义就是复制, 在Java语言中, clone方法被对象调用,所以会复制对象.所谓的复制对象,首先要分配一个和源对象同样大小的空间,在这个空间中创建一个新的对象.那 ...

  7. 《Java虚拟机原理图解》 1.2、class文件里的常量池

    [最新更新:2014/11/11]  了解JVM虚拟机原理 是每个Java程序猿修炼的必经之路. 可是因为JVM虚拟机中有非常多的东西讲述的比較宽泛.在当前接触到的关于JVM虚拟机原理的教程或者博客中 ...

  8. Java NIO原理图文分析及代码实现

    原文: http://weixiaolu.iteye.com/blog/1479656 目录: 一.java NIO 和阻塞I/O的区别      1. 阻塞I/O通信模型      2. java ...

  9. Java编译原理

    http://wenku.baidu.com/view/f9b1734b87c24028915fc3a3.html Java编译原理 1. 关于动态加载机制 学习Java比C++更容易理解OOP的思想 ...

随机推荐

  1. paper 3:matlab中save,load使用方法小结

    功能描述]存储文件[软件界面]MATLAB->File->Save Workspace As将变量存入硬盘中指定路径.[函数用法] save:该函数将所有workspace中变量用二进制格 ...

  2. drds 分库表的创建速记

    关键词 :dbpartition by hash(`INVESTOR_APPLY_ID`) 格式 :dbpartition by hash(分库字段) 创建例子: CREATE TABLE `BB_J ...

  3. xla_events

    LOOKUP_TYPE LANGUAGE LOOKUP_CODE MEANING DESCRIPTION XLA_EVENT_PROCESS_STATUS US D Draft Draft XLA_E ...

  4. 2. 星际争霸之php面向对象(二)

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  5. [记录]firefox繁体转换成简体的油猴脚本

    // ==UserScript== // @name 繁简转换 // @include *.* // @author yecao // @version 0.1 // @include * // @e ...

  6. C++中关于无法解析的外部符号问题LNK2019问题的总结

           网上一般有很全面的解决方法,最近恰好本道长也遇到了这种问题,也恰好解决了,这种问题应该算作配置问题,而非程序本身问题,多数是因为接手了生疏的程序导致,此问题看上去很简单,但木有经验的话很 ...

  7. 《Focus On 3D Terrain Programming》中一段代码的注释三

    取自<Focus On 3D Terrain Programming>中的一段: //--------------------------------------------------- ...

  8. Spark实战2:Zeppelin的安装和SparkSQL使用总结

    zeppelin是spark的web版本notebook编辑器,相当于ipython的notebook编辑器. 一Zeppelin安装 (前提是spark已经安装好) 1 下载https://zepp ...

  9. 单例模式在Java和C#中的实现

    单例模式算是最常见和最容易理解一种设计模式了.通常是指某一个类只有一实例存在,存在的空间我认为可以理解为该类所在的应用系统内,还有一种是在某一个容器内单一存在,比如像spring的IOC容器(作用域为 ...

  10. TI CC2541的中断优先级设置.

    实际看到的中断优先级设置是这样的: