請告知會發生什麼如果我在一個servlet的doget()
方法內部調用init()
方法。它會拋出異常嗎?它會對servlet的生命週期產生什麼影響?在servlet的doget()方法中調用init()
請指教。
請告知會發生什麼如果我在一個servlet的doget()
方法內部調用init()
方法。它會拋出異常嗎?它會對servlet的生命週期產生什麼影響?在servlet的doget()方法中調用init()
請指教。
很可能,您的init()
方法中的代碼將執行。
對於init
方法沒有什麼特別的地方,除了容器在您的servlet投入使用之前調用它。你可以隨時撥打它。如果您的init
方法更改任何共享數據的值,則可能會遇到奇怪的問題。
我無法想像爲什麼有人會從doGet
方法中調用init
。
首先,如果您試圖從doGet()
中調用init()
方法並查看會發生什麼,則可以避免提出此問題。
無論如何,servlet規範2.3表示:
初始化被設置爲使得一個servlet可以讀取持久 配置數據,初始化昂貴的資源(如JDBC™API 基於連接),以及執行其他單時間活動。
所以,你應該不知道有多少一次性活動的是在當前的init()
方法。調用該方法與調用不同的方法沒有區別。我在考慮一個場景,其中您的init()
方法唯一的作用是從ServetConfig
的init參數初始化擁有的屬性;在這種情況下,沒有錯將會發生。
但是,如果您的init()
方法執行任何可能會改變servlet內部狀態的任務,那麼您有機會面對一種奇怪的行爲。
如果您正在執行init()
方法中的任何任務,您可能需要在doGet()
中使用該方法,然後將它們移至私有內部方法。
如果你沒有實現init()方法,很多事情都不會發生。原因是繼承的實現也是空的。你的servlet可能延伸的HttpServlet,它繼承以下從GenericServlet類實現:
public void init() throws ServletException {
// NOOP by default
}
如果你有自己的實現,那麼在您的實現代碼被執行。它會拋出異常 - 這取決於你編碼的內容。
如果你調用init,它將ServletConfig作爲參數,那麼原來的ServletConfig將被替換,並調用init()
。我看不出爲什麼要撥打init
或init(ServletConfig)
方法。方法是讓你在需要時重寫,並被servlet容器調用。
你試過了嗎? – johusman 2012-07-17 14:51:14
永遠不要這樣做。它使得服務器跨越黑暗的一面,將運行瀏覽器的機器炒掉,然後破壞自身。根據您的服務器和發送命中獲取請求的瀏覽器的位置,它可能也會導致跨大西洋海底通信電纜的中斷。 – 2012-07-17 15:25:40