直接上代码Filter.java

public interface Filter {
//过滤器
public void doFilter(Request request,Response response,FilterChain chain); }

FilterChain.java

public class FilterChain {
//存放所有的过滤器
private List<Filter> filters ;
//记录当前过滤索引
private int index;
//过滤链初始化
public FilterChain()
{
filters = new ArrayList<Filter>(10);
} public void addFilter(Filter filter)
{
filters.add(filter);
}
/**
* 迭代过滤
*/
public void doFilter(Request request,Response response)
{
if ( index >= filters.size() )
return;
filters.get( index++ ).doFilter(request, response, this);
} }

Request.java

public class Request {

    private String value;

    public String getValue() {
return value;
} public void setValue(String value) {
this.value = value;
} @Override
public String toString() {
return this.value;
} }

Response.java

public class Response {

    private String value;

    public String getValue() {
return value;
} public void setValue(String value) {
this.value = value;
} @Override
public String toString() {
return this.value;
} }

FilterOne.java

public class FilterOne implements Filter{

    /**
* 过滤FUCK字符
*/
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
System.out.println("进入过滤器FilterOne---------------------------------------");
//执行下一个过滤器
chain.doFilter(request, response); System.out.println("出去过滤器FilterOne---------------------------------------");
} }

FilterTwo.java

public class FilterTwo implements Filter{

    @Override
public void doFilter(Request request, Response response, FilterChain chain) {
System.out.println("进入过滤器FilterTwo---------------------------------------");
//执行下一个过滤器
chain.doFilter(request, response); System.out.println("出去过滤器FilterTwo---------------------------------------");
} }

Test.java

public class Test {

    public static void main(String[] args) {
FilterChain chain = new FilterChain();
chain.addFilter(new FilterOne());
chain.addFilter(new FilterTwo());
chain.doFilter(new Request(), new Response() );
} }

运行结果

进入过滤器FilterOne---------------------------------------
进入过滤器FilterTwo---------------------------------------
出去过滤器FilterTwo---------------------------------------
出去过滤器FilterOne---------------------------------------

Tomcat过滤器模拟的更多相关文章

  1. tomcat过滤器异常

    Connected to server[2019-11-25 04:40:58,976] Artifact DUBBO_BG:Web exploded: Artifact is being deplo ...

  2. memcached+tomcat转发forward时 sessionid一直变化的问题

    今天遇到了一个很奇怪的问题, 我在tomcat过滤器 中, 对请求过来的静态资源及html页面做了forword转发操作,核心代码如下: private void redirectMobile(Htt ...

  3. 同主机下Docker+nginx+tomcat负载均衡集群搭建

    想用Docker模拟一下nginx+tomcat集群部署,今天折腾了一天,遇坑无数,终于在午夜即将到来之际将整个流程走通,借本文希望给同样遇到类似问题的小伙伴们留点线索. 主机环境是CentOS 7, ...

  4. Android服务器——使用TomCat实现软件的版本检测,升级,以及下载更新进度!

    Android服务器--使用TomCat实现软件的版本检测,升级,以及下载更新进度! 算下来,TomCat服务器已经写了很长一段时间了,一直说拿他来搞点事 情,也一直没做,今天刚好有空,交流群还有人请 ...

  5. windows下apache httpd2.4.26集群完整搭建例子:下载、启动、tomcat集群例子

    第一部分——下载 1.1: 百度搜索apache httpd关键字,第一个链接既是官方下载地址.如果这一步不会,此篇文章不适合你阅读,请自行停止. 1.2:进入官网http://httpd.apach ...

  6. nginx+tomcat实现负载均衡以及双机热备

    还记得那些年吗? 还记得更新代码之后,服务器起不来被领导训斥吗?还记得更新代码,需要停机过多的时间被渠道部们埋怨吗?还记得更新代码,代码出错时自己吓个半死吗?于是我们聪明勤快的程序员,看着电影待到夜深 ...

  7. http和数据库sql分析与窃听技术

    用tunnel,tunnel是一种技术称谓,将其放到真正的服务器和客户端之间.调试阶段可以使用webcream运行tomcat作为模拟的真正的服务器. 具体:用apache axis及其项目中的工具t ...

  8. Eclipse使用新手教程

    说起java的IDE,朗朗上口的无非是Eclipse了,假若能熟练Eclipse,对于我们编写java程序会起到事半功倍的效果,大大提高我们工作效率.因此本篇博文,笔者仅仅是针对刚刚入门java的新手 ...

  9. CAS单点登录配置[4]:客户端配置

    本节介绍一下客户端如何配置,客户端配置没有服务端那么复杂... 客户端Tomcat配置 1 首先确认证书文件已经拷贝到Tomcat的目录下,我们新建两个客户端的web应用,分别命名为Client1,C ...

随机推荐

  1. MVC 定义JsonpResult实现跨域请求

    MVC 定义JsonpResult实现跨域请求 1:原理 在js中,XMLHttpRequest是不能请求不同域的数据,但是script标签却可以,所以可以用script标签实现跨域请求.具体是定义一 ...

  2. Razor和HtmlHelper的使用意义

    Razor和HtmlHelper的使用意义 写这篇文档的目的是为了给初学MVC的同伴们介绍在MVC的View中的两个新概念,能有利于我们更快,更好的开发项目.一个是视图引擎,一个是HtmlHlper. ...

  3. SQL Server 2012 复制(发布订阅的研究)

    原文:SQL Server 2012 复制(发布订阅的研究) 已实现发布订阅功能,可以实现局域网内双击备份. 一.注意事项: a) 使用[事务复制]功能 b) 必须是相同的SqlServer 帐号和密 ...

  4. STM32电源管理

     (1)3时钟模式 ①睡眠模式②停止模式③待机模式 1.睡眠模式:Cortex-M3内核(理解为CPU)停止工作,CPU供电1.8V有着,周边任何执行.执行 2.停机模式:全部时钟都停止,CPU电 ...

  5. 必要的软件架构师——编译原理&#183;语法

    最近软测试.我观看进程的视频! 发现里面有很多内容已经在自我不错的接触过程.而占80%比例! 但其中的一部分.我很奇怪的一部分.研究,在这里,将我研究的内容整理分享给大家! 编译原理: 首先,我第一眼 ...

  6. Map <STL>

    map的使用方法: #include <cstdio> #include <map> #include <string> using namespace std; ...

  7. Layout Renderers

    Layout Renderers NLog package ${activityid} - Puts into log a System.Diagnostics trace correlation i ...

  8. 从头开始学JavaScript (十一)——Object类型

    原文:从头开始学JavaScript (十一)--Object类型 一.object类型 一个object就是一系列属性的集合,一个属性包含一个名字(属性名)和一个值(属性值). object对于在应 ...

  9. DOS call 中的%cd%,当前文件夹演示

    最近的工作要处理.bat文件,在dos文件错综复杂的调用过程中,我迷失了,于是%cd% @echo %cd% @cd %cd%\-- @pause @call %cd%\--\1.bat @pause ...

  10. hdu Color the ball

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1556 树状数组的  update的应用,逆序更新 代码: #include <stdio.h&g ...