zoukankan      html  css  js  c++  java
  • Filter简易实现.

    一 代码结构:

      

    二 代码

      Test.java:

      

    package com.demo.test;
    
    import com.demo.filter.ApplicationFilterChain;
    import com.demo.impl.WebSiteFilter;
    import com.demo.impl.LanguageFilter;
    import com.demo.impl.LoginFilter;
    import com.demo.model.Request;
    import com.demo.model.Response;
    
    public class Test {
        {
            req = new Request();
            res = new Response();
            chain = new ApplicationFilterChain();
        }
        Request req;
        Response res;
        ApplicationFilterChain chain;
    
        public static void main(String[] args) {
            System.out.println("starting filter...");
            // new Test().testEmpty(); // new Test().testNormal1();// new Test().testNormal2();
            new Test().testNormal3();
            System.out.println("...end.");
            System.exit(0);
        }
    
        public void testEmpty() {
            chain.doFilter(req, res);
        }
    
        public void testNormal1() {
            chain.addFilter(new WebSiteFilter());
            chain.doFilter(req, res);
        }
    
        public void testNormal2() {
            chain.addFilter(new WebSiteFilter());
            chain.addFilter(new LanguageFilter());
            chain.doFilter(req, res);
        }
    
        public void testNormal3() {
            chain.addFilter(new WebSiteFilter());
            chain.addFilter(new LanguageFilter());
            chain.addFilter(new LoginFilter());
            chain.doFilter(req, res);
        }
    
    }

    运行结果:

    starting filter...
    do filter website, send Redirect or Dispatch if not in Zh-CN
    do filter Language, send Redirect or Dispatch if not in Chinese Language.
    do filter Login, dispatch to Home Page if not authorized.
    after filter doing something...
    ...end.

     

     接口:

      

    package com.demo.filter;
    
    import com.demo.model.Request;
    import com.demo.model.Response;
    
    public interface Filter {
    
        void filter(Request req, Response res, FilterChain chain);
    
    }
    package com.demo.filter;
    
    import com.demo.model.Request;
    import com.demo.model.Response;
    
    public interface FilterChain {
    
        void doFilter(Request req, Response res);
    
    }

    实现类:

      

    package com.demo.filter;
    
    import com.demo.model.Request;
    import com.demo.model.Response;
    
    public final class ApplicationFilterChain implements FilterChain {
    
        int n;
    
        int increment = 2;
    
        int position;
    
        Filter[] filters = new Filter[0];
    
        public void addFilter(Filter filter) {
            if (n == filters.length) {
                Filter[] newFilters = new Filter[n + increment];
                System.arraycopy(filters, 0, newFilters, 0, n);
                filters = newFilters;
            }
            filters[n++] = filter;
        }
    
        @Override
        public void doFilter(Request req, Response res) {
            if (position < n) {
                Filter filter = filters[position++];
                filter.filter(req, res, this);
                return;
            }
            System.out.println("after filter doing something...");
        }
    
    }
    package com.demo.impl;
    
    import com.demo.filter.Filter;
    import com.demo.filter.FilterChain;
    import com.demo.model.Request;
    import com.demo.model.Response;
    
    public class WebSiteFilter implements Filter {
    
        @Override
        public void filter(Request req, Response res, FilterChain chain) {
            System.out.println("do filter website, Send Redirect or Dispatch if not in Zh-CN. ");
            boolean filterSuccess=true;
            if(!filterSuccess){
    //            req.doDispatch();
                return;
            }
            chain.doFilter(req, res);
        }
    
    }
    package com.demo.impl;
    
    import com.demo.filter.Filter;
    import com.demo.filter.FilterChain;
    import com.demo.model.Request;
    import com.demo.model.Response;
    
    public class LanguageFilter implements Filter {
    
        @Override
        public void filter(Request req, Response res, FilterChain chain) {
            System.out.println("do filter Language, send Redirect or Dispatch if not in Chinese Language. ");
            chain.doFilter(req, res);
        }
    
    }
    package com.demo.impl;
    
    import com.demo.filter.Filter;
    import com.demo.filter.FilterChain;
    import com.demo.model.Request;
    import com.demo.model.Response;
    
    public class LoginFilter implements Filter {
    
        @Override
        public void filter(Request req, Response res, FilterChain chain) {
            System.out.println("do filter Login, dispatch to Home Page if not authorized. ");
            chain.doFilter(req, res);
        }
    
    }
    package com.demo.model;
    
    public class Request {
    
    }
    package com.demo.model;
    
    public class Response {
    
    }
  • 相关阅读:
    线性反馈系统
    静磁场
    平面波的传播
    Partition does not end on cylinder boundary
    FFTW简介及使用
    EINTR、ERESTARTSYS和SIGINT
    凉面
    linux Shell编程
    Linux From Scratch [2]
    Linux From Scratch [1]
  • 原文地址:https://www.cnblogs.com/shoubianxingchen/p/8371729.html
Copyright © 2011-2022 走看看