首页 > 其他分享 >过滤器链及责任链设计模式

过滤器链及责任链设计模式

时间:2023-05-29 11:02:41浏览次数:34  
标签:请求 处理 责任 对象 链及 Filter2 过滤器 设计模式

过滤器链:

在 Java Web 应用中,多个过滤器的执行顺序是有规定的,称之为过滤器链。按照过滤器链的规定,多个过滤器会按照它们在 web.xml 文件中配置的先后顺序依次执行。

具体来说,假设一个请求需要经过三个过滤器,分别为 Filter1、Filter2 和 Filter3,那么它们的执行顺序为:

  1. 客户端发送请求到服务器端,请求经过 Filter1。
  2. 如果 Filter1 给出了回应,则请求回复给客户端;否则请求经过 Filter2。
  3. 如果 Filter2 给出了回应,则请求回复给客户端;否则请求经过 Filter3。
  4. 如果 Filter3 给出了回应,则请求回复给客户端;否则请求继续向下执行。

因此,如果在 web.xml 文件中将 Filter1 配置在 Filter2 前面,则 Filter1 将先于 Filter2 执行。同样地,如果将 Filter3 配置在 Filter2 后面,则 Filter3 将后于 Filter2 执行。

除了 web.xml 文件中的配置,还可以使用注解来指定过滤器链的执行顺序。例如,在 Spring MVC 中,可以使用 @Order 注解来指定过滤器链中各个过滤器的执行顺序。

责任链:

责任链(Chain of Responsibility)是一种行为型设计模式,它可以将请求的发送者与接收者解耦。责任链中包含多个处理者对象,每个处理者对象都持有对下一个处理者对象的引用,形成一条链式结构。

当一个请求经过责任链时,会沿着链式结构依次传递给每个处理者对象进行处理,直到其中一个处理者对象成功地处理了该请求为止。如果整个责任链中的所有处理者对象都不能处理该请求,则该请求将被丢弃或返回一个默认值。

在实际应用中,责任链常用于以下场景:

  1. 处理请求需要多个对象协作完成,但是每个对象的职责不同。
  2. 需要动态地指定请求处理对象的顺序。
  3. 处理请求的对象集合可以动态生成或修改。
  4. 请求的处理结果不需要返回给发送者。

责任链模式的核心思想是:让请求的发送者和接收者通过一个中间对象来进行解耦。这样,请求发送者只需要向中间对象发送请求,而无需知道请求将由哪个具体对象来进行处理,并且中间对象也不需要知道具体的请求内容,只需要按照预定的规则来选择合适的对象进行处理即可。

总之,责任链模式可以使得不同的处理者对象之间松耦合,提高系统的灵活性和可维护性。同时,责任链模式也可以很好地扩展和修改系统的处理逻辑,因为它允许自由地增加、移除或替换处理者对象。

责任链和过滤器的关系:

 

责任链和过滤器是两种不同的设计模式,但在某些场景下可以相互协作来实现系统的功能。

 

责任链模式通常用于多个处理器对象对同一类型请求进行处理,每个处理器对象都能够完成请求的处理,但是它们的处理方式不尽相同,可能会需要按顺序执行或者需要某一个处理器来处理。责任链模式在该场景下可以非常好地解耦请求处理对象与具体业务处理逻辑。

 

而过滤器模式则通常用于在请求处理前或处理后进行某些额外的操作,例如身份验证、日志记录、字符编码转换等。过滤器可以拦截请求并决定是否向下一个过滤器传递请求,也可以直接处理请求并返回响应结果。

 

在 Java Web 应用中,过滤器通常被用来拦截 HTTP 请求并对其进行处理,例如对请求进行身份验证、字符编码转换或者请求响应的统一处理等。而在实现过滤器时,我们通常会使用责任链模式来组合多个过滤器对象,并将它们按照一定的顺序串联起来形成一个过滤器链。通过过滤器链,请求可以依次经过多个过滤器,并按照一定的规则进行处理,最终得到期望的结果。

 

因此,可以说责任链模式可以用来组织多个过滤器,使得它们按照一定的顺序进行处理,从而实现更灵活的请求处理机制。

 

本文总结自gpt的回复

标签:请求,处理,责任,对象,链及,Filter2,过滤器,设计模式
From: https://www.cnblogs.com/hangsingplus/p/17439833.html

相关文章

  • Flask010_自定义过滤器
    在模板中,通过过滤器实现对变量的处理。过滤器本质上是Python的函数,它会把被过滤器的值当作第1个参数传送给函数。自定义过滤器定义1defdatetime_format(value,format="%Y-%m-%d%H:%M"):2returnvalue.strftime(format)345app.add_template_filter(date......
  • MVVM 设计模式
    本篇文章学习于:刘铁猛老师《深入浅出WPF》什么是MVVM模式?MVVM的全称是——Model、View、ViewModel,翻译过来就是:模型、视图、视图模型。ViewModel是比较抽象的,它起到承上启下的作用,用于处理业务逻辑。每一个View都需要有对应的Model和ViewModel。ViewModel与View的沟通:A.传递......
  • 设计模式概述
    推荐文档:https://www.cnblogs.com/zhili/p/DesignPatternSummery.htmlhttps://www.runoob.com/design-pattern/design-pattern-tutorial.html为什么要使用设计模式?使用设计模式的根本原因是适应变化,为了增加代码复用率,是软件更具有维护性和可扩展性。设计原则单一职责原则......
  • 设计模式之备忘录(Memento)
    概述备忘录模式(MementoPattern),是行为型模式设计模式之一,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态。备忘录模式实现的方式需要保证被保存的对象状态不能被对象从外部访问,目的是为了保护被保存的这些对象状态的完整性以及内部实现不向外暴露,本篇博客,我们就来......
  • 设计模式-观察者模式(Observer)
    一、 观察者(Observer)模式观察者模式又叫做发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通......
  • 拦截器和过滤器区别
    转载:https://www.bilibili.com/video/BV1ro4y1F7Yg/?spm_id_from=333.1007.tianma.2-2-5.click&vd_source=46d50b5d646b50dcb2a208d3946b1598......
  • 设计模式-行为型设计模式
    责任链模式定义为请求创建一个接收此次请求的链适用场景一个请求的处理需要多个对象当中的一个或几个协作处理优点请求的发送者和接收者(请求的处理)解耦责任链可以动态组合缺点责任链太长或者处理时间过长,影响性能责任链有可能过多/**处理者--或者Approver*@author......
  • Simple Factory Pattern 简单工厂模式简介与 C# 示例【创建型】【设计模式来了】
     〇、简介1、什么是简单工厂模式?一句话解释:  客户类和工厂类严格分工,客户类只需知道怎么用,处理逻辑交给工厂类。简单工厂模式(SimpleFactoryPattern)是日常开发中常用的设计模式。其是一种简单的创建型模式,它通过一个工厂类来创建对象,客户端只需要知道如何使用工厂类,而不需......
  • day107-过滤器与监听器
    过滤器filter:过滤器用来过滤网站的数据处理中文乱码登陆验证......导入maven包<dependencies><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>3.1.0&......
  • Java设计模式-策略模式
    简介在软件开发中,设计模式是为了解决常见问题而提供的一套可重用的解决方案。策略模式(StrategyPattern)是其中一种常见的设计模式,它属于行为型模式。该模式的核心思想是将不同的算法封装成独立的策略类,使得它们可以相互替换,而不影响客户端的使用。策略模式与其他设计模式有一些......