看到strut2的Interceptor(拦截器),
tomcat源码的Valve(tomcat中各种各样容器如Wrapper,Context都是靠Valve实现各种功能),
以及最早学习到的java web中的javax.servlet.Filter的概念,
都是一种链式的处理流程,这一个环节处理完成,然后处理另一个环节,这样就可以在一个处理本身的之前和之后做一些事情了。
比如说,struts2中Action在执行之前会首先执行一些Interceptor,完成诸如权限验证/属性注入/Validation/国际化等等的功能,
我看过一个比较好的功能是,利用strut2的拦截器和*-Validation.xml文件以及标签(strut2标签,主要是form-close.ftl这个模板文件),自动生成页面的Form前端验证。(当然辅助的客户端js文件如jquery/jquery-validation也是需要的)。

以上的这些功能,通过一种名为责任链或者拦截器或者过滤器(语义上的区别而技术上没有什么区别,知道做了什么就行了)的设计模式可以实现,那么就来看看什么是责任链的设计模式。
以下内容参考北京尚学堂的马士兵老师的设计模式视频,在此感谢。

Filter的概念
引入FilterChain的概念
模仿马老师写的代码,

地址1:http://download.csdn.net/detail/hx888/6839619 (filter的单向过滤的简单实现)

地址2:http://download.csdn.net/detail/hx888/6949155 (模仿java web的filter实现双向过滤)
既处理从客户端到服务器的消息,又处理从服务器到客户端的消息,这样的过滤器该怎么设计呢?
首先,构造两个类,Request和Response,分别代表请求和响应,
其次,因为要满足首先执行Request的过滤然后执行Response的过滤以及正序执行Request的过滤和反序执行Response的过滤,所以在doFilter方法中加入FilterChain的引用,
这样可以依次先对Request进行下一个Filter的处理,然后反过来再处理Response的过滤。
模仿马老师写的代码,地址:

分析strut2中interceptorsStack(拦截器栈)
首先,执行action之前会按照顺序执行所有的interceptor,执行action之后返回一个结果字符串也会按照同之前相反的顺序执行所有的interceptor。
我觉得,首先,执行action之后的所有interceptor是必须执行的,且先于对action执行完之后返回的结果进行处理,并且是有严格顺序的。
至于是不是对action执行完之后返回的结果进行处理,以及处理顺序,看到到是次要的?

如果request请求不合乎一个拦截器的请求条件,如权限检查的拦截器,停止后续处理,如何实现?

转载于:https://www.cnblogs.com/wenwujuncheng/p/3515833.html

设计模式-拦截器模式相关推荐

  1. 代码精进之路-设计模式-拦截器链模式

    上一讲中说了<Tomcat的过滤器链 是如何实现的>,今天来看下 Spring的拦截器链是如何实现的. 从位置上来说 过滤器是属于Servlet容器级别的规范,拦截器是Spring自身的东 ...

  2. 设计模式之——拦截器模式

    拦截器模式应用非常广泛,适用场景一般在框架代码中的固定业务逻辑,这部分逻辑通常不会变化,比如:服务调用的拦截处理,拦截服务的参数,参数国际化处理,拦截服务的异常,记录服务的调用结果等等. 之所以要讲这 ...

  3. Python设计模式-装饰器模式

    Python设计模式-装饰器模式 代码基于3.5.2,代码如下; #coding:utf-8 #装饰器模式class Beverage():name = ""price = 0.0 ...

  4. Go 设计模式 - 装饰器模式

    装饰模式使用对象组合的方式动态改变或增加对象行为.Go语言借助于匿名组合和非入侵式接口可以很方便实现装饰模式.使用匿名组合,在装饰器中不必显式定义转调原对象方法. 设计模式 装饰器模式 装饰器模式主要 ...

  5. Java设计模式 -10- 装饰器模式(Decorator模式)

    Java设计模式 -10- 装饰器模式(Decorator模式) 前言 装饰器模式的定义与特点 优点: 缺点: 装饰器模式的结构与实现 1. 模式的结构 2. 模式的实现 装饰器模式的应用实例 装饰器 ...

  6. Spring设计模式(装饰器模式)

    Spring设计模式(装饰器模式) 模式的定义: 装饰者模式定义: ​ 动态地为一个对象添加一些额外的职责,若要扩展一个对象的功能,装饰者提供了比继承更有弹性的替代方案. 模式的结构图 : 模式包含角 ...

  7. Java设计模式-装饰器模式 理论代码相结合

    继Java设计模式适配器模式后的装饰器模式来啦,让我们一起看看吧. 会了就当复习丫,不会来一起来看看吧. 很喜欢一句话:"八小时内谋生活,八小时外谋发展". 如果你也喜欢,让我们一 ...

  8. 设计模式--装饰器模式

    装饰器模式 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装.简单来说,装饰器模式就是 ...

  9. PHP设计模式——装饰器模式

    声明:本系列博客参考资料<大话设计模式>,作者程杰. 装饰器模式又叫装饰者模式.装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装 ...

最新文章

  1. 正确认识Arrays.asList方法
  2. 模块化加载_前端模块化简单总结
  3. 光端机和收发器的区别有哪些?
  4. 干货:产品经理怎么做才能在需求评审中少挨打?
  5. Windows窗口样式
  6. 透视变换--图像拼接
  7. 编译Android源码相关资源及文章
  8. struts2实现XML异步交互
  9. 计算机组成原理 王道考研2021 第一章:计算机组成原理概述 -- 计算机的性能指标、机器字长
  10. 重构改善既有代码的设计思维导图
  11. ArcGIS教程:启用数据驱动页面
  12. ping服务器响应39ms,美国服务器的ping值多少网速才算快?
  13. 【PAT乙级】B1001-B1095刷题记录
  14. Vue实战篇三十五:实现滑动拼图验证登录
  15. ASP.NET搜索引擎
  16. 店铺DSR综合评分的计算维度,淘宝店铺评分结算标准
  17. 小米note刷android8.1,小米note安卓8.1.0刷机包
  18. unity 在移动平台中,文件操作路径详解
  19. 洛谷P2345 MooFest G
  20. matlab premnmx 逆函数,请帮我吧这些数据利用MATLAB premnmx语句进行归一化,高分跪求。...

热门文章

  1. android:windowSoftInputMode属性
  2. C++学习笔记第二天:几个知识点
  3. java.util.concurrent BlockingQueue详解
  4. ELK日志服务使用-kafka传输日志(bbotte.com)
  5. Tiles Framework
  6. 【应用笔记】【AN001】VC#开发环境下基于以太网的4-20mA电流采集(基于modbus tcp 协议)...
  7. 简单的OSPF多区配置
  8. “男儿有泪不轻弹”和“活着”
  9. 数值分析之数值稳定性篇
  10. 【No.3 Ionic】超级逗表情 App