您的位置:首页 > 其它

Filter的原理

2016-06-24 12:28 274 查看
模拟过滤器链的工作原理。和servlet和struts的拦截器站差不多。

先定义Filter接口:

package com.qbd.duan.main;

public interface Filter {

    public void doFilter(Request request,Response response,FilterChain chain);

}

在写具体的实现类:

package com.qbd.duan.main;

public class FaceFilter implements Filter {

    @Override

    public void doFilter(Request request,Response response,FilterChain chain) {

        // TODO Auto-generated method stub

        request.requeststr=request.getRequeststr().replace(":)", "^_^")+"\nreqFace()"+"\n";

        chain.doFilter(request, response, chain);

        response.responsestr=response.getResponsestr()+"resFace()"+"\n";

        

    }

}

package com.qbd.duan.main;

public class ReFilter implements Filter{

    @Override

    public void doFilter(Request request, Response response,FilterChain chain) {

        // TODO Auto-generated method stub

    

        request.requeststr=request.getRequeststr().replace("sb", "**")+"reqRe()"+"\n";

        chain.doFilter(request, response, chain);

        response.responsestr=response.getResponsestr()+"resRe()"+"\n";

    }

}

然后写链条管理器用来进行添加移除Filter和执行下一个Filter

package com.qbd.duan.main;

import java.util.ArrayList;

import java.util.List;

public class FilterChain implements Filter {

    private List<Filter> filters=new ArrayList<Filter>();

    private int index;

    public Filter add(Filter f){

        filters.add(f);

        return this;

    }

    

    public void remove(Filter f){

        filters.remove(f);

    }

    

    public List<Filter> getFilters() {

        return filters;

    }

    public void setFilters(List<Filter> filters) {

        this.filters = filters;

    }

    @Override

    public void doFilter(Request request,Response response,FilterChain chain) {

        // TODO Auto-generated method stub

        if(index==filters.size())

            return ;

        Filter f=filters.get(index);

        index++;

        f.doFilter(request,response,chain);    

    }

}

然后是两个实体类封装一些请求和相应:

package com.qbd.duan.main;

public class Request {

    String requeststr;

    

    public String getRequeststr() {

        return requeststr;

    }

    public void setRequeststr(String requeststr) {

        this.requeststr = requeststr;

    }

    

}

package com.qbd.duan.main;

public class Response {

    String responsestr;

    public String getResponsestr() {

        return responsestr;

    }

    public void setResponsestr(String responsestr) {

        this.responsestr = responsestr;

    }

    

    

}

然后是测试类:

package com.qbd.duan.main;

public class Main {

    public static void main(String[] args) {

        String str=":)  sb  nihao";

        Request request=new Request();

        request.setRequeststr(str);

        Response response=new Response();

        response.setResponsestr("response");

        FilterChain chain=new FilterChain();

        FilterChain chain1=new FilterChain();

        chain.add(new FaceFilter());

        chain1.add(new ReFilter());

        chain.add(chain1);

        chain.doFilter(request, response,chain);

        System.out.println(request.getRequeststr());

        System.out.println(response.getResponsestr());

    }

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  filter