过滤器可以对资源的请求和相应提供过滤功能,配置在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. eclipse的自动提示功能

    一般情况下按ALT+/即可提示,若想按任意字母都有提示,则可以打开eclipse的自动提示功能,打开或关闭该提示功能的步骤如下: 打开eclipse后一次点Window->Perferences ...

  2. co css规范

    CSS 编码规范 1. 文件组织 (建议试试LESS) 1.1 CSS 与 HTML CSS 一律写在 CSS 文件中,原则上不写内联样式. CSS 文件命名由小写字母.下划线(_)组成. CSS 文 ...

  3. Jsoup的demao

    package com.ch.jsoupdemo; import java.io.IOException; import org.jsoup.Jsoup;import org.jsoup.nodes. ...

  4. [转]Delphi多线程编程入门(二)——通过调用API实现多线程

    以下是一篇很值得看的关于Delphi多线程编程的文章,内容很全面,建议收藏. 一.入门 ㈠. function CreateThread(    lpThreadAttributes: Pointer ...

  5. WordPress博客网站fonts.useso加载慢解决办法

    WordPress博客网站fonts.useso加载慢解决办法 之前WordPress博客因为google字体库访问不了替换成360的useso,最近WordPress博客网站一直等待fonts.us ...

  6. 安装新版xampp后apache无法启动提示:Apache Service detected with wrong path解决方案

    我以前安装过xampp,因为学习thingPHP需要升级PHP5.0以上,所以我就卸掉了xampp,从新安装新版本的xampp其中PHP是最新版的,但是安装后启动xampp提示如下:Apache Se ...

  7. 【jQuery UI 1.8 The User Interface Library for jQuery】.学习笔记.10.Button 和 Autocomplete控件

    Button ,可以使用 <button> <input> <a>. <input> 中的不同类型,submit , radio , checkbox ...

  8. MySQL 5.7 SYS系统SCHEMA

    版权声明:本文为博主原创文章,未经博主允许不得转载. 在说明系统数据库之前,先来看下MySQL在数据字典方面的演变历史:MySQL4.1 提供了information_schema 数据字典.从此可以 ...

  9. PHP程序员如何突破成长瓶颈

    PHP因为简单而使用,但不能因为它的简单而限制我们成长!文章给PHP工程师突破成长瓶颈提了一些建议,希望PHPer能够突破自己,有更好的发展. AD: 作为Web开发中应用最广泛的语言之一,PHP有着 ...

  10. 【PHP设计模式 11_QiaoJie.php】桥接模式(针对 二维模型)

    <?php /** * [桥接模式(针对 二维模型)] * 对于多维度需要处理的事情,多耦合 * 第一维度,发送信息的类型:站内信.email.手机短信 * 第二维度,发送信息的紧急程度:普通. ...