这里模仿的类似于Servlet里面的filter或者Struts2里面的拦截器实现原理
处理流程图
具体处理流程参考责任链(一)
下面只是针对责任链(一)的改变
Filter接口
package com.hfview.designMode.zerenlian.web;
public interface Filter {
String doFilter(Request req,Response res,FilterChain chain);
}
脚本处理实现类
package com.hfview.designMode.zerenlian.web;
public class HTMLFilter implements Filter {
public String doFilter(Request req, Response res,FilterChain chain) {
System.out.println("开始处理HTMLFilter 的request请求");
req.setStr(req.getStr().replace('<', '[')
.replace('>', ']'));
String result = chain.doFilter(req, res, chain);
System.out.println("开始处理HTMLFilter 的Response请求");
res.setStr(res.getStr()+"HTMLFilter");
return result;
}
}
敏感字符处理类
package com.hfview.designMode.zerenlian.web;
public class SesitiveFilter implements Filter {
public String doFilter(Request req, Response res,FilterChain chain) {
System.out.println("开始处理SesitiveFilter 的request请求");
req.setStr(req.getStr().replace("被就业", "就业")
.replace("敏感", ""));
String result = chain.doFilter(req, res, chain);
System.out.println("开始处理SesitiveFilter 的Response请求");
res.setStr(res.getStr()+"SesitiveFilter");
return result;
}
}
FilterChain
package com.hfview.designMode.zerenlian.web;
import java.util.LinkedList;
public class FilterChain implements Filter {
static LinkedList<Filter> filters =new LinkedList<Filter>();
public FilterChain addFilter(Filter f) {
filters.addLast(f);
return this;
}
public String doFilter(Request req, Response res,FilterChain chain) {
Filter f= filters.pollFirst();
if(f!=null){
return f.doFilter(req, res,chain);
}else{
return "success";
}
}
}
##参数 请求:Request ##
package com.hfview.designMode.zerenlian.web;
public class Request {
private String str;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
##参数 请求:Response ##
package com.hfview.designMode.zerenlian.web;
public class Response {
private String str;
public String getStr() {
return str;
}
public void setStr(String str) {
this.str = str;
}
}
##测试类 ##
package com.hfview.designMode.zerenlian.web;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
String msg = "大家好:),<script>,敏感,被就业,网络授课没感觉,因为看不见大家伙儿";
Response res =new Response();
res.setStr("123");
Request req =new Request();
req.setStr(msg);
FilterChain fc = new FilterChain();
fc.addFilter(new HTMLFilter()).addFilter(new SesitiveFilter());
fc.doFilter(req, res,fc);
System.out.println(req.getStr());
System.out.println(res.getStr());
}
}
截图结果
总结
这里其中就是利用LinkedList和递归调用 来模拟堆栈的过程,如果不清晰可以断点调试来观察