/**
* 封装请求体
*/
public class Request {
private String content;
public Request(String content) {
super();
this.content = content;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
/**
* 封装响应体
*/
public class Response {
private String content;
public Response(String content) {
super();
this.content = content;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
}
/**
* 过滤器接口(过滤器和过滤器链都实现该接口)
*/
public interface Filter {
void doFilter(Request request, Response response, FilterChain chain);
}
/**
* 过滤器链
*/
public class FilterChain implements Filter {
private List<Filter> filters = new ArrayList<Filter>();
private int i = 0;
public FilterChain() {
super();
}
public FilterChain(List<Filter> filters) {
this.filters = filters;
}
public List<Filter> getFilters() {
return filters;
}
public void setFilters(List<Filter> filters) {
this.filters = filters;
}
//
public FilterChain addFilter(Filter filter) {
filters.add(filter);
return this;
}
//
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
if (chain.getFilters().isEmpty() || i==chain.getFilters().size()) {
return;
}
Filter filter = chain.getFilters().get(i);
i++; //注意顺序
filter.doFilter(request, response, chain);
}
}
/**
* 过滤器Filter1,Filter2,Filter3
*/
public class Filter1 implements Filter {
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
request.setContent(request.getContent() + " filter1");
chain.doFilter(request, response, chain);
response.setContent(response.getContent() + " filter1");
}
}
/**
* main
*/
public static void main(String[] args) {
Request request = new Request("myrequest");
Response response = new Response("myresponse");
Filter1 filter1 = new Filter1();
Filter2 filter2 = new Filter2();
Filter3 filter3 = new Filter3();
FilterChain chain = new FilterChain();
chain.addFilter(filter1).addFilter(filter2).addFilter(filter3);
chain.doFilter(request, response, chain);
System.out.println(request.getContent());
System.out.println(response.getContent());
}
//运行结果:
myrequest filter1 filter2 filter3
myresponse filter3 filter2 fileter1