Servlet是一種可以在Servlet容器中運行的組件,那么理所當然就應該有一個從創建到銷毀的過程,這個過程我們可以稱之為Servlet生命周期。Servlet的生命周期可以分為加載、實例化、初始化、處理客戶請求和卸載五個階段,體現在方法上主要是init()、service()和destroy()三個方法。生命周期的具體說明如下:
- Servlet容器完成加載Servlet類和實例化一個Servlet對象
- init()方法完成初始化工作,該方法由Servlet容器調用完成
- service()方法處理客戶端請求,并返回響應結果
- destroy()方法在Servlet容器卸載Servlet之前被調用,釋放一些資源
加載并初始化Servlet
在前面已經說過Servlet容器完成加載和實例化Servlet的工作,該工作既可以在容器啟動時完成,也可以在容器收到請求時完成,或者是兩者之間的某個時間啟動。之后需要初始化Servlet,即讀取配置信息、讀取初始化參數等,這些基本上在整個生命周期中只需要執行一次。關于init()方法已經在積累GenericServlet中提供缺省實現,如果不需特殊處理則沒有必要再進行定義,否則要重寫。
處理客戶端請求
當容器接收到客戶端請求時,Servlet引擎將創建一個ServletRequest請求對象和一個ServletResponse響應對象,然后把這兩個對象作為參數傳遞給對應Servlet對象的service方法。
該方法是一個重點實現的方法,ServletRequest對象可以獲得客戶端發出請求的相關信息,如請求參數等,ServletResponse對象可以使得Servlet建立響應頭和狀態代碼,并可以寫入響應內容返回給客戶端。
在此說明一點,當Servlet中有doGet()或者doPost()方法時,那么service方法就可以省略,默認為調用這兩個方法。
卸載Servlet
Servlet的卸載是由容器本身定義和實現,在卸載Servlet之前需要調用destroy()方法,以讓Servlet自行釋放占用的系統資源。雖然Java虛擬機提供了垃圾自動回收處理機制,但是有一部分資源卻是該機制不能處理或延遲很久才能處理的,如關閉文件,釋放數據庫連接等。
Servlet生命周期的五個階段是相互關聯的,后面幾個階段建立在前面階段的基礎之上,在使用Servlet的時候可以根據自己的需要靈活處理。