模拟过滤器链的工作原理。和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());
}
}