servlet生命周期有哪些階段

這篇文章主要介紹了servlet生命周期有哪些階段的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇servlet生命周期有哪些階段文章都會(huì)有所收獲,下面我們一起來(lái)看看吧。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開(kāi)發(fā)、重慶小程序開(kāi)發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了綏中免費(fèi)建站歡迎大家使用!

Servlet生命周期是指servlet從創(chuàng)建直到毀滅的整個(gè)過(guò)程,可分為3個(gè)階段:1、初始化階段,調(diào)用init()方法實(shí)現(xiàn)Servlet的初始化工作;2、運(yùn)行階段(處理請(qǐng)求),容器會(huì)為指定請(qǐng)求創(chuàng)建代表HTTP請(qǐng)求的ServletRequest對(duì)象和代表HTTP響應(yīng)的ServletResponse對(duì)象,然后將它們作為參數(shù)傳遞給Servlet的service()方法;3、銷毀階段。

一、Servlet 是什么及作用?

1、Servlet 是什么?

Servlet(Server Applet)是Java Servlet的簡(jiǎn)稱,稱為小服務(wù)程序或服務(wù)連接器,用Java編寫的服務(wù)器端程序,具有獨(dú)立于平臺(tái)和協(xié)議的特性, 是運(yùn)行在 Web 服務(wù)器或應(yīng)用服務(wù)器上的程序。

2、Servlet 的作用

它是作為來(lái)自 Web 瀏覽器或其他 HTTP 客戶端的請(qǐng)求和 HTTP 服務(wù)器上的數(shù)據(jù)庫(kù)或應(yīng)用程序之間的中間層。主要功能在于收集來(lái)自網(wǎng)頁(yè)表單的用戶輸入,交互式地瀏覽和生成數(shù)據(jù),還可以生成動(dòng)態(tài)Web內(nèi)容。

二、Servlet 的生命周期

Servlet生命周期可被定義為從創(chuàng)建直到毀滅的整個(gè)過(guò)程。

三個(gè)步驟即:初始化------>處理請(qǐng)求------>銷毀

創(chuàng)建Servlet對(duì)象后---------->初始化(調(diào)用 init () 方法)--------->處理/響應(yīng)客戶端的請(qǐng)求(調(diào)用 service() 方法)--------->銷毀(調(diào)用 destroy() 方法,最后由 JVM 的垃圾回收器進(jìn)行垃圾回收)

1)初始化階段

當(dāng)客戶端向 Servlet 容器發(fā)出 HTTP 請(qǐng)求要求訪問(wèn) Servlet 時(shí),Servlet 容器首先會(huì)解析請(qǐng)求,檢查內(nèi)存中是否已經(jīng)有了該 Servlet 對(duì)象,如果有,則直接使用該 Servlet 對(duì)象,如果沒(méi)有,則創(chuàng)建 Servlet 實(shí)例對(duì)象,然后通過(guò)調(diào)用 init() 方法實(shí)現(xiàn) Servlet 的初始化工作。需要注意的是,在 Servlet 的整個(gè)生命周期內(nèi),它的 init() 方法只能被調(diào)用一次。

2)運(yùn)行階段(處理請(qǐng)求)

這是 Servlet 生命周期中最重要的階段,在這個(gè)階段中,Servlet 容器會(huì)為這個(gè)請(qǐng)求創(chuàng)建代表 HTTP 請(qǐng)求的 ServletRequest 對(duì)象和代表 HTTP 響應(yīng)的 ServletResponse 對(duì)象,然后將它們作為參數(shù)傳遞給 Servlet 的 service() 方法。

service() 方法從 ServletRequest 對(duì)象中獲得客戶請(qǐng)求信息并處理該請(qǐng)求,通過(guò) ServletResponse 對(duì)象生成響應(yīng)結(jié)果。

在 Servlet 的整個(gè)生命周期內(nèi),對(duì)于 Servlet 的每一次訪問(wèn)請(qǐng)求,Servlet 容器都會(huì)調(diào)用一次 Servlet 的 service() 方法,并且創(chuàng)建新的 ServletRequest 和 ServletResponse 對(duì)象,也就是說(shuō),service() 方法在 Servlet 的整個(gè)生命周期中會(huì)被調(diào)用多次。

3)銷毀階段

當(dāng)服務(wù)器關(guān)閉或 Web 應(yīng)用被移除出容器時(shí),Servlet 隨著 Web 應(yīng)用的關(guān)閉而銷毀。在銷毀 Servlet 之前,Servlet 容器會(huì)調(diào)用 Servlet 的 destroy() 方法,以便讓 Servlet 對(duì)象釋放它所占用的資源。在 Servlet 的整個(gè)生命周期中,destroy() 方法也只能被調(diào)用一次。

需要注意的是,Servlet 對(duì)象一旦創(chuàng)建就會(huì)駐留在內(nèi)存中等待客戶端的訪問(wèn),直到服務(wù)器關(guān)閉或 Web 應(yīng)用被移除出容器時(shí),Servlet 對(duì)象才會(huì)銷毀。

三、生命周期方法詳解

創(chuàng)建Servlet對(duì)象,通過(guò)服務(wù)器反射機(jī)制創(chuàng)建Servlet對(duì)象,第一次請(qǐng)求時(shí)才會(huì)創(chuàng)建。(默認(rèn))

1. init() 方法

調(diào)用Servlet對(duì)象的init()方法,初始化Servlet的信息,init()方法只會(huì)在創(chuàng)建后被調(diào)用一次(初始化階段)
(1)init 方法被設(shè)計(jì)成只調(diào)用一次。它在第一次創(chuàng)建 Servlet 時(shí)被調(diào)用,在后續(xù)每次用戶請(qǐng)求時(shí)不再調(diào)用。因此,它是用于一次性初始化,創(chuàng)建于用戶第一次調(diào)用該 Servlet 的 URL 時(shí),也可以指定 Servlet 在服務(wù)器第一次啟動(dòng)時(shí)被加載。

(2)當(dāng)用戶調(diào)用一個(gè) Servlet 時(shí),就會(huì)創(chuàng)建一個(gè) Servlet 實(shí)例,每一個(gè)用戶請(qǐng)求都會(huì)產(chǎn)生一個(gè)新的線程,適當(dāng)?shù)臅r(shí)候移交給 doGet 或 doPost 方法。

(3)init() 方法簡(jiǎn)單地創(chuàng)建或加載一些數(shù)據(jù),這些數(shù)據(jù)將被用于 Servlet 的整個(gè)生命周期。

init 方法的定義如下:

public void init() throws ServletException {
  // 初始化代碼...
}

2. service() 方法

響應(yīng)請(qǐng)求,調(diào)用service()或者是doGet(),doPost()方法來(lái)處理請(qǐng)求,這些方法是運(yùn)行的在多線程狀態(tài)下的。(響應(yīng)客戶請(qǐng)求階段)

(1)service() 方法是執(zhí)行實(shí)際任務(wù)的主要方法,處理來(lái)自客戶端(瀏覽器)的請(qǐng)求,并把格式化的響應(yīng)寫回給客戶端。

(2)每次服務(wù)器接收到一個(gè) Servlet 請(qǐng)求時(shí),服務(wù)器會(huì)產(chǎn)生一個(gè)新的線程并調(diào)用服務(wù)。

(3)Servlet接收和響應(yīng)客戶請(qǐng)求的過(guò)程,首先客戶發(fā)送一個(gè)請(qǐng)求,Servlet是調(diào)用service()方法對(duì)請(qǐng)求進(jìn)行響應(yīng)的,通過(guò)源代碼可見(jiàn),service()方法中對(duì)請(qǐng)求的方式進(jìn)行了匹配,選擇調(diào)用doGet,doPost等這些方法,然后再進(jìn)入對(duì)應(yīng)的方法中調(diào)用邏輯層的方法,實(shí)現(xiàn)對(duì)客戶的響應(yīng)。由于在Servlet接口和GenericServlet中是沒(méi)doGet,doPost等等這些方法的,HttpServlet中定義了這些方法,所以,我們每次定義一個(gè)Servlet的時(shí)候,都必須實(shí)現(xiàn)doGet或 doPost等這些方法。

(4)service() 方法檢查 HTTP 請(qǐng)求類型(GET、POST、PUT、DELETE 等),并在適當(dāng)?shù)臅r(shí)候調(diào)用 doGet、doPost、doPut,doDelete 等方法進(jìn)行處理。

service方法的定義如下:

public void service(ServletRequest request,ServletResponse response) 
      throws ServletException, IOException{
}

由于service() 方法由容器調(diào)用,service 方法在適當(dāng)?shù)臅r(shí)候會(huì)調(diào)用 doGet、doPost、doPut、doDelete 等方法。所以,我們不用對(duì) service() 方法做任何處理,只需要根據(jù)客戶端的請(qǐng)求類型來(lái)重寫 doGet() 或 doPost() 即可。

3. doGet() 方法

用于處理請(qǐng)求,方法是運(yùn)行的在多線程狀態(tài)下的。(響應(yīng)客戶請(qǐng)求階段)

doGet() 是服務(wù)請(qǐng)求中最常用的方法,用于處理請(qǐng)求,當(dāng)URL的請(qǐng)求類型為GET請(qǐng)求 ,或者是一個(gè)未指定請(qǐng)求類型HTML表單,那么該請(qǐng)求將由 doGet() 方法處理。

doGet方法的定義如下:

public void doGet(HttpServletRequest request,HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet 代碼
}

4. doPost() 方法

用于處理請(qǐng)求,方法是運(yùn)行的在多線程狀態(tài)下的。(響應(yīng)客戶請(qǐng)求階段)

doPost() 是服務(wù)請(qǐng)求中最常用的方法,用于處理請(qǐng)求,當(dāng)請(qǐng)求來(lái)自一個(gè)特別指定了 請(qǐng)求類型為POST的 HTML 表單,那么該請(qǐng)求將由doPost() 方法處理。

doPost方法的定義如下:

public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
    // Servlet 代碼
}

5、destroy() 方法

在長(zhǎng)時(shí)間沒(méi)有被調(diào)用或者是服務(wù)器關(guān)閉時(shí),會(huì)調(diào)用destroy()方法來(lái)銷毀Servlet對(duì)象。(終止階段)

(1)destroy() 方法只會(huì)被調(diào)用一次,在 Servlet 生命周期結(jié)束時(shí)被調(diào)用。

(2)destroy() 方法可以讓Servlet 關(guān)閉數(shù)據(jù)庫(kù)連接、停止后臺(tái)線程、把 Cookie 列表或點(diǎn)擊計(jì)數(shù)器寫入到磁盤,并執(zhí)行其他類似的清理活動(dòng)。

(3)在調(diào)用 destroy() 方法之后,servlet 對(duì)象被標(biāo)記為垃圾回收。

destroy 方法定義如下:

public void destroy() {
    // 終止化代碼...
  }

四、生命周期圖解

理解了上面的內(nèi)容再看周期圖就會(huì)容易很多。

servlet生命周期有哪些階段

關(guān)于“servlet生命周期有哪些階段”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“servlet生命周期有哪些階段”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。

文章標(biāo)題:servlet生命周期有哪些階段
新聞來(lái)源:http://muchs.cn/article46/jcpceg.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈外貿(mào)建站、網(wǎng)頁(yè)設(shè)計(jì)公司、Google、網(wǎng)站維護(hù)、網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名