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---------------------------------------
Tomcat过滤器模拟的更多相关文章
- tomcat过滤器异常
		
Connected to server[2019-11-25 04:40:58,976] Artifact DUBBO_BG:Web exploded: Artifact is being deplo ...
 - memcached+tomcat转发forward时 sessionid一直变化的问题
		
今天遇到了一个很奇怪的问题, 我在tomcat过滤器 中, 对请求过来的静态资源及html页面做了forword转发操作,核心代码如下: private void redirectMobile(Htt ...
 - 同主机下Docker+nginx+tomcat负载均衡集群搭建
		
想用Docker模拟一下nginx+tomcat集群部署,今天折腾了一天,遇坑无数,终于在午夜即将到来之际将整个流程走通,借本文希望给同样遇到类似问题的小伙伴们留点线索. 主机环境是CentOS 7, ...
 - Android服务器——使用TomCat实现软件的版本检测,升级,以及下载更新进度!
		
Android服务器--使用TomCat实现软件的版本检测,升级,以及下载更新进度! 算下来,TomCat服务器已经写了很长一段时间了,一直说拿他来搞点事 情,也一直没做,今天刚好有空,交流群还有人请 ...
 - windows下apache httpd2.4.26集群完整搭建例子:下载、启动、tomcat集群例子
		
第一部分——下载 1.1: 百度搜索apache httpd关键字,第一个链接既是官方下载地址.如果这一步不会,此篇文章不适合你阅读,请自行停止. 1.2:进入官网http://httpd.apach ...
 - nginx+tomcat实现负载均衡以及双机热备
		
还记得那些年吗? 还记得更新代码之后,服务器起不来被领导训斥吗?还记得更新代码,需要停机过多的时间被渠道部们埋怨吗?还记得更新代码,代码出错时自己吓个半死吗?于是我们聪明勤快的程序员,看着电影待到夜深 ...
 - http和数据库sql分析与窃听技术
		
用tunnel,tunnel是一种技术称谓,将其放到真正的服务器和客户端之间.调试阶段可以使用webcream运行tomcat作为模拟的真正的服务器. 具体:用apache axis及其项目中的工具t ...
 - Eclipse使用新手教程
		
说起java的IDE,朗朗上口的无非是Eclipse了,假若能熟练Eclipse,对于我们编写java程序会起到事半功倍的效果,大大提高我们工作效率.因此本篇博文,笔者仅仅是针对刚刚入门java的新手 ...
 - CAS单点登录配置[4]:客户端配置
		
本节介绍一下客户端如何配置,客户端配置没有服务端那么复杂... 客户端Tomcat配置 1 首先确认证书文件已经拷贝到Tomcat的目录下,我们新建两个客户端的web应用,分别命名为Client1,C ...
 
随机推荐
- 在ASP.NET 5应用程序中的跨域请求功能详解
			
在ASP.NET 5应用程序中的跨域请求功能详解 浏览器安全阻止了一个网页中向另外一个域提交请求,这个限制叫做同域策咯(same-origin policy),这组织了一个恶意网站从另外一个网站读取敏 ...
 - discuz 7.2 faq.php sql注入了一些研究
			
6.2号码(可能更早)上网本见exp,是一家discuz 7.2的sql注入漏洞 经过反复研究.最高在线人数exp它们存在于这些或那些问题,经过我自己的使用和变更摘要,使用的方法如以下: Discuz ...
 - Android在第三方应用程序系统应用尽早开始,杀死自己主动的第三方应用程序,以重新启动
			
1.为什么第三方应用程序可能早于System的app启动? Android能够查阅了,这里就不细述了,这里不阐述ROM启动还有bootloader.软件启动的大致流程应该是 启动kernel 执行se ...
 - Mac OS X中报:java.io.UnixFileSystem.createFileExclusively(Native Method)的简单原因
			
这个博客太简单了!想到可能有其它朋友也遇到这个问题,就记录一下. 今天把一个之前在Windows上的Java项目放到Mac OS X上执行,本来认为应该非常easy的事情,结果还是报: Excepti ...
 - VS2015, .NET 4.6, C# 6.0, F# 4.0等重量级产品正式上线
			
VS2015, .NET 4.6, C# 6.0, F# 4.0等重量级产品正式上线 Visual Studio Visual Studio 2015 下载 VS2015新功能列表 ‘ Visual ...
 - 微软将彻底改变Windows发布方式
			
看到网上的新闻信息: 微软上任 CEO 史蒂夫·鲍尔默在职最后一段时间引入了更快的产品公布周期.不再向从前那样,每隔几年公布一次重大产品升级,而是功能一旦开发完成就会推送升级. 显然,现任 CEO 纳 ...
 - Win7安装和配置Tigase 5.2server
			
Win7安装和配置Tigaseserver 笔者:chszs,转载注明. 博客首页:http://blog.csdn.net/chszs 1.下载tigase-server-5.2.0-b3447.e ...
 - View Component
			
View Component 在之前的MVC中,我们经常需要类似一种小部件的功能,通常我们都是使用Partial View来实现,因为MVC中没有类似Web Forms中的WebControl的功能. ...
 - 前端学习笔记(zepto或jquery)——对li标签的相关操作(三)
			
对li标签的相关操作——八种方式遍历li标签并获取其值 $("ul>li").forEach(function(item,index){ alert(index+" ...
 - 完整具体解释GCD系列(二)dispatch_after;dispatch_apply;dispatch_once
			
原创Blog,转载请注明出处 本文阅读的过程中,如有概念不懂,请參照前专栏中之前的文章,假设还有疑惑,请留言. 这是我关于GCD专栏的地址 http://blog.csdn.net/column/de ...