一、责任链模式的原理和作用
1、原理:如果有多个对象都有机会对信息进行处理,责任链会使发送者与接受者解耦,使请求沿着责任链传播,直到有对象处理它为止。
2、优势:对客户端到服务器、服务器到客户端的信息处理,同时使客户端与服务器之间完全解耦;可以减化对象,无需知道链的结构。
3、缺点:对性能有一定的损耗;请求不一定被处理。
二、请求的发送与处理的过程展示
1、图解
 
我们希望完成上图所示的操作,那么就有一个问题,假如我们的几个对象是对范围的限制,应该是这样一种考虑,客户端到服务器时,第一次最大,第二次次之,第三次最小,1 2 3针对这样的嵌套式的编程,那么服务器到客户端就是从1 2 到3因此,FilterChain里面的doFIlter方法是实现这个过程的重点。
2、代码示例:
//main方法
public class Main {
    public static void main(String[] args){
    	String msg="大家好:),<script>,被就业," +
    			"网络授课没感觉,因为看不见大家伙";
    	Request request=new Request();
    	request.setRequestStr(msg);
    	Response response=new Response();
    	response.setResponseStr("response");
    	
    	FilterChain fc=new FilterChain();
    	
    	fc.addFilter(new HTMLFilter()).addFilter(new SensitiveFilter()).
    	addFilter(new ReplaceFilter());
    	fc.doFilter(request, response,fc);
    	
    	System.out.println(request.getRequestStr());
    	System.out.println(response.getResponseStr());
    	
    }
}
//Filter接口
public interface Filter {
	//String doFilter(String str);
    void doFilter(Request request,Response response,FilterChain chain);
    
}
//实现Filter,把HTMLFilter、SensitiveFilter、ReplaceFilter放入责任链FilterChain
public class FilterChain implements Filter{
	List<Filter> filterlist=new ArrayList<Filter>();
	int index=0;
	public FilterChain addFilter(Filter f){
		this.filterlist.add(f);
		return this;
	}
	public void doFilter(Request request, Response response,FilterChain chain) {
	    if(index==filterlist.size())
		return;
		Filter f=filterlist.get(index);
		index++;
        f.doFilter(request, response, chain);
		
	}
//HTMLFilter
public class HTMLFilter implements Filter{
	public void doFilter(Request request, Response response,FilterChain chain) {
		request.requestStr=request.requestStr.replace('<','[').replace('>', ']')
				+"--HTML替换";
        chain.doFilter(request, response, chain);
		response.responseStr+="--HTMLFilter";
	}
}
//SensitiveFilter
public class SensitiveFilter implements Filter{
 @Override
	public void doFilter(Request request, Response response,FilterChain chain) {
		request.requestStr=request.requestStr.replace("被就业","就业").replace("敏感","")
				+"--sensitiveFilter替换";
		chain.doFilter(request, response, chain);
		response.responseStr+="--sensitiveFilter";
		
	}
}
//Request实体类
public class Request {
	String requestStr;
	public String getRequestStr() {
		return requestStr;
	}
	public void setRequestStr(String requestStr) {
		this.requestStr = requestStr;
	}
}
//Response实体类
public class Response {
	String responseStr;
	public String getResponseStr() {
		return responseStr;
	}
	public void setResponseStr(String responseStr) {
		this.responseStr = responseStr;
	}
}
//运行结果

 
                    
                     
                    
                 
                    
                 
         
