zoukankan      html  css  js  c++  java
  • 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---------------------------------------
    Stay Hungry,Stay Foolish!
  • 相关阅读:
    Javascript异步编程之回调函数
    重绘(redraw或repaint)和 重排(reflow)
    前端性能优化之重排和重绘
    关于options请求的一点理解
    跨域中option请求详解
    手写call、apply、bind函数
    CSS3疑难问题---7、实现元素水平垂直居中
    CSS3疑难问题---8、纯css实现三角形
    【转】Activity启动模式 及 Intent Flags 与 栈 的关联分析
    ListView为什么用setOnItemClick这个方法和onTouch这个方法有冲突
  • 原文地址:https://www.cnblogs.com/stay-9527/p/4000869.html
Copyright © 2011-2022 走看看