责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织和分配责任。

纯的与不纯的责任链模式

  一个纯的责任链模式要求一个具体的处理者对象只能在两个行为中选择一个:一是承担责任,而是把责任推给下家。不允许出现某一个具体处理者对象在承担了一部分责任后又 把责任向下传的情况。

  在一个纯的责任链模式里面,一个请求必须被某一个处理者对象所接收;在一个不纯的责任链模式里面,一个请求可以最终不被任何接收端对象所接收。

  纯的责任链模式的实际例子很难找到,一般看到的例子均是不纯的责任链模式的实现。有些人认为不纯的责任链根本不是责任链模式,这也许是有道理的。但是在实际的系统里,纯的责任链很难找到。如果坚持责任链不纯便不是责任链模式,那么责任链模式便不会有太大意义了。

责任链模式在Tomcat中的应用

  众所周知Tomcat中的Filter就是使用了责任链模式,创建一个Filter除了要在web.xml文件中做相应配置外,还需要实现javax.servlet.Filter接口。

public class TestFilter implements Filter{

    public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException { chain.doFilter(request, response);
} public void destroy() {
} public void init(FilterConfig filterConfig) throws ServletException {
} }

  使用DEBUG模式所看到的结果如下

aaarticlea/png;base64,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" alt="" />

  其实在真正执行到TestFilter类之前,会经过很多Tomcat内部的类。顺带提一下其实Tomcat的容器设置也是责任链模式,注意被红色方框所圈中的类,从Engine到Host再到Context一直到Wrapper都是通过一个链传递请求。被绿色方框所圈中的地方有一个名为ApplicationFilterChain的类,ApplicationFilterChain类所扮演的就是抽象处理者角色,而具体处理者角色由各个Filter扮演。

  第一个疑问是ApplicationFilterChain将所有的Filter存放在哪里?

  答案是保存在ApplicationFilterChain类中的一个ApplicationFilterConfig对象的数组中。

那ApplicationFilterConfig对象又是什么呢?

    ApplicationFilterConfig是一个Filter容器。

当一个web应用首次启动时ApplicationFilterConfig会自动实例化,它会从该web应用的web.xml文件中读取配置的Filter的信息,然后装进该容器。

  刚刚看到在ApplicationFilterChain类中所创建的ApplicationFilterConfig数组长度为零,那它是在什么时候被重新赋值的呢?

    private ApplicationFilterConfig[] filters =
new ApplicationFilterConfig[0];

  是在调用ApplicationFilterChain类的addFilter()方法时。

 变量n用来记录当前过滤器链里面拥有的过滤器数目,默认情况下n等于0,ApplicationFilterConfig对象数组的长度也等于0,所以当第一次调用addFilter()方法时,if (n == filters.length)的条件成立,ApplicationFilterConfig数组长度被改变。之后filters[n++] = filterConfig;将变量filterConfig放入ApplicationFilterConfig数组中并将当前过滤器链里面拥有的过滤器数目+1。

  那ApplicationFilterChain的addFilter()方法又是在什么地方被调用的呢?

  是在ApplicationFilterFactory类的createFilterChain()方法中。

可以将如上代码分为两段,51行之前为第一段,51行之后为第二段。

  第一段的主要目的是创建ApplicationFilterChain对象以及一些参数设置。

  第二段的主要目的是从上下文中获取所有Filter信息,之后使用for循环遍历并调用filterChain.addFilter(filterConfig);将filterConfig放入ApplicationFilterChain对象的ApplicationFilterConfig数组中。

  那ApplicationFilterFactory类的createFilterChain()方法又是在什么地方被调用的呢?

  是在StandardWrapperValue类的invoke()方法中被调用的。

  aaarticlea/png;base64,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" alt="" />

 那正常的流程应该是这样的:

  在StandardWrapperValue类的invoke()方法中调用ApplicationFilterChai类的createFilterChain()方法———>在ApplicationFilterChai类的createFilterChain()方法中调用ApplicationFilterChain类的addFilter()方法———>在ApplicationFilterChain类的addFilter()方法中给ApplicationFilterConfig数组赋值。

aaarticlea/png;base64,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" alt="" />

  根据上面的代码可以看出StandardWrapperValue类的invoke()方法在执行完createFilterChain()方法后,会继续执行ApplicationFilterChain类的doFilter()方法,然后在doFilter()方法中会调用internalDoFilter()方法。

这里的filter.doFilter(request, response, this);就是调用我们前面创建的TestFilter中的doFilter()方法。而TestFilter中的doFilter()方法会继续调用chain.doFilter(request, response);方法,而这个chain其实就是ApplicationFilterChain,所以调用过程又回到了上面调用dofilter和调用internalDoFilter方法,这样执行直到里面的过滤器全部执行。

  由于invoke()方法较长,所以将很多地方省略。

java设计模式之责任链模式以及在java中作用的更多相关文章

  1. 详解java设计模式之责任链模式

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt175 从击鼓传花谈起 击鼓传花是一种热闹而又紧张的饮酒游戏.在酒宴上宾客依次 ...

  2. Java设计模式之责任链模式、职责链模式

    本文继续介绍23种设计模式系列之职责链模式.   什么是链 1.链是一系列节点的集合. 2..链的各节点可灵活拆分再重组.   职责链模式 使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间 ...

  3. JAVA设计模式之责任链模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述责任链(Chain of Responsibility)模式的: 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其 ...

  4. Java设计模式之八 ----- 责任链模式和命令模式

    前言 在上一篇中我们学习了结构型模式的享元模式和代理模式.本篇则来学习下行为型模式的两个模式, 责任链模式(Chain of Responsibility Pattern)和命令模式(Command ...

  5. Java设计模式应用——责任链模式

    生产一个产品,需要依次执行多个步骤,才能完成,那么是使用责任链模式则是极好的. 在性能告警模块开发过程中,创建一条告警规则需要执行阈值解析,中间表生成,流任务生成,规则入库,告警事件入库等诸多操作.如 ...

  6. java设计模式之责任链模式(Chain of Responsibility)

    转自:http://www.cnblogs.com/java-my-life/archive/2012/05/28/2516865.html 在阎宏博士的<JAVA与模式>一书中开头是这样 ...

  7. 击鼓传花联想到了Java设计模式:责任链模式

    目录 应用场景 简单示例 责任链模式 定义 意图 主要解决问题 何时使用 优缺点 击鼓传花的故事 应用场景 http web请求处理,请求过来后将经过转码.解析.参数封装.鉴权等一系列的处理(责任), ...

  8. Java设计模式---ChainOfResponsibility责任链模式

    参考于 : 大话设计模式 马士兵设计模式视频 代码参考于马士兵设计模式视频 写在开头:职责链模式:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系 图来自大话设计模式,下面我的代 ...

  9. 【java设计模式】责任链模式

    可以随时添加过滤器,并在主方法中添加删除: Main package com.tn.filter; public class Main { public static void main(String ...

随机推荐

  1. mycat常用的分片规则

    一.枚举法<tableRule name="sharding-by-intfile">    <rule>      <columns>user ...

  2. 混合应用开发:Phonegap VS AppCan

    混合应用开发:Phonegap VS AppCan 简介 Phonegap PhoneGap是一个用基于HTML,CSS和JavaScript的,创建移动跨平台移动应用程序的快速开发平台.它使开发者能 ...

  3. Vue+Electron实现简单桌面应用

    之前一直使用C#编写桌面应用,也顺带写一些Web端应用.最近在看node时发现常用的vscode是用electron编写的,一种想吃螃蟹的念头就涌了上来. 在网上找了找electron的资料,也研究了 ...

  4. SAC E#1 - 一道难题 Tree(树形DP)

    题目背景 冴月麟和魏潇承是好朋友. 题目描述 冴月麟为了守护幻想乡,而制造了幻想乡的倒影,将真实的幻想乡封印了.任何人都无法进入真实的幻想乡了,但是她给前来救她的魏潇承留了一个线索. 她设置了一棵树( ...

  5. poj 2553 The Bottom of a Graph : tarjan O(n) 存环中的点

    /** problem: http://poj.org/problem?id=2553 将所有出度为0环中的点排序输出即可. **/ #include<stdio.h> #include& ...

  6. web前端逻辑计算,血的教训

    在web前端进行页面开发的过程中,难免的遇到逻辑问题,这不是什么大问题,既然走上IT条黑道,那小伙伴们的逻辑推理能力及逻辑计算能力是不会有太大问题的. 然而,有的逻辑计算,就算你逻辑计算能力超强,也不 ...

  7. react初学

    react和vue一样都是mvvm的这种开发模式. 下载js文件 引入HTML文件里 <!DOCTYPE html> <html> <head> <scrip ...

  8. 为什么我用了$().height()还是对不齐呢?

    有一个这样的需求:有两个显示内容的框,要使他们高度一致,因为他们存放的内容多少和结构不一样,左边内容少,右边内容多.这就导致了右边会比左边高,解决方法就是超出部分用滚轮显示,那这时就先要调整右边的高度 ...

  9. npm 如何提升最新版本

    首先我们查看一下npm当前版本,打开cmd 运行命令: npm -v 如果不是最新版本,运行一下代码即可. npm install -g npm 这样npm就更新到最新版本了. 如果想更新到指定版本, ...

  10. 阅读《大型网站技术架构》,并结合"重大需求征集系统"有感

    今天阅读了<大型网站技术架构:核心原理与案例分析>的第五.六.七章.这三张主要是讲述了一个系统的可用性.伸缩性和可扩展性.而根据文中所讲述的,一个系统的可用性主要是体现在这个系统的系统服务 ...