【问题标题】:Difference between Interceptors and Filters - Is this right?拦截器和过滤器之间的区别 - 这是对的吗?
【发布时间】:2012-04-20 21:31:09
【问题描述】:

我正在对此进行研究,以便在采访中做出更好的回应。我一直在寻找一个清晰简洁的答案。

到目前为止,如果我错了或缺少细节,请务必纠正我:

  1. 过滤器是 Servlet API 的一部分,拦截器是 Struts 2。(虽然看起来很明显)
  2. 拦截器堆栈会触发已配置包中的请求,而过滤器仅适用于其映射的 URL。
  3. 可以通过 excludeMethods 和 includeMethods 将拦截器配置为根据特定目标操作方法执行或不执行,而过滤器缺少此功能。
  4. 过滤器是拦截过滤器模式的实现,而拦截器是拦截器模式的实现。

这似乎是一个准确而完整的答案吗?我应该添加或更正任何内容吗?线程问题/差异呢?

【问题讨论】:

    标签: struts2 struts


    【解决方案1】:

    我认为第一点就是答案,但你应该能说的不仅仅是

    拦截器在 struts 2 中,过滤器是 Servlet API 的一部分

    事实上,作为一名面试官,我期待并希望在这里您能准确解释 Servelt API 和 Web 应用程序框架(如 Struts 2)之间的区别。这实际上是一个展示您对整个 Java Web 应用生态系统和基础架构的理解的机会。

    好的答案可能会涉及:

    1. 如何在 Servlet 过滤器中实现 Struts 2 框架。

    2. 在哪些特定用例中需要 servlet 过滤器 struts 2 但在同一个 Web 应用程序中?

    3. 什么是 Servlet API,一个 Web 应用程序,一个 Web 应用程序 框架之类的?

    我猜想,以显示您对所有这些主题的理解的方式回答就是那里所寻找的。

    【讨论】:

    • 我想听听您发布的上述 3 个问题的答案吗?
    • @Harshana 我建议您将它们作为独立问题提出。在这个问题中回答它们将是一种令人困惑的格式。
    【解决方案2】:

    过滤器来自 Servlet API,拦截器来自 Struts 2, 当我们谈论 Web 应用程序和企业应用程序时,区别就来了, 过滤器仅用于 Web 应用程序,而拦截器可用于 Web 以及企业应用程序。 两者的生命周期方法,也不同。

    拦截器堆栈在每个请求上触发。 过滤器仅适用于为其定义的 url。 您可以根据需要使用其中一种。假设您需要验证每个请求是否存在 cookie。使用拦截器。假设您需要在某些请求(由 url 驱动)上弹出一个外部应用程序,使用过滤器。

    【讨论】:

    • "过滤器仅用于 Web 应用程序,而拦截器可用于 Web 和企业应用程序"?这是误导; “企业应用程序”没有什么神奇之处,它们只是所有网络应用程序的一个子集。过滤器也可以很容易地应用于所有 URL,所以这不是实质性的区别。
    【解决方案3】:

    在一次采访中,我回答了这样的问题,

    拦截器是 struts2 的概念,应用程序开发人员可以控制它。此外,它与 struts2 应用程序边界一起工作,并且可以访问 Actions、ValueStack 和其他对象以及 Struts2 的好东西。

    虽然过滤器更适合部署时间配置。它对应用程序的访问权限有限,并且在大多数情况下,它对于部署在服务器中的大多数 Web 应用程序都是通用的。

    如果代码中的逻辑与Application耦合度更高,则更适合拦截器,否则如果其基础设施,我们可以将其放在servlet过滤器中。

    【讨论】:

      【解决方案4】:

      过滤器:

      1. 基于 Servlet 规范
      2. 对请求的模式匹配执行。
      3. 不可配置的方法调用。

      拦截器:

      1. 基于 Struts2。
      2. 为所有符合前端控制器条件的请求执行(一个 Servlet 过滤器)。并且可以配置执行额外的 特定操作执行的拦截器。
      3. 拦截器中的方法可以配置是执行还是 不是通过excludeMethodsincludeMethods

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-17
        • 1970-01-01
        • 2019-07-18
        • 2016-06-12
        • 2011-04-24
        • 2014-06-16
        • 1970-01-01
        相关资源
        最近更新 更多