拦截器和滤波器之间的区别 - 这是对的吗?

时间:2012-04-07 19:07:58

标签: struts2 struts

我正在研究这个问题,这样我才能在面试中做出更好的回应。我一直在寻找清晰简洁的答案。

到目前为止,如果我错了或缺乏详细信息,请务必纠正我:

  1. 过滤器是Servlet API的一部分,拦截器是Struts 2.(虽然看起来很明显)
  2. Interceptor堆栈会触发已配置包中的请求,而过滤器仅适用于其映射的URL。
  3. 拦截器可以配置为执行与否,具体取决于具体的目标操作方法,通过excludeMethods和includeMethods,而过滤器缺少此功能。
  4. 过滤器是拦截过滤器模式的实现,而拦截器是拦截器模式。
  5. 这看起来像是一个准确而完整的答案吗?我应该添加或更正任何内容吗?线程问题/差异怎么样?

4 个答案:

答案 0 :(得分:2)

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

  

拦截器在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应用程序 框架等?

  4. 我猜想,以某种方式回答,表明您对所有这些主题的理解正在寻找。

答案 1 :(得分:2)

过滤器来自Servlet API,拦截器来自Struts 2, 当我们谈论Web应用程序和企业应用程序时会出现差异, filter仅在Web应用程序中使用,而拦截器可以与Web以及企业应用程序一起使用。 两者的生命周期方法也有所不同。

拦截器堆栈会在每次请求时触发。 过滤器仅适用于定义它们的URL。 你根据需要使用其中一个。假设您需要验证每个请求都存在cookie。使用拦截器。假设您需要在某些请求(由网址驱动)上弹出外部应用,请使用过滤器。

答案 2 :(得分:1)

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

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

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

如果代码中的逻辑与Application更加耦合,它更适合拦截器,或者如果它的基础结构,我们可以将它放在servlet过滤器中。

答案 3 :(得分:0)

过滤器:

  1. 基于Servlet规范
  2. 执行请求上的模式匹配。
  3. 不可配置的方法调用。
  4. <强>拦截器:

    1. 基于Struts2。
    2. 执行所有请求有资格获得前端控制器(a Servlet过滤器)。并且可以配置为执行其他操作 特定行动执行的拦截器。
    3. 可以配置拦截器中的方法是执行还是执行 不是通过excludeMethodsincludeMethods