2010-10-10 19 views

回答

4

如果你大多包裝另一個HttpServletResponse,它可以節省你實施大量的樣板。但更重要的是,這意味着當新版本的JavaEE規範在httpServletResponse接口上以新方法發佈時,您的過濾器仍然可以工作,而不是在運行時(和編譯時)因爲沒有實現新接口而失敗。

2

HttpServletResponse的是一個接口,*包裝是實現該接口的類。

通過擴展*包裝器,您不必實現所有的鍋爐板,只需要幾個你想要的位。

2

雖然@ Carey的回答是正確的,但這不是包裝類的最重要原因。

Servlet規範說,如果您在servlet/filter/JSP中轉發請求或響應,則請求和響應對象必須與容器最初傳入的請求/響應對象相同,或者必須是包裝器他們,使用提供的包裝類。

因此,對於想要覆蓋提供的請求/響應對象的行爲的過濾器,它們需要擴展包裝器,而不是僅僅從接口創建新的請求/響應類。

請注意,有些servlet容器(如舊版本的Tomcat)忽略了這部分規範。

+0

謝謝。這是我很久以來尋找的答案。我曾經也想知道爲什麼要創建一個包裝或爲什麼不修改原始對象本身!看起來包裝是強制性的,如果我們想要請求/響應對象的任何變化。 – 2017-01-01 14:33:09

+0

提及此規格的任何鏈接? – 2017-01-01 14:38:52

相關問題