Tomcat过滤器模拟

直接上代码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---------------------------------------
时间: 2024-10-24 07:04:37

Tomcat过滤器模拟的相关文章

如何在tomcat集群中实现Session共享

转自:http://www.toutiao.com/i6388049068718817794/ Apache集群实现Tomcat的Session共享配置其实很简单,在Tomcat自带的文档中有详细的说明( /docs/cluster-howto.html ),只不过是英语的,所以联合 下面根据说下怎么配置吧: 1.既然是集群肯定要多准备几个Tomcat来模拟,比如分别为Tomcat01.Tomcat02.Tomcat03. 如果各Tomcat程序放在不同的机器上,那么就不会有端口的冲突.如果是放

Nginx1.7.4+Tomcat7+memcached集群环境搭建

这几天研究了一下Nginx和tomcat的集群环境搭建,同时支持HTTP请求和HTTPS请求,研究了一下,整理一下,分享给大家.还是有很多不足的地方,大家发现问题,希望多多指正.话不多说,上代码~ 因为研究的条件有限,我是在本机上搭建两个Tomcat进行模拟的. 一.环境准备 1.Tomcat7:http://tomcat.apache.org/download-70.cgi 2.Nginx1.7.4:http://nginx.org/en/download.html 3.Memcached:h

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

本节介绍一下客户端如何配置,客户端配置没有服务端那么复杂... 客户端Tomcat配置 1 首先确认证书文件已经拷贝到Tomcat的目录下,我们新建两个客户端的web应用,分别命名为Client1,Client2,在页面上稍作处理用于区分即可. [注意] 我们使用两个Tomcat,一个模拟服务器,一个模拟客户端.如果哦使用同一个Tomcat请注意区分端口! 2 打开server.xml,在<server></server>中配置如下: <Service name="

eclipse使用和快捷键

一.快捷键 - ctrl + shift + o 导包 - ctrl + shift + t 快速查找某个类 - 先按ctrl + 2 ,再点L, 创建变量并命名 - ctrl + o , 在当前类中,快速查找某个方法 - ctrl + k, 向下查找某个字符串 - ctrl + shift + k, 向上查找某个字符串 - alt + 左方向键 跳转上一个页面 - ctrl + shift + f  代码格式化 -  Ctrl+Shift+G迅速定位所有引用此方法的位置 - ctrl + t看

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

用tunnel,tunnel是一种技术称谓,将其放到真正的服务器和客户端之间.调试阶段可以使用webcream运行tomcat作为模拟的真正的服务器. 具体:用apache axis及其项目中的工具tcpmon. 但tunnel有个缺点,就是要重新配置客户端和服务器让他们发送请求道tunnel代理. 另: 在RMI协议上的监听:RMI指的是Remote method invocation,即远程过程调用,它是使用java 的JRMP(java remote method protocol)或II

[转]使用Nginx实现反向代理

使用Nginx实现反向代理 解释 正向代理的概念 正向代理,也就是传说中的代理,他的工作原理就像一个跳板,简单的说,我是一个用户,我访问不了某网站,但是我能访问一个代理服务器这个代理服务器呢,他能访问那个我不能访问的网站于是我先连上代理服务器,告诉他我需要那个无法访问网站的内容代理服务器去取回来,然后返回给我 从网站的角度,只在代理服务器来取内容的时候有一次记录有时候并不知道是用户的请求,也隐藏了用户的资料,这取决于代理告不告诉网站 结论就是 正向代理 是一个位于客户端和原始服务器(origin

【转载】Eclipse使用入门教程

说起java的IDE,朗朗上口的无非是Eclipse了,假若能熟练Eclipse,对于我们编写java程序会起到事半功倍的效果,大大提高我们工作效率.因此本篇博文,笔者只是针对刚刚入门java的新手,以便他们能尽快掌握Eclipse的使用.1. 常用快捷键 这是使用工具的第一步,熟练使用快捷键对于我们编写程序会起到相当大帮助,所以这里笔者列出的快捷键建议大家必须都掌握. Ctrl + 鼠标左键(类.方法.属性的变量名词):定位跟踪某变量声明或定义的位置 Ctrl + S:保存当前文件Ctrl +

使用Nginx实现反向代理

一.代理服务器 1.什么是代理服务器 代理服务器,客户机在发送请求时,不会直接发送给目的主机,而是先发送给代理服务器,代理服务接受客户机请求之后,再向主机发出,并接收目的主机返回的数据,存放在代理服务器的硬盘中,再发送给客户机.  2.为什么要使用代理服务器 1)提高访问速度 由于目标主机返回的数据会存放在代理服务器的硬盘中,因此下一次客户再访问相同的站点数据时,会直接从代理服务器的硬盘中读取,起到了缓存的作用,尤其对于热门站点能明显提高请求速度. 2)防火墙作用 由于所有的客户机请求都必须通过

CentOS7 搭建 Nginx 服务器

一:Nginx 的搭建 Nginx 在服务器的应用主要是用于实现反向代理,负载均衡的功能. 这里简单的搭建 Nginx 服务器实现 nginx 对于两个 tomcat 的反向代理的功能. 在安装 Nginx 之前, 需要安装四个依赖, 安装nginx的依赖:gcc 安装nginx需要先将官网下载的源码进行编译,编译依赖gcc环境,如果没有gcc环境,需要安装gcc: yum install gcc-c++ yum install -y gcc PCRE PCRE(Perl Compatible