简介

首先任务会先到消息处理器.
消息处理器调用doFilter方法,也就是处理链中的doFilter.
处理链的doFilter是循环调用它内部的一个个处理类.
处理类的doFilter是详细处理

接口
规范实现类
public interface Filter {String doFilter(String str);}
具体处理类
HtmlFilter
public class HtmlFilter implements Filter {@Overridepublic String doFilter(String str) {//处理特殊字符String replace = str.replace('<', '[').replace('>', ']');return replace;}}
SesitiveFilte
public class SesitiveFilte implements Filter {@Overridepublic String doFilter(String str) {//处理敏感字String r = str.replace("敏感", "**").replace("不好", "**");return r;}}
FaceFilter
public class FaceFilter implements Filter {@Overridepublic String doFilter(String str) {//处理特殊字符String replace = str.replace(':', '*');return replace;}}
责任链
public class FilterChain implements Filter {List<Filter> filters = new ArrayList<Filter>();//把责任添加进去public FilterChain addFilter(Filter f) {this.filters.add(f);return this;}@Overridepublic String doFilter(String str) {String r = str;//挨个调用每个filter的处理方法,一直在里面循环直到循环结束for (Filter filter : filters) {r = filter.doFilter(r);}return r;}}
消息处理程序
这个是启动责任链的程序
@Datapublic class MsgProcessor {//保存消息private String msg;//保存责任链FilterChain fc;public String process() {return fc.doFilter(msg);}}
主程序
String msg = "大家好:), <script>: 敏感词, 不好";//初始化消息处理器MsgProcessor mp = new MsgProcessor();//把要处理的消息添加进去mp.setMsg(msg);//初始化,责任链FilterChain fc = new FilterChain();//添加过滤器,链式调用fc.addFilter(new HtmlFilter()).addFilter(new SesitiveFilte());//添加子链,这个子责任链是挂到主责任链上面的FilterChain fc2 = new FilterChain();fc2.addFilter(new FaceFilter());//把子链添加到责任链中fc.addFilter(fc2);//把责任链添加到消息处理器中mp.setFc(fc);//进行消息处理String result = mp.process();System.out.println(result);
web中的责任链

Filter接口
public interface Filter {//给他请求类和响应类,他来调用责任链处理里面的void doFilter(Request request, Response response, FilterChain filterChain);}
具体处理
FaceFilter
public class FaceFilter implements Filter {@Overridepublic void doFilter(Request request, Response response, FilterChain filterChain) {//请求处理特殊字符String str = request.getRequestStr().replace(':', '*');request.setRequestStr(str);filterChain.doFilter(request, response, filterChain);//响应处理的String responseMsg = response.getResponseStr() + "---FaceFilter";response.setResponseStr(responseMsg);}}
HtmlFilter
public class HtmlFilter implements Filter {@Overridepublic void doFilter(Request request, Response response, FilterChain filterChain) {//请求处理特殊字符String str = request.getRequestStr().replace('<', '[').replace('>', ']');request.setRequestStr(str);filterChain.doFilter(request, response, filterChain);//响应处理的String responseMsg = response.getResponseStr() + "---HtmlFilter";response.setResponseStr(responseMsg);}}
SesitiveFilte
public class SesitiveFilte implements Filter {@Overridepublic void doFilter(Request request, Response response, FilterChain filterChain) {//请求处理特殊字符String str = request.getRequestStr().replace("敏感", "**").replace("不好", "**");request.setRequestStr(str);filterChain.doFilter(request, response, filterChain);//响应处理的String responseMsg = response.getResponseStr() + "---SesitiveFilte";response.setResponseStr(responseMsg);}}
责任链
public class FilterChain implements Filter {List<Filter> filters = new ArrayList<Filter>();//记录运行到那个filter上int index = 0;public FilterChain addFilter(Filter f) {this.filters.add(f);return this;}@Overridepublic void doFilter(Request request, Response response, FilterChain filterChain) {//没有filter了if (index == filters.size()) {return;}//取出filterFilter f = filters.get(index);index++;f.doFilter(request, response, filterChain);}}
消息处理程序
@Datapublic class MsgProcessor {//保存请求private Request request;//保存响应private Response response;//保存调用链private FilterChain filterChain;public void process() {//调用责任链处理filterChain.doFilter(this.getRequest(), this.getResponse(), this.getFilterChain());}}
主程序
//提前准备好请求和响应Request request = new Request();Response response = new Response();String msg = "大家好:), <script>: 敏感词, 不好";//请求需要处理的request.setRequestStr(msg);//响应需要处理的response.setResponseStr("abc---123");//初始化消息处理器MsgProcessor mp = new MsgProcessor();//把要处理的请求或者响应添加进去mp.setRequest(request);mp.setResponse(response);//初始化,责任链FilterChain fc = new FilterChain();//添加过滤器fc.addFilter(new HtmlFilter()).addFilter(new SesitiveFilte());//添加子链,这个子责任链是挂到主责任链上面的FilterChain fc2 = new FilterChain();fc2.addFilter(new FaceFilter());//把子链添加到责任链中fc.addFilter(fc2);//把责任链添加到消息处理器中mp.setFilterChain(fc);//进行消息处理mp.process();System.out.println(request.getRequestStr());System.out.println(response.getResponseStr());
