`
zyq070
  • 浏览: 22512 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Servlet 过滤器对装饰者模式的使用

 
阅读更多

 

     所谓装饰者模式(decorator -pattern)动态的给对象添加职责。装饰者较被装饰者拥有更多的功能,且除本身的功能外还可以调用被装饰者的功能。

比较常见的例子是Java I/O 装饰者:


其中,各类的作用如下:

FileInputStream 作为被装饰者 提供了读取文件的基本操作

BufferedInputStream 作为装饰者,加入了额外两个功能:1 缓冲功能(改进读入大文件的性能)

2 readLine()方法(read one line per time)增强了读入的速率

LineNumberInputStream 也是个装饰者,通过名字我们能看出其增加了计算Line Number function

好了 ,有了对装饰者模式的初步认识了,Let’s go to the theme:

What is the Filter ?

Basely  Filter is a java component which used to :

1 Intercept the request coming from Client and process

2 intercept the response before arriving at Client

容器根据DD中的配置来判断Filterinvoke order 及请求的URL来具体要调用Filter

下面是一段过滤器的配置例子:

<filter>

     <filter-name>FilterRequest</filter-name>

     <filter-class>com.example.web.FilterRequest</filter-class>

     <init-param>

            <param-name>name<param-name/>

           <param-value>Bruce</param-value>

     </init-param>

</filter>

<filter-mapping>

<filter-name> FilterRequest </filter-name>

<url-pattern>/filter/*.do</url-pattern>

</filter-mapping>

过滤器还可以针对具体的servlet (假设已有FilterServletservlet)

<filter-mapping>

<filter-name> FilterRequest </filter-name>

<servlet-name>FilterServlet</servlet-name>

</filter-mapping>

过滤器类要实现位于javax.servlet 内的Filter类,像servlet一样过滤器也有生命周期:

  init() : 初始化

   doFilter() : 处理过滤操作

  destroy() : 删除Filter实例

看下doFilter(ServletRequest req, ServletResponse resp, FilterChain)方法

具体代码不说了,方法内利用FilterChain.doFilter(req,resp) 来完成过滤器的内联和回调。

ServletRequest 请求处理可以在该方法调用之前进行处理,那ServletResponse的处理呢?是否是在该方法调用后处理呢?

其实在在FilterChain.doFilter(req,resp)回调后 ServletResponse 已经返回客户端,再次处理已经没有意义。

此处的处理用到了装饰者类:

FilterChain.doFilter(req,resp)方法执行之前 ServletResponse 类进行包装:

CompressionResponseWrapper  wrapperResp = new  CompressionResponseWrapper(response);

CompressionResponseWrapper 是一个包装类 ,封装了对于response的操作

只有调用FilterChain.doFilter(req, wrapperResp)

可以参照下图:

 


  • 大小: 23.5 KB
  • 大小: 27.7 KB
分享到:
评论

相关推荐

    用装饰模式装饰HttpServletRequest对象

    通过这种方式,装饰模式使得在不修改HttpServletRequest本身的情况下,我们可以扩展其功能,解决了在Servlet过滤器中无法直接修改请求参数的问题。 总之,装饰模式在Servlet编程中提供了一种灵活的、非侵入式的扩展...

    javaweb过滤器

    ### JavaWeb过滤器详解 #### 过滤器概述 在JavaWeb开发中,过滤器扮演着极其重要的角色,它能够实现在请求到达目标资源(如...同时,结合装饰模式的应用也能让过滤器的功能更加灵活多变,满足不同场景下的需求。

    java过滤器中文乱码POST和GET

    主要解决表单提交中文乱码问题,主要针对页面GET提交的处理编码问题,设计知识 过滤器,servlet,装饰设计模式等

    责任链模式(Chain of Responsibility Pattern) 1. 责任链模式概述 1.1 定义 1.2 基本思想 2. 责任链模式的结构 3. 责任链模式的UML类图 4. 责任链模

    8.1 Servlet过滤器链 8.2 Spring MVC中的拦截器链 9. 责任链模式与其他设计模式的区别与联系 9.1 责任链模式与装饰器模式 9.2 责任链模式与组合模式 9.3 责任链模式与命令模式 10. 实战案例:ATM取款流程 11. 总结

    filter_filter_源码.zip

    这种模式遵循“装饰者”设计原则,使得我们可以动态地添加或移除过滤器,而不会影响到其他过滤器或者整体流程。 在Java Web开发中,Servlet规范定义了`javax.servlet.Filter`接口,它是实现过滤器的关键。这个接口...

    Java 企业设计模式

    在Java EE的过滤器链中,每个过滤器都可以处理请求或将其传递给下一个过滤器。 10. **状态模式**:状态模式允许对象在其内部状态改变时改变其行为。在处理业务流程中的不同状态(如订单状态、用户状态)时,状态...

    JAVA与模式J2EE模式Eclipse开发java企业设计模式.

    在J2EE的Servlet过滤器中,装饰器模式被广泛使用,用于在请求处理前后添加额外的功能。 7. **适配器模式**:它将不兼容的接口转换为可以使用的接口。在Java EE中,例如,适配器可以用来封装不同数据源,使它们能被...

    java 的研磨设计模式(模式)

    在Java的Servlet过滤器中可以看到责任链模式的运用。 12. 命令模式:将请求封装为一个对象,以便使用不同的请求、队列请求、或者支持可撤销的操作。Java Swing中的ActionListener接口就是一个命令模式的例子。 13....

    java实现装饰器模式(Decorator Pattern)

    Java 实现装饰器模式(Decorator Pattern) 装饰器模式是结构型设计模式之一,它允许向一个现有的对象添加新的功能,同时又...它广泛应用于软件开发中,例如在 Java 中的输入/输出流、Java Servlet API 中的过滤器等。

    java设计模式

    在Java中,可以使用装饰器模式或者组合模式实现过滤器。比如在Web开发中,Servlet Filter就是一种典型的过滤器模式应用,它在请求到达目标Servlet之前对其进行处理,如身份验证、日志记录等。 2. **观察者模式...

    23种设计模式的Java实现

    Java中的Servlet过滤器机制就是职责链模式的应用。 13. **命令模式**:将请求封装为一个对象,以便使用不同的请求、队列请求、或者支持可撤销的操作。Java的Swing和AWT事件模型采用了命令模式。 14. **解释器模式*...

    Java与模式.rar

    Java事件处理模型和Servlet过滤器就是责任链模式的应用。 10. **组合模式**:允许你将对象组织成树形结构来表现“部分-整体”的层次结构。在Java中,`java.awt.Container`和`java.awt.Component`类层次就体现了组合...

    123种JAVA设计模式和15种J2EE设计模式.pdf

    这种模式在Java的Web应用中非常常见,例如在Servlet过滤器(Filter)和Spring拦截器(Interceptor)中都可以看到该模式的应用。 文档还提到了在处理请求和响应过程中,需要对不同类型的请求执行不同的处理逻辑。这...

    j2ee的设计模式(最新版)

    5. **装饰器模式**:用于在不改变原有对象的基础上,动态地给对象添加新的功能,如在Servlet过滤器中,通过装饰器可以增加日志、安全检查等功能。 6. **适配器模式**:当需要将不同的接口或API集成在一起时,适配器...

    JAVA web模式设计之道.zip

    5. **装饰器模式**:Web应用中的权限控制和日志记录常常使用装饰器模式,它可以动态地给对象添加新的行为或责任,而不会破坏封装性。 6. **适配器模式**:在集成第三方库或服务时,适配器模式可以帮助将不兼容的...

    j2ee设计模式java程序

    在Java EE的过滤器或拦截器中,可以使用策略模式来选择不同的处理逻辑。 4. **装饰器模式**:Java EE的Servlet API广泛使用了装饰器模式,允许在不改变原有类的基础上动态添加功能。例如,HttpServlet、Filter和...

    Java与模式

    Java Servlet中的过滤器链(`FilterChain`)就是这一模式的典型应用。 这些设计模式是Java开发中不可或缺的知识点,掌握它们不仅有助于写出高质量的代码,还能提高团队之间的沟通效率,因为大家都遵循了共同的设计...

    JAVA设计模式.影印版

    Java Servlet的过滤器链就是责任链模式的一个例子。 13. **命令模式**:将请求封装为一个对象,以便使用不同的请求、队列请求、记录请求或支持撤销操作。Java Swing中的`ActionListener`接口就是一个命令模式的应用...

    jAVA的设计模式 java学习资料

    在J2EE中,如Servlet过滤器,它可以在不影响其他对象的情况下,为HTTP请求添加额外的功能。 7. **代理模式**:为其他对象提供一种代理以控制对这个对象的访问。在J2EE中,远程代理用于处理EJB的远程调用,而虚拟...

    JAVA设计模式

    Java Servlet的过滤器链就是一个很好的例子。 16. 迭代器模式(Iterator):迭代器模式提供一种方法顺序访问聚合对象的元素,而又不暴露其底层表示。Java集合框架中的`Iterator`接口和各种集合类实现了迭代器模式。...

Global site tag (gtag.js) - Google Analytics