一、责任链模式的原理和作用
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;
}
}
//运行结果
