2012-04-07 85 views
11

我正在研究這個問題,以便我可以在面試中做出更好的迴應。我一直在尋找一個清晰和簡潔的答案。攔截器和過濾器之間的區別 - 這是正確的嗎?

到目前爲止,並通過各種手段糾正我,如果我錯了,或缺少細節:

  1. 過濾器是在Servlet API的一部分,攔截器是Struts的2(似乎是顯而易見的,雖然)
  2. 的攔截器堆棧在配置包中的請求上觸發,而篩選器僅適用於其映射的URL。
  3. 攔截器可以配置爲執行或不依賴於特定的目標操作方法,通過excludeMethods和includeMethods,而過濾器缺少此功能。
  4. 過濾器是攔截過濾器模式的實現,而攔截器是攔截器模式的實現。

這是否看起來像一個準確和完整的答案?我應該添加還是更正任何內容?線程問題/差異呢?

回答

2

我覺得第一點是答案,但你應該可以說不僅僅是

攔截器是在Struts 2和過濾器是Servlet API的

在部分事實上,作爲一名訪問者,我期待並希望能夠在這裏解釋一下Servelt API和Web應用程序框架(如Struts 2)之間的區別。這實際上是一次展示您對整個Java Web應用程序生態系統和基礎架構的理解的機會。

很好的答案可能會觸及到:

  1. 如何Struts 2框架是一個Servlet過濾器內實施。

  2. 哪些特定的用例需要調用struts 2以外的servlet過濾器,但在同一個web應用程序中?

  3. 什麼是Servlet API,一個Web應用程序,一個Web應用程序 框架等?

回答的方式顯示所有這些主題的理解是什麼那裏尋找,我猜。

+0

我想聽聽您發佈的上述3個問題的答案嗎? – Harshana 2013-09-24 06:06:39

+0

@Harshana我建議你問他們作爲獨立的問題。在這個問題上回答他們會是一種混淆的格式。 – chad 2013-09-25 17:10:18

1

在我回答了這個問題,如面試中的一個,

攔截器是Struts2的概念和應用程序開發人員進行控制。此外,它使用struts2應用程序邊界,並且可以訪問Actions,ValueStack和其他對象以及Struts2的好東西。

雖然過濾器更適合部署時間配置。它具有有限的應用程序訪問權限,而且在大多數情況下,它對於部署在服務器中的大部分Web-app都具有通用性

如果代碼中的邏輯與Application更加耦合,那麼它更適合攔截器,或者如果它的基礎結構,我們可以將它放在servlet過濾器中。

2

過濾器是從的Servlet API和攔截器是從Struts 2中, 差來的時候,我們談論的Web應用和企業應用程序, 過濾器僅用於Web應用程序,而攔截器可以使用Web和企業應用程序中使用。 兩者的生命週期方法也不同。

攔截器堆棧在每個請求上觸發。 過濾器僅適用於爲其定義的網址。 您根據需要使用一種或另一種。假設您需要驗證每個請求都存在Cookie。使用攔截器。假設您需要在某些請求(由url驅動)上彈出一個外部應用程序,請使用過濾器。

+0

「過濾器僅用於Web應用程序,而攔截器可用於Web和企業應用程序」?這是誤導性的; 「企業應用程序」沒有什麼魔力,它們只是所有網絡應用程序的一個子集。另外,過濾器可以輕鬆應用於所有網址,因此這不是實質性差異。 – orlade 2016-05-31 03:02:27

0

過濾器:

  1. 基於Servlet規範
  2. 執行上的圖案上的請求相匹配。
  3. 不可配置的方法調用。

攔截:基於Struts2的

  1. 執行前端控制器的所有請求資格(一個 Servlet過濾器)。並且可以配置爲執行特定操作執行的其他攔截器。
  2. 攔截器中的方法可以配置是執行還是 而不是通過excludeMethodsincludeMethods
相關問題