一、目标

1.用Filter模拟处理Request、Response

2.思路细节技巧:

(1)Filter的doFilter方法改为doFilter(Request,Resopnse,FilterChain),有FilterChain引用,为利用FilterChain调用下一个Filter做准备

(2)FilterChain继承Filter,这样,FilterChain既是FilterChain又是Filter,那么FilterChain就可以调用Filter的方法doFilter(Request,Resopnse,FilterChain)

(3)FilterChain的doFilter(Request,Resopnse,FilterChain)中,有index标记了执行到第几个Filter,当所有Filter执行完后request处理后,就会return,以倒序继续执行response处理

二、代码

1.Filter.java

2.HTMLFilter.java

3.SensitiveFilter.java

4.FilterChian.java

5.Request.java

6.Response.java

7.Test.java

1.Filter.java

  1. public interface Filter {
  2. public void doFilter(Request request, Response response, FilterChain filterChain);
  3. }

2.HTMLFilter.java

  1. public class HTMLFilter implements Filter {
  2.  
  3. @Override
  4. public void doFilter(Request request, Response response,
  5. FilterChain filterChain) {
  6. request.setRequestStr(request.getRequestStr().replace('<', '[').replace(">", "]")+"---HTMLFilter()");
  7. filterChain.doFilter(request, response, filterChain);
  8. response.setResponseStr(response.getResponseStr()+"---HTMLFilter()");
  9. }
  10.  
  11. }

3.SensitiveFilter.java

  1. public class SensitiveFilter implements Filter {
  2.  
  3. @Override
  4. public void doFilter(Request request, Response response,
  5. FilterChain filterChain) {
  6. request.setRequestStr(request.getRequestStr().replace("敏感", "幸福")+"---SensitiveFilter()");
  7. filterChain.doFilter(request, response, filterChain);
  8. response.setResponseStr(response.getResponseStr()+"---SensitiveFilter()");
  9. }
  10.  
  11. }

4.FilterChian.java

  1. public class FilterChain implements Filter {
  2.  
  3. private List<Filter> filters = new ArrayList<Filter>();
  4. int index = 0; //标记执行到第几个filter
  5.  
  6. //把函数的返回值设为FilterChain,返回this,就能方便链式编写代码
  7. public FilterChain addFilter(Filter filter) {
  8. filters.add(filter);
  9. return this;
  10. }
  11.  
  12. public void doFilter(Request request, Response response, FilterChain fc) {
  13. if(index == filters.size()) return ;
  14. Filter f = filters.get(index);
  15. index++;
  16. f.doFilter(request, response, fc);
  17. }
  18.  
  19. }

5.Request.java

  1. public class Request {
  2.  
  3. private String requestStr;
  4.  
  5. public String getRequestStr() {
  6. return requestStr;
  7. }
  8.  
  9. public void setRequestStr(String requestStr) {
  10. this.requestStr = requestStr;
  11. }
  12.  
  13. }

6.Response.java

  1. public class Response {
  2.  
  3. private String responseStr;
  4.  
  5. public String getResponseStr() {
  6. return responseStr;
  7. }
  8.  
  9. public void setResponseStr(String responseStr) {
  10. this.responseStr = responseStr;
  11. }
  12.  
  13. }

7.Test.java

  1. public class Test {
  2.  
  3. @org.junit.Test
  4. public void testFilter(){
  5.  
  6. String msg = "<html>敏感字眼</html>";
  7.  
  8. Request request = new Request();
  9. request.setRequestStr(msg);
  10. Response response = new Response();
  11. response.setResponseStr("response------------");
  12.  
  13. FilterChain fc = new FilterChain();
  14. fc.addFilter(new HTMLFilter()).addFilter(new SensitiveFilter());
  15.  
  16. fc.doFilter(request, response, fc);
  17. System.out.println(request.getRequestStr());
  18. System.out.println(response.getResponseStr());
  19.  
  20. }
  21.  
  22. }

三、执行结果

Java-马士兵设计模式学习笔记-责任链模式-模拟处理Reques Response的更多相关文章

  1. Java-马士兵设计模式学习笔记-责任链模式-FilterChain功能

    一.目标 增加filterchain功能 二.代码 1.Filter.java public interface Filter { public String doFilter(String str) ...

  2. Java-马士兵设计模式学习笔记-责任链模式-处理数据

    一.目标 数据提交前做各种处理 二.代码 1.MsgProcessor.java public class MsgProcessor { private List<Filter> filt ...

  3. Java设计模式学习记录-责任链模式

    前言 已经把五个创建型设计模式和七个结构型设计模式介绍完了,从这篇开始要介绍行为型设计模式了,第一个要介绍的行为型设计模式就是责任链模式(又称职责链模式). 责任链模式 概念介绍 责任链模式是为了避免 ...

  4. 学习笔记——责任链模式ChainOfResponsibility

    责任链模式,主要是通过自己记录一个后继者来判断当前的处理情况.Handler中,再增加一个方法用于设置后继对象,如SetHandler(Handler obj). 然后Handler类以其子类的处理方 ...

  5. 设计模式学习之责任链模式(Chain of Responsibility,行为型模式)(22)

    参考:http://www.cnblogs.com/zhili/p/ChainOfResponsibity.html 一.引言 在现实生活中,有很多请求并不是一个人说了就算的,例如面试时的工资,低于1 ...

  6. Java-马士兵设计模式学习笔记-装饰者模式

    Java装饰者模式简介 一.假设有一个Worker接口,它有一个doSomething方法,Plumber和Carpenter都实现了Worker接口,代码及关系如下: 1.Worker.java p ...

  7. Java-马士兵设计模式学习笔记-总结

    <马士兵设计模式学习>学习了以下模式: 1.装饰者模式(例子:水管工,木工) 2.策略模式(例子:老师用职称比大小.学生用成绩比大小) 3.简单工厂模式(例子:VechileFactory ...

  8. 编写计算器程序学习JS责任链模式

    设计模式中的责任链模式能够很好的处理程序过程的逻辑判断,提高程序可读性. 责任链模式的核心在于责任链上的元素判断能够处理该数据,不能处理的话直接交给它的后继者. 计算器的基本样式: 通过div+css ...

  9. Python使用设计模式中的责任链模式与迭代器模式的示例

    Python使用设计模式中的责任链模式与迭代器模式的示例 这篇文章主要介绍了Python使用设计模式中的责任链模式与迭代器模式的示例,责任链模式与迭代器模式都可以被看作为行为型的设计模式,需要的朋友可 ...

随机推荐

  1. 基础语法 swift

    强类型语言:每句代码可以不用分号分隔:大小写敏感: 变量声明: var a = 0 常量声明 let b = 3.14 常量不能+变量?a+b 类型标注 var s :String 打印 pringl ...

  2. [转]反向代理过程与Nginx特点详解

    原文链接:<Nginx搭建反向代理服务器过程详解> 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内 ...

  3. Mac下的常用Shell命令

    今天介绍一下在Mac的终端中一些常用的Shell命令: 1.查看当前工作目录的完整路径 pwd (pwd的原意是:print work directiory,而不是密码password的意思,呵呵) ...

  4. C#开源大全--汇总(转)

    商业协作和项目管理平台-TeamLab 网络视频会议软件-VMukti 驰骋工作流程引擎-ccflow [免费]正则表达式测试工具-Regex-Tester Windows-Phone-7-SDK E ...

  5. 不会JS中的OOP,你也太菜了吧!(第二篇)

    一.你必须知道的 1> 原型及原型链在继承中起到了关键的作用.所以你一定要理解他们.2> 不会JS中的OOP,你也太菜了吧!(第一篇) 二.继承的6种方法 1> 原型链继承 原型链继 ...

  6. Linux嵌入式系统与硬件平台的关系

    一. Linux嵌入式系统 操作系统是一种在计算机上运行的软件,它的主要任务是管理计算机上的系统资源,为用户提供使用计算机及其外部设备的接口.它存在的目的是为了管理所有硬件资源,并且提供应用软件一个合 ...

  7. C++ Template之类模版

    类模版的定义和声明都和函数模版类似: 代码如下: template <typename T> class Stack { public: void push(const T&); ...

  8. HDU 2196 求树上所有点能到达的最远距离

    其实我不是想做这道题的...只是今天考试考了一道类似的题...然后我挂了... 但是乱搞一下还是有80分....可惜没想到正解啊! 所以今天的考试题是: 巡访 (path.pas/c/cpp) Cha ...

  9. Leetcode#166 Fraction to Recurring Decimal

    原题地址 计算循环小数 先把负数转化成正数,然后计算,最后添加符号 当被除数重复出现的时候,说明开始循环了,所以用一个map保存所有遇到的被除数 需要考虑溢出问题,这也是本题最恶心的地方,看看通过率吧 ...

  10. mysql查看连接数和状态,设置连接数和超时时间

    1.mysql> show status like '%connect%'; Connections,试图连接到(不管是否成功)MySQL服务器的连接数.   Max_used_connecti ...