Struts2拦截器是否实施了责任链?

时间:2011-12-13 17:52:12

标签: design-patterns struts2

我可以说Struts 2拦截器可能是Chain of responsibility的典型示例吗?

servlet调度程序发送请求和一系列拦截器在执行操作的过程中处理请求。请求可以通过所有拦截器,或者在某些时候它会打破链。

2 个答案:

答案 0 :(得分:3)

我说这取决于你的定义。

从某种意义上讲,它是一个责任链,每个拦截器都可以查看请求及其最终处理程序,修改,短路或修改请求处理。

这并不意味着拦截器不是请求的预期目的地 - 动作是(实现命令模式)。

我认为Struts 1.3符合更常规的CoR定义,但更多的是术语问题。 S1.3命令仍然围绕准备请求 - 它是旧的单片请求处理器的灵活实现。

是的,不是。或者也许。

答案 1 :(得分:1)

我对此表示怀疑。对我来说,“责任链”模式意味着候选处理程序的层次结构,使得其中一个处理(和“消耗”)对象/命令或将其委托给“上级”。相比之下,struts2拦截器链不是分层的(顺序可能很重要,但这就是全部),并且通常每个拦截器都会执行某些操作(更类似于“装饰”或“观察”而不是“处理”)并将它传递给以下拦截器。一个不说“拦截器X已经处理了请求”,真正的处理程序是struts2 Action。

从概念上讲,Struts2拦截器与2.3 Servlets API中的过滤器非常相似。而且我认为过滤器也不符合“责任链”模式。