责任链或过滤器模式3-模拟tomcat的过滤器-马士兵设计模式教程 .

//过滤器接口
public interface Filter {
	public void doFilter(Request req,Response res,FilterChain c);
}


//HTML的过滤器
public class HTMLFilter implements Filter{
	@Override
	public void doFilter(Request req, Response res,FilterChain fc) {
		req.requestStr=req.requestStr.replace("<", "[");
		req.requestStr=req.requestStr.replace(">", "]")+"--HTMLFilter";
		fc.doFilter(req, res, fc);//在这里它会调用过滤链中的下一个filter
		//等整个过滤链处理完了之后也就是fc.doFilter(req, res, fc);这段
		//处理完了之后就会执行下面的方法了res.responseStr+="--HTMLFilter";
		//然后依次的过滤器都执行这列的这行代码,也就会变成了倒序执行
		res.responseStr+="--HTMLFilter";
	}
}


//敏感词的过滤器
public class SensitiveFilter implements Filter{
	@Override
	public void doFilter(Request req, Response res,FilterChain fc) {
		req.requestStr=req.requestStr.replace("敏感", "mingan")+"--SensitiveFilter";
		fc.doFilter(req, res, fc);
		res.responseStr+="--SensitiveFilter";
	}
}

//客户端传递的内容到服务器
//模拟javaweb中的request
public class Request {
	public String requestStr;
}

//服务器反馈的内容到客户端
//模拟javaweb中的response
public class Response {
	public String responseStr;
}

//过滤器链
public class FilterChain implements Filter{
	private List<Filter> list=new ArrayList<Filter>();
	public FilterChain addfilter(Filter filter){
		list.add(filter);
		return this;
	}
	int index=0;
	@Override
	public void doFilter(Request req, Response res,FilterChain fc) {
		if(index==list.size())return;
		Filter f=list.get(index);
		index++;
		//依次执行下一个过滤器,直到整个过滤器链执行完
		f.doFilter(req, res, fc);
	}
}<PRE class=java name="code">public class Client {
	/*
	 * Request:客户端发送给服务端的信息
	 * Response:服务端反馈给客户端的信息
	 * 要实现的功能是:Request携带的信息所经过的过滤器
	 * 要跟Response所携带的信息所经过的过滤器相反
	 */
	public static void main(String[] args) {
		Request req=new Request();
		Response res=new Response();
		req.requestStr="这是我的一个敏感链接<a>优酷</a>";
		res.responseStr="response";
		FilterChain  fc=new FilterChain();
		fc.addfilter(new HTMLFilter());
		
		FilterChain fc1=new FilterChain();
		fc1.addfilter(new SensitiveFilter());
		fc.addfilter(fc1);//在一个过滤链上面再加上一个过滤链
		
		fc.doFilter(req, res,fc);
		System.out.println(req.requestStr);
		System.out.println(res.responseStr);
	}
	/**
	 * 执行结果:
	 * 这是我的一个mingan链接[a]优酷[/a]--HTMLFilter--SensitiveFilter
	 * response--SensitiveFilter--HTMLFilter
	 */
}</PRE>
<PRE></PRE>
本文转自(原文): http://blog.csdn.net/wxwzy738/article/details/7706710

你可能感兴趣的:(设计模式,tomcat,String,filter,Class,interface)