分享

责任链或过滤器模式3-模拟tomcat的过滤器-马士兵设计模式教程 .

 CevenCheng 2013-08-15
  1. //过滤器接口  
  2. public interface Filter {  
  3.     public void doFilter(Request req,Response res,FilterChain c);  
  4. }  
  5.   
  6.   
  7. //HTML的过滤器  
  8. public class HTMLFilter implements Filter{  
  9.     @Override  
  10.     public void doFilter(Request req, Response res,FilterChain fc) {  
  11.         req.requestStr=req.requestStr.replace("<""[");  
  12.         req.requestStr=req.requestStr.replace(">""]")+"--HTMLFilter";  
  13.         fc.doFilter(req, res, fc);//在这里它会调用过滤链中的下一个filter  
  14.         //等整个过滤链处理完了之后也就是fc.doFilter(req, res, fc);这段  
  15.         //处理完了之后就会执行下面的方法了res.responseStr+="--HTMLFilter";  
  16.         //然后依次的过滤器都执行这列的这行代码,也就会变成了倒序执行  
  17.         res.responseStr+="--HTMLFilter";  
  18.     }  
  19. }  
  20.   
  21.   
  22. //敏感词的过滤器  
  23. public class SensitiveFilter implements Filter{  
  24.     @Override  
  25.     public void doFilter(Request req, Response res,FilterChain fc) {  
  26.         req.requestStr=req.requestStr.replace("敏感""mingan")+"--SensitiveFilter";  
  27.         fc.doFilter(req, res, fc);  
  28.         res.responseStr+="--SensitiveFilter";  
  29.     }  
  30. }  
  31.   
  32. //客户端传递的内容到服务器  
  33. //模拟javaweb中的request  
  34. public class Request {  
  35.     public String requestStr;  
  36. }  
  37.   
  38. //服务器反馈的内容到客户端  
  39. //模拟javaweb中的response  
  40. public class Response {  
  41.     public String responseStr;  
  42. }  
  43.   
  44. //过滤器链  
  45. public class FilterChain implements Filter{  
  46.     private List<Filter> list=new ArrayList<Filter>();  
  47.     public FilterChain addfilter(Filter filter){  
  48.         list.add(filter);  
  49.         return this;  
  50.     }  
  51.     int index=0;  
  52.     @Override  
  53.     public void doFilter(Request req, Response res,FilterChain fc) {  
  54.         if(index==list.size())return;  
  55.         Filter f=list.get(index);  
  56.         index++;  
  57.         //依次执行下一个过滤器,直到整个过滤器链执行完  
  58.         f.doFilter(req, res, fc);  
  59.     }  
  60. }<PRE class=java name="code">public class Client {  
  61.     /* 
  62.      * Request:客户端发送给服务端的信息 
  63.      * Response:服务端反馈给客户端的信息 
  64.      * 要实现的功能是:Request携带的信息所经过的过滤器 
  65.      * 要跟Response所携带的信息所经过的过滤器相反 
  66.      */  
  67.     public static void main(String[] args) {  
  68.         Request req=new Request();  
  69.         Response res=new Response();  
  70.         req.requestStr="这是我的一个敏感链接<a>优酷</a>";  
  71.         res.responseStr="response";  
  72.         FilterChain  fc=new FilterChain();  
  73.         fc.addfilter(new HTMLFilter());  
  74.           
  75.         FilterChain fc1=new FilterChain();  
  76.         fc1.addfilter(new SensitiveFilter());  
  77.         fc.addfilter(fc1);//在一个过滤链上面再加上一个过滤链  
  78.           
  79.         fc.doFilter(req, res,fc);  
  80.         System.out.println(req.requestStr);  
  81.         System.out.println(res.responseStr);  
  82.     }  
  83.     /** 
  84.      * 执行结果: 
  85.      * 这是我的一个mingan链接[a]优酷[/a]--HTMLFilter--SensitiveFilter 
  86.      * response--SensitiveFilter--HTMLFilter 
  87.      */  
  88. }</PRE>  
  89. <PRE></PRE>  

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多