- 浏览: 787527 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
萨琳娜啊:
Java读源码之Netty深入剖析网盘地址:https://p ...
Netty源码学习-FileRegion -
飞天奔月:
写得有趣 ^_^
那一年你定义了一个接口 -
GoldRoger:
第二个方法很好
java-判断一个自然数是否是某个数的平方。当然不能使用开方运算 -
bylijinnan:
<script>alert("close ...
自己动手实现Java Validation -
paul920531:
39行有个bug:"int j=new Random ...
java-蓄水池抽样-要求从N个元素中随机的抽取k个元素,其中N无法确定
Intercepting Filter类似于职责链模式
有两种实现
其中一种是Filter之间没有联系,全部Filter都存放在FilterChain中,由FilterChain来有序或无序地把把所有Filter调用一遍。没有用到链表这种数据结构。示例如下:
另一种是一个Filter“持有”下一个Filter,下一个Filter的调用由上一个Filter决定。这其中就用到了链表这种数据结构。
有两种实现
其中一种是Filter之间没有联系,全部Filter都存放在FilterChain中,由FilterChain来有序或无序地把把所有Filter调用一遍。没有用到链表这种数据结构。示例如下:
package com.ljn.filter.custom; import java.util.ArrayList; import java.util.List; /** * 由FilterManager组织FilterChain,在FilterChain里面的filter顺序执行, * 各Filter之间没有交互 */ public class InterceptingFilterManager { interface Filter { void execute(String request, String response); } static class AuthenticationFilter implements Filter { @Override public void execute(String request, String response) { System.out.println("AuthenticationFilter"); } } static class DebugFilter implements Filter { @Override public void execute(String request, String response) { System.out.println("DebugFilter"); } } static class Target { public void execute(String request, String response) { System.out.println("Target"); } } static class FilterChain { private List<Filter> filters = new ArrayList<Filter>(); private Target target; public void addFilter(Filter filter) { filters.add(filter); } //顺序执行,各filter之间没有直接联系 public void execute(String request, String response) { for (Filter filter : filters) { filter.execute(request, response); } target.execute(request, response); } public void setTarget(Target target) { this.target = target; } } public static void main(String[] args) throws Exception { Target target = new Target(); Filter debugFilter = new DebugFilter(); Filter authenticationFilter = new AuthenticationFilter(); FilterChain chain = new FilterChain(); chain.addFilter(authenticationFilter); chain.addFilter(debugFilter); chain.setTarget(target); String req = null; String res = null; chain.execute(req, res); } }
另一种是一个Filter“持有”下一个Filter,下一个Filter的调用由上一个Filter决定。这其中就用到了链表这种数据结构。
package com.ljn.filter.custom; /** * 结合装饰模式,每个filter完成自己的处理后,显式调用下一个filter */ public class InterceptingFilterDecorator { interface Filter { void execute(String request, String response); } static class AuthenticationFilter implements Filter { private Filter next; public AuthenticationFilter(Filter next) { this.next = next; } @Override public void execute(String request, String response) { System.out.println("AuthenticationFilter"); next.execute(request, response); } } static class DebugFilter implements Filter { private Filter next; public DebugFilter(Filter next) { this.next = next; } @Override public void execute(String request, String response) { System.out.println("DebugFilter"); next.execute(request, response); } } static class Target implements Filter { @SuppressWarnings("unused") private Filter next; public Target() { this(null); } public Target(Filter next) { this.next = next; } @Override public void execute(String request, String response) { System.out.println("Target"); // next.execute(request, response); //last one, no need to call next } } public static void main(String[] args) throws Exception { Filter processor = new AuthenticationFilter( new DebugFilter( new Target())); String req = null; String res = null; processor.execute(req, res); } }
发表评论
-
自己动手实现Java Validation
2015-09-18 20:37 10140参数检查用得最多的是J ... -
BeanUtils.copyProperties使用笔记
2015-07-06 22:17 32638BeanUtils.copyProperties VS Pro ... -
Haproxy+Keepalived高可用双机单活
2015-01-06 17:37 6644我们的应用MyApp不支持集群,但要求双机单活(两台机器:ma ... -
返回null还是empty
2014-05-16 15:35 100第一个问题,函数是应当返回null还是长度为0的数组(或集合) ... -
返回null还是empty
2014-05-16 15:34 2331第一个问题,函数是应当返回null还是长度为0的数组(或集合) ... -
返回null还是empty
2014-05-16 15:34 152第一个问题,函数是应当返回null还是长度为0的数组(或集合) ... -
返回null还是empty
2014-05-16 15:34 114第一个问题,函数是应当返回null还是长度为0的数组(或集合) ... -
返回null还是empty
2014-05-16 15:33 100第一个问题,函数是应当返回null还是长度为0的数组(或集合) ... -
Spring源码学习-JdbcTemplate queryForObject
2014-05-09 19:45 3071JdbcTemplate中有两个可能会混淆的queryForO ... -
Spring源码学习-JdbcTemplate batchUpdate批量操作
2014-05-07 16:21 18859Spring JdbcTemplate的batch操作最后还是 ... -
Spring源码学习-PropertyPlaceholderHelper
2014-04-25 18:47 2642今天在看Spring 3.0.0.RELEASE的源码,发现P ... -
CAS实现单点登录(SSO)
2013-07-29 18:08 1491参考以下两篇文章,对原作者表示感谢: http://blog. ... -
《重构,改善现有代码的设计》第八章 Duplicate Observed Data
2012-12-04 20:34 1527import java.awt.Color; impor ... -
读《研磨设计模式》-代码笔记-状态模式-State
2012-10-07 16:56 1414声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移 ... -
读《研磨设计模式》-代码笔记-访问者模式-Visitor
2012-10-06 23:43 1084声明: 本文只为方便我 ... -
读《研磨设计模式》-代码笔记-命令模式-Command
2012-10-06 23:40 1224声明: 本文只为方便我 ... -
读《研磨设计模式》-代码笔记-适配器模式-Adapter
2012-09-26 00:23 1416声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移 ... -
读《研磨设计模式》-代码笔记-外观模式-Facade
2012-09-25 23:46 1047声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移 ... -
读《研磨设计模式》-代码笔记-解释器模式-Interpret
2012-09-23 23:55 1236声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移 ... -
读《研磨设计模式》-代码笔记-备忘录模式-Memento
2012-09-23 00:05 1746声明: 本文只为方便我个人查阅和理解,详细的分析以及源代码请移 ...
相关推荐
"J2EE设计模式精解"着重讨论了如何利用这些模式来构建健壮的、可扩展的Web应用程序。在给定的部分内容中,我们关注的是"拦截过滤器"(Intercepting Filter)模式,这是Core J2EE Patterns中的一个重要概念。 **拦截...
在J2EE设计模式部分,文档提到的是Intercepting Filter模式,这是一种在Web应用中处理请求和响应的架构模式。它允许开发者对客户端的请求和响应进行预处理和后处理,满足安全性、性能和其他的业务逻辑需求。文档描述...
用Java实现23种设计模式 1. 创建型模式 工厂模式(Factory Pattern) 抽象工厂模式(Abstract Factory Pattern) 单例模式(Singleton Pattern) 建造者模式(Builder Pattern) 原型模式(Prototype Pattern)...
标题《Core J2EE Patterns Best Practices And Design Strategies》和描述部分介绍了软件设计模式的重要性,将设计模式比喻为一个组织的“部落记忆”的有形体现。设计模式是解决常见问题的通用解决方案,它源自之前...
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。 工厂模式(Factory Pattern) 抽象工厂模式...
- 拦截过滤器(Intercepting Filter):用于在请求达到目标组件之前进行预处理。 - 前台控制器(Front Controller):作为所有请求的入口点,统一处理流程。 - 环境对象(Environment Object):提供对系统环境...
它通过一套经过验证的设计模式,为开发者提供了处理特定问题的标准化方案,从而大大提高了软件开发的效率和质量。 ### 模式与OOAD 面向对象分析与设计(OOAD)是J2EE模式的重要基石。OOAD不仅提供了一种统一的语言...
J2EE 模式是一系列专门针对 Java EE 应用程序的设计模式。 #### MVC 模式(MVC Pattern) 模型-视图-控制器(Model-View-Controller)模式将应用程序分为三个基本部分:模型、视图和控制器。这种模式有助于分离...
### Core J2EE Patterns:拦截过滤器模式 (Intercepting Filter) #### 背景与情境 在J2EE环境中,请求处理机制需要处理多种类型的客户端请求,这些请求可能涉及不同的处理逻辑。例如,某些请求可能直接转发到相应...