1、ServletResponse
package com.sunrex.design.pattern;
public class ServletResponse {
public String responseStr() {
return " response " + (ServletRequest.i--);
}
}
2、ServletRequest
package com.sunrex.design.pattern;
public class ServletRequest {
public static int i = 0;
public String getAttribute(String str) {
i++;
return str + " + " + i;
}
}
3、Filter接口
package com.sunrex.design.pattern;
public interface Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain);
}
4、FilterChain类
package com.sunrex.design.pattern;
import java.util.ArrayList;
import java.util.List;
public class FilterChain implements Filter {
private List<Filter> filters = new ArrayList<Filter>();
int index = 0;
public FilterChain addFilter(Filter filter) {
this.filters.add(filter);
return this;
}
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) {
if(index >= filters.size()) return;
Filter f = filters.get(index);
index ++;
f.doFilter(request, response, chain);
}
}
5、HtmlFilter类
package com.sunrex.design.pattern;
public class HtmlFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) {
System.out.println("--HtmlFilter.start--"+ request.getAttribute("test"));
chain.doFilter(request, response, chain);
System.out.println("--HtmlFilter.end--" + response.responseStr());
}
}
6、XMLFilter类
package com.sunrex.design.pattern;
public class XMLFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) {
System.out.println(" --XMLFilter.start--"+ request.getAttribute("test"));
chain.doFilter(request, response, chain);
System.out.println(" --XMLFilter.end--" + response.responseStr());
}
}
7、JavascriptFilter类
package com.sunrex.design.pattern;
public class JavascriptFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) {
System.out.println(" --JavascriptFilter.start-- " + request.getAttribute("test"));
chain.doFilter(request, response, chain);
System.out.println(" --JavascriptFilter.end--" + response.responseStr());
}
}
8、测试类-FilterTest类
package com.sunrex.design.pattern;
public class FilterTest {
public static void main(String[] args) {
FilterChain fc = new FilterChain();
fc.addFilter(new HtmlFilter()).addFilter(new XMLFilter()).addFilter(new JavascriptFilter());
ServletRequest request = new ServletRequest();
ServletResponse response = new ServletResponse();
fc.doFilter(request, response, fc);
}
}
9、程序执行结果
--HtmlFilter.start--test + 1
--XMLFilter.start--test + 2
--JavascriptFilter.start-- test + 3
--JavascriptFilter.end-- response 3
--XMLFilter.end-- response 2
--HtmlFilter.end-- response 1