例子:模拟实现java web过滤器
工程目录结构与执行原理:
1.Request.java请求类
package web;
public class Request {
private String requestStr;
public String getRequestStr() {
return requestStr;
}
public void setRequestStr(String requestStr) {
this.requestStr = requestStr;
}
}
2.Response.java响应类
package web;
public class Response {
private String responseStr;
public String getResponseStr() {
return responseStr;
}
public void setResponseStr(String responseStr) {
this.responseStr = responseStr;
}
}
3.Filter.java过滤器接口类
package filter;
import web.Request;
import web.Response;
public interface Filter {
public void doFilter(Request request,Response response,FilterChain chain);
}
4.Filter1.java过滤器实现类
package filter.impl;
import web.Request;
import web.Response;
import filter.Filter;
import filter.FilterChain;
public class Filter1 implements Filter{
@Override
public void doFilter(Request request,Response response,FilterChain chain) {
request.setRequestStr(request.getRequestStr() + ",request-doFilter1");
chain.doFilter(request, response, chain);
response.setResponseStr(response.getResponseStr() + ",response-doFilter1");
}
}
5.Filter2.java过滤器实现类
package filter.impl;
import web.Request;
import web.Response;
import filter.Filter;
import filter.FilterChain;
public class Filter2 implements Filter{
@Override
public void doFilter(Request request,Response response,FilterChain chain) {
request.setRequestStr(request.getRequestStr() + ",request-doFilter2");
chain.doFilter(request, response, chain);
response.setResponseStr(response.getResponseStr() + ",response-doFilter2");
}
}
6.FilterChain.java过滤器链条类
package filter;
import java.util.ArrayList;
import java.util.List;
import web.Request;
import web.Response;
public class FilterChain implements Filter{
List<Filter> filters = new ArrayList<Filter>();
int index = 0;
public FilterChain addFilter(Filter filter){
filters.add(filter);
return this;
}
public void doFilter(Request request,Response response,FilterChain chain){
if(index == filters.size())
return;
Filter f = filters.get(index);
index++;
f.doFilter(request, response, chain);
}
}
7.Main.java程序主方法
import web.Request;
import web.Response;
import filter.FilterChain;
import filter.impl.*;
public class Main {
public static void main(String[] args) {
Request request = new Request();
request.setRequestStr("Request:");
Response response = new Response();
response.setResponseStr("Response:");
FilterChain fc = new FilterChain();
fc.addFilter(new Filter1())
.addFilter(new Filter2());
fc.doFilter(request,response,fc);
System.out.println(request.getRequestStr());
System.out.println(response.getResponseStr());
}
}
程序打印结果:
Request:,request-doFilter1,request-doFilter2
Response:,response-doFilter2,response-doFilter1