Servlet生命周期
- Servlet的生命周期
-
- 簡介
- 具體步驟
- 注意事項
Servlet的生命周期
簡介
Servlet的生命周期是由容器管理的,分别經曆四個階段:
階段 | 次數 | 時機 |
---|---|---|
建立 | 1次 | 第一次請求時,new |
初始化 | 1次 | Servlet執行個體化之後,init() |
執行服務 | 多次 | 每次請求,service() |
銷毀 | 1次 | 停止服務,destroy() |
具體步驟
-
1、加載
在下列時刻會加載Servlet(隻執行一次):
- 如果已經配置自動加載選項,則在啟動伺服器時自動加載web.xml檔案中設定的
;<load-on-start>
- 伺服器啟動之後,客戶機首次向Servlet送出請求時會加載;
- 重新加載Servlet時會進行一次加載;
- 如果已經配置自動加載選項,則在啟動伺服器時自動加載web.xml檔案中設定的
-
2、執行個體化
加載Servlet後,伺服器建立一個Servlet執行個體。(隻執行一次);
-
3、初始化
調用Servlet的
方法。在初始化階段,Servlet初始化參數被傳遞給Servlet配置對象ServletConfig,(隻執行一次);init()
-
4、請求處理
對于到達伺服器的客戶機請求,伺服器建立針對此次請求的一個"請求"對象和一個"響應對象"。
伺服器調用Servlet的
方法,該方法用于傳遞"請求"和"響應"對象。service()
方法從"請求"對象獲得請求資訊、處理該請求并用"響應"對象的方法将響應回傳給用戶端。service()
方法可以調用其他方法來處理請求,例如service()
doGet()、doPost()
或其他方法。
每次請求都會執行該步驟;
-
5、銷毀
當伺服器不需要Servlet,或重新裝入Servlet的新執行個體時,伺服器會調用Servlet的
方法。(隻執行一次);destroy()
注意事項
- 如果需要Servlet在服務啟動時就執行個體化并初始化,我們可以在servlet的配置中添加load-on-startup配置啟動順序,配置的數字為啟動順序,應避免沖突且應>6;
- 在Servlet中我們一般不要輕易使用成員變量,容易造成給線程安全問題;
- 如果要使用成員變量的話,應當盡量避免對成員變量産生修改;
- 如果産生修改應該注意線程安全問題;
-
自己添加線程安全編碼處理,會嚴重影響效率;
原則,能不用成員變量就不要用!
持續更新,如果錯誤,歡迎大家指出,共同學習...