13

我正在研究这个,以便我可以在面试中做出更好的回应。我一直在寻找一个清晰简洁的答案。

到目前为止,如果我错了或缺乏细节,一定要纠正我:

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

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

4

4 回答 4

5

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

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

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

好的答案可能会涉及:

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

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

  3. Servlet API、Web 应用程序、Web 应用程序框架等到底是什么?

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

于 2012-04-09T20:29:05.880 回答
3

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

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

于 2014-02-20T11:35:24.333 回答
1

在一次采访中,我回答了这个问题,例如,

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

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

如果代码中的逻辑与应用程序耦合度更高,它更适合拦截器,或者如果它的基础设施,我们可以将它放在 servlet 过滤器中。

于 2012-04-11T16:59:17.570 回答
0

过滤器:

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

拦截器:

  1. 基于Struts2。
  2. 执行所有符合前端控制器(Servlet 过滤器)的请求。并且可以配置为执行特定操作的附加拦截器。
  3. excludeMethods拦截器中的方法可以通过或来配置是否执行includeMethods
于 2016-09-28T02:43:24.930 回答