}
}
改进后的过滤器
过滤器接口类
package com.bjsxt.chain;
publicinterface Filter {
publicvoid doFilter(Request request, Response response, FilterChain filterChain);
}
过滤器实现类1
package com.bjsxt.chain;
publicclass Filter1 implements Filter {
publicvoid doFilter(Request request, Response response, FilterChain filterChain) {
String str = request.getRequestParameter();
str += "request pass filter1 ";
request.setRequestParameter(str);
filterChain.doFilter(request, response, filterChain);
str = response.getResponseParameter();
str += "response pass filter1";
response.setResponseParameter(str);
}
}
过滤器实现类2
package com.bjsxt.chain;
publicclass Filter2 implements Filter {
publicvoid doFilter(Request request, Response response, FilterChain filterChain) {
String str = request.getRequestParameter();
str += "request pass filter2 ";
request.setRequestParameter(str);
filterChain.doFilter(request, response, filterChain);
str = response.getResponseParameter();
str += "response pass filter2";
response.setResponseParameter(str);
}
}
过滤器链
package com.bjsxt.chain;
import java.util.List;
import java.util.Stack;
public class FilterChain implements Filter {
List
Stack
private int i = 0;
public FilterChain addFilter(Filter filter) {
filters.add(filter);
return this;
}
public void doFilter(Request request, Response response, FilterChain filterChain) {
if (i == filters.size()) return;
Filter filter = filters.get(i);
i++;
filter.doFilter(request, response, filterChain);
}
}
测试主类
package com.bjsxt.chain;
publicclass MainClass {
publicstaticvoid main(String[] args) {
Request request = new Request();
Response response = new Response();
FilterChain chain1 = new FilterChain();
chain1.addFilter(new Filter1())
.addFilter(new Filter2());
chain1.doFilter(request, response, chain1);
System.out.println(request.getRequestParameter());
System.out.println(response.getResponseParameter());
}
}
作者:javahuangfang