2011-01-13 82 views

回答

13

,我會感到驚訝,如果有人可以張貼硬數據。即使他們這樣做,它最有可能與您無關,因爲這些數字將取決於過濾器中正在執行的操作。它也可能陷入過早的優化範疇 - 除非你真的把事情搞得很糟糕,否則這很可能不重要。

我假設「遺產」的意思是「繼承」,並說,過濾器是一個更好的解決方案。您可以選擇將它們在配置中關閉和打開。

過濾器是用於HTTP請求的裝飾器或方面。既然這些都是受到尊重的,經過驗證的模式,爲什麼它們對servlet的使用沒有用處和安全?

我想說你的擔心是誇大的。

雖這麼說,我不建議建立這樣一個長期,複雜的過濾器鏈,業績也成爲一個問題。如果您進行壓縮,日誌記錄,性能指標等,最終會出現問題,並最終形成一連串的過濾器。

+3

但是,如果您需要執行壓縮,日誌記錄和性能指標等,無論是否使用過濾器或其他方式,都需要同一時間。我不喜歡過濾器的唯一部分是深層堆棧跟蹤,但這是整型和低於允許的堆棧調用深度的方式。然後是「太多移動部件」問題(即配置開銷)。 – Thilo

+0

@Thilo:您可以在Java EE 6中無需配置。因此,這也可以解決。 –

+0

EE6是一個很大的改進,因爲XML消失了,但是你仍然需要在某個地方進行配置(當然註釋是IDE和程序員友好的)。 – Thilo

3

沒有什麼可測量的,完全與您在過濾器中所做的實際工作相差無幾。甚至沒有每次創建過濾器的新實例,就像它們共享的Servlet一樣。

與繼承相比,最大的優勢是能夠在運行時進行配置和組合(父類編譯進來,並且只能有一個)。

有一點要考慮的是,一個過濾器只能換一個請求:它可以前後(或代替)添加代碼。在Servlet運行後,響應可能已經被提交。它不能將代碼注入到請求處理的中間,這樣可以正確定義回調到父類(或Servlet結束處的其他技術)中。這意味着一個Filter可能不適合某些任務。