現在我們項目幾乎都是在servlet的init方法中初始化資源,在destroy方法里釋放資源。servlet的load on startup是有先后順序,但是沒有依賴關系,如果某個servlet初始化出現異常,不會終止剩下的servlet的初始化,這樣有時會使得web application正常啟動,但是卻部分可用,整個系統處于不穩定狀態。這應該是一種不推薦的做法。
而servlet context listener是在所有servlet初始化之前被調用,同樣在所有servlet destroy之前被調用。更關鍵的是,如果在contextInitialized拋出runtime異常,剩余的listener和所有servlet都不會初始化,解決了web application非正常啟動的問題。
以下情況可以使用servlet來初始化資源:
整個系統只有一個servlet會在系統啟動時初始化資源
Servlet初始化的資源是獨立的,不會影響整個系統的正常運行
Servlet初始化失敗后,整個系統處于不可被訪問狀態
Container的版本比較舊,不支持servlet2.3或者更新的版本