2012-07-22 59 views

回答

4

在servlet中使用構造函數沒有任何問題。當您需要獲得ServletConfig,ServletContext等時,切換到init()的原因是這些對象在構造函數中可能尚未提供(尚)。

另外假設一些容器可能會像servlet一樣使用動態子類或代理。最後,構造函數的副作用往往會使測試變得更加困難。

爲了避免意外的行爲,並確保您的servlet是100%便攜式的,只需使用init()即可。此外,如果您還使用destroy()以及執行init()將使您的代碼更「對稱」。

又見

+0

我想那麼首先調用'init()'然後構造函數?你能否詳細說明_side-effects_?還有一種情況可能需要Servlet構造函數(例如在一個famework的情況下)?最後可以提供一些鏈接(不管是技術上的) - 特別是init()在幕後發生的方式? – 2012-07-22 16:02:29

+0

@Mr_and_Mrs_D:1.不,可以在構造函數之前的對象上調用任何方法,包括'init()'2.閱讀關於模擬和代理 - 在某些情況下,構造函數可以被調用兩次。 3.查看我添加到我的答案的鏈接,servlet *必須*有一個無參數構造函數。 4.猜猜它是容器依賴的。所有你需要知道的是它在構造函數之後和任何'service()'調用之前調用。 – 2012-07-22 16:12:40

+0

1.是的 - 抱歉。這可以是默認的構造函數 - 我不必寫一個 - 對嗎?關於這個主題的另一個鏈接從這裏[這裏](http://stackoverflow.com/questions/1276082/constructor-in-servlet/2659597#2659597) – 2012-07-22 16:29:50

0

燁我們可以在servlet的構造函數,但它不是必需bcoz-

的servlet被初始化web容器。與其他java類不同,servlet未初始化。構造函數用於初始化顯式創建的對象,而servlet使用不同的方法'init()'進行初始化。

Servlet只是一個接口(javax.servlet.Servlet)和java中的接口沒有任何構造函數和一個實現類的構造不能在servlet接口中聲明,它沒有任何意義。容器只會使用init()方法來初始化servlet。

+0

和ya我們需要init方法bcz來初始化servlet,我們需要特殊對象servletConfig,我們可以在init方法中訪問這個對象,而不是在構造函數中。 – Pri 2012-11-20 11:43:16

相關問題