可以定義一個servlet的生命周期,從創建,直到毀滅的全過程。以下是通過servlet遵循的過程:
servlet通過調用init () 方法進行初始化。
servlet調用service()方法來處理客戶端的請求。
該servlet通過調用destroy()方法終止(結束)。
最後,servlet是由垃圾收集器的JVM的垃圾收集。
現在讓我們討論生命周期方法的細節。
init方法被設計成隻被調用一次。這是第一次被創建時調用這個servlet,而不是再次調用每個用戶請求。因此,它是用於一次性初始化,一樣的Applet的init方法。
當用戶創建該servlet通常首先調用相應的servlet的URL,但您也可以指定這個servlet的服務器第一次啟動時被加載。
當用戶調用一個servlet,每個servlet的單個實例被創建,每一個用戶請求產生一個新的線程,被移交給doGet,doPost方法。簡單的init()方法創建或加載一些數據將被用於整個生命周期的servlet。
init方法定義看起來像這樣:
public void init() throws ServletException { // Initialization code... }
service()方法是主要的方法來執行實際的任務。 servlet容器(如Web服務器)調用service()方法來處理來自客戶端(瀏覽器)的請求,並寫格式化響應返回給客戶端。
每次服務器接收到一個servlet請求時,服務器產生一個新的線程並調用服務。 service()方法檢查HTTP請求類型(GET,POST,PUT,DELETE等),並調用doGet,doPost方法,doPut,doDelete,等適當的方法。
下麵是這種方法的簽名:
public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException{ }
由容器和服務方法service()方法被調用時調用doGet,doPost方法,doPut,doDelete等適當的方法。所以,service()方法什麼都不用做,但你隻需要重寫doGet()或doPost()方法,但取決於你是什麼類型的請求從客戶端接收。
doGet()和doPost()方法是最常用的方法,在每一個服務請求。下麵是這兩種方式中的簽名。
從一個正常的請求的URL或HTML的形式,有冇有指定的方法,它應該被處理的doGet()方法的GET請求的結果。
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet code }
從一個HTML表單,具體列出POST的方法和doPost()方法,應當由POST請求的結果。
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Servlet code }
一個servlet的生命周期結束時,destroy()方法隻會被調用一次。這種方法可以讓你的servlet關閉數據庫連接,停止後台線程,寫入Cookie列表,或打計數到磁盤,並執行其他類似的清理活動的機會。
Servlet對象的destroy()方法被調用後,被標記為垃圾回收。 destroy方法定義看起來像這樣:
public void destroy() { // Finalization code... }
下圖顯示了一個典型的servlet的生命周期的情況。
第一個到服務器的HTTP請求被委派到servlet容器。
servlet容器裝載,然後再調用這個servlet的service()方法。
然後servlet容器產生多個線程,每個線程執行一個單一的servlet實例的service()方法的處理多個請求。