责任链或过滤器模式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);
	}
}
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
	 */
}
 

                
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值