您好,登錄后才能下訂單哦!
這篇文章主要介紹了servlet生命周期有哪些階段的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇servlet生命周期有哪些階段文章都會有所收獲,下面我們一起來看看吧。
Servlet生命周期是指servlet從創建直到毀滅的整個過程,可分為3個階段:1、初始化階段,調用init()方法實現Servlet的初始化工作;2、運行階段(處理請求),容器會為指定請求創建代表HTTP請求的ServletRequest對象和代表HTTP響應的ServletResponse對象,然后將它們作為參數傳遞給Servlet的service()方法;3、銷毀階段。
1、Servlet 是什么?
Servlet(Server Applet)是Java Servlet的簡稱,稱為小服務程序或服務連接器,用Java編寫的服務器端程序,具有獨立于平臺和協議的特性, 是運行在 Web 服務器或應用服務器上的程序。
2、Servlet 的作用
它是作為來自 Web 瀏覽器或其他 HTTP 客戶端的請求和 HTTP 服務器上的數據庫或應用程序之間的中間層。主要功能在于收集來自網頁表單的用戶輸入,交互式地瀏覽和生成數據,還可以生成動態Web內容。
Servlet生命周期可被定義為從創建直到毀滅的整個過程。
三個步驟即:初始化------>處理請求------>銷毀
創建Servlet對象后---------->初始化(調用 init () 方法)--------->處理/響應客戶端的請求(調用 service() 方法)--------->銷毀(調用 destroy() 方法,最后由 JVM 的垃圾回收器進行垃圾回收)
1)初始化階段
當客戶端向 Servlet 容器發出 HTTP 請求要求訪問 Servlet 時,Servlet 容器首先會解析請求,檢查內存中是否已經有了該 Servlet 對象,如果有,則直接使用該 Servlet 對象,如果沒有,則創建 Servlet 實例對象,然后通過調用 init() 方法實現 Servlet 的初始化工作。需要注意的是,在 Servlet 的整個生命周期內,它的 init() 方法只能被調用一次。
2)運行階段(處理請求)
這是 Servlet 生命周期中最重要的階段,在這個階段中,Servlet 容器會為這個請求創建代表 HTTP 請求的 ServletRequest 對象和代表 HTTP 響應的 ServletResponse 對象,然后將它們作為參數傳遞給 Servlet 的 service() 方法。
service() 方法從 ServletRequest 對象中獲得客戶請求信息并處理該請求,通過 ServletResponse 對象生成響應結果。
在 Servlet 的整個生命周期內,對于 Servlet 的每一次訪問請求,Servlet 容器都會調用一次 Servlet 的 service() 方法,并且創建新的 ServletRequest 和 ServletResponse 對象,也就是說,service() 方法在 Servlet 的整個生命周期中會被調用多次。
3)銷毀階段
當服務器關閉或 Web 應用被移除出容器時,Servlet 隨著 Web 應用的關閉而銷毀。在銷毀 Servlet 之前,Servlet 容器會調用 Servlet 的 destroy() 方法,以便讓 Servlet 對象釋放它所占用的資源。在 Servlet 的整個生命周期中,destroy() 方法也只能被調用一次。
需要注意的是,Servlet 對象一旦創建就會駐留在內存中等待客戶端的訪問,直到服務器關閉或 Web 應用被移除出容器時,Servlet 對象才會銷毀。
創建Servlet對象,通過服務器反射機制創建Servlet對象,第一次請求時才會創建。(默認)
1. init() 方法
調用Servlet對象的init()方法,初始化Servlet的信息,init()方法只會在創建后被調用一次(初始化階段)
(1)init 方法被設計成只調用一次。它在第一次創建 Servlet 時被調用,在后續每次用戶請求時不再調用。因此,它是用于一次性初始化,創建于用戶第一次調用該 Servlet 的 URL 時,也可以指定 Servlet 在服務器第一次啟動時被加載。
(2)當用戶調用一個 Servlet 時,就會創建一個 Servlet 實例,每一個用戶請求都會產生一個新的線程,適當的時候移交給 doGet 或 doPost 方法。
(3)init() 方法簡單地創建或加載一些數據,這些數據將被用于 Servlet 的整個生命周期。
init 方法的定義如下:
public void init() throws ServletException {
// 初始化代碼...
}
2. service() 方法
響應請求,調用service()或者是doGet(),doPost()方法來處理請求,這些方法是運行的在多線程狀態下的。(響應客戶請求階段)
(1)service() 方法是執行實際任務的主要方法,處理來自客戶端(瀏覽器)的請求,并把格式化的響應寫回給客戶端。
(2)每次服務器接收到一個 Servlet 請求時,服務器會產生一個新的線程并調用服務。
(3)Servlet接收和響應客戶請求的過程,首先客戶發送一個請求,Servlet是調用service()方法對請求進行響應的,通過源代碼可見,service()方法中對請求的方式進行了匹配,選擇調用doGet,doPost等這些方法,然后再進入對應的方法中調用邏輯層的方法,實現對客戶的響應。由于在Servlet接口和GenericServlet中是沒doGet,doPost等等這些方法的,HttpServlet中定義了這些方法,所以,我們每次定義一個Servlet的時候,都必須實現doGet或 doPost等這些方法。
(4)service() 方法檢查 HTTP 請求類型(GET、POST、PUT、DELETE 等),并在適當的時候調用 doGet、doPost、doPut,doDelete 等方法進行處理。
service方法的定義如下:
public void service(ServletRequest request,ServletResponse response)
throws ServletException, IOException{
}
由于service() 方法由容器調用,service 方法在適當的時候會調用 doGet、doPost、doPut、doDelete 等方法。所以,我們不用對 service() 方法做任何處理,只需要根據客戶端的請求類型來重寫 doGet() 或 doPost() 即可。
3. doGet() 方法
用于處理請求,方法是運行的在多線程狀態下的。(響應客戶請求階段)
doGet() 是服務請求中最常用的方法,用于處理請求,當URL的請求類型為GET請求 ,或者是一個未指定請求類型HTML表單,那么該請求將由 doGet() 方法處理。
doGet方法的定義如下:
public void doGet(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代碼
}
4. doPost() 方法
用于處理請求,方法是運行的在多線程狀態下的。(響應客戶請求階段)
doPost() 是服務請求中最常用的方法,用于處理請求,當請求來自一個特別指定了 請求類型為POST的 HTML 表單,那么該請求將由doPost() 方法處理。
doPost方法的定義如下:
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Servlet 代碼
}
5、destroy() 方法
在長時間沒有被調用或者是服務器關閉時,會調用destroy()方法來銷毀Servlet對象。(終止階段)
(1)destroy() 方法只會被調用一次,在 Servlet 生命周期結束時被調用。
(2)destroy() 方法可以讓Servlet 關閉數據庫連接、停止后臺線程、把 Cookie 列表或點擊計數器寫入到磁盤,并執行其他類似的清理活動。
(3)在調用 destroy() 方法之后,servlet 對象被標記為垃圾回收。
destroy 方法定義如下:
public void destroy() {
// 終止化代碼...
}
理解了上面的內容再看周期圖就會容易很多。
關于“servlet生命周期有哪些階段”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“servlet生命周期有哪些階段”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。