直接上代码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. P90

    #include<stdio.h> #define N 4 int fun(int a[][N]) { int i,j,max=a[0][0]; for(i=0;i<2;i++) f ...

  2. 使用sqlnet.ora限制IP访问

    他在最后一个超级遭遇了许多方法值,然后找到一个方法,在DB上限IP访问. http://blog.csdn.net/jacson_bai/article/details/18097805 ENV:   ...

  3. IC设计前端到后端的流程和eda工具。

    IC前端设计(逻辑设计)和后端设计(物理设计)的区分:以设计是否与工艺有关来区分二者:从设计程度上来讲,前端设计的结果就是得到了芯片的门级网表电路. 前端设计的流程及使用的EDA工具例如以下: 1.架 ...

  4. 【MySQL案件】mysql登录-S失败

    1.1.1. mysql登录mysql时间,-S参数失效 [环境的叙述性说明] mysql5.5.14 [问题叙述性说明] 配置多个实例 实例1 实例2 datadir /home/mysql_330 ...

  5. [kmp+dp] hdu 4628 Pieces

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4622 Reincarnation Time Limit: 6000/3000 MS (Java/Ot ...

  6. canvas绘制贝塞尔曲线

    原文:canvas绘制贝塞尔曲线 1.绘制二次方贝塞尔曲线 quadraticCurveTo(cp1x,cp1y,x,y); 其中参数cp1x和cp1y是控制点的坐标,x和y是终点坐标 数学公式表示如 ...

  7. Oracle OS认证和口令文件认证方法

    OS认证 1.在SQLNET.ORA(位于$ORACLE_HOME/NETWORK/ADMIN文件夹中)文件里,使用vi编辑,凝视掉#SQLNET.AUTHENTICATION_SERVICES = ...

  8. 如何将sqlserver表中的数据导出sql语句或生成insert into语句 [转]

    输入表名,生成插入语句 drop proc proc_insert //如果存在就删除 go create proc proc_insert (@tablename varchar(256)) as ...

  9. winsock2之最简单的win socket编程

    原文:winsock2之最简单的win socket编程 server.cpp #include <WINSOCK2.H> #include <stdio.h> #pragma ...

  10. java设计模式之二抽象工厂模式(Abstract Factory)

    工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这 ...