六 servlet生命週期

Servlet 生命週期可以描述爲servlet的生命跨度,從載入到銷燬。

 

在解釋servelt生命週期前,先來討論一些你將在本文中看到的一些術語,這將幫你更快速地理解它。

 

Web Server: 它也被成爲Http Server,處理從客戶端發來的Http 請求,用Http Response 響應此請求。

 

Web Container: 也稱爲Servlet容器,Servlet引擎。它與Servlet交互,是Web Server的一部分。它是Web Server的主要組件,管理servlet的生命週期。

 

Servlet的生命週期包含五步:

1) 載入Servlet

2) 創建Servlet實例

3) 調用init()方法

4) 調用service()方法獨立響應每個客戶的請求

5) 調用destory()方法

 

然我們回到我們的主要話題。這裏是servlet生命週期的五個步驟。

 

步驟1:載入servlet

當web server(例如tomcat)啓動時,servlet容器部署載入所有的servlet

步驟2:創建servlet實例

一旦所有的servlet被載入,這個servlet容器創建每一個servlet的實例。servlet容器對每個servlet只創建一次,並且所有的這個servlet的請求都被同一個servlet實例處理。

步驟3:調用init()方法

一旦所有的servlet類被實例化,每個servlet的init()方法都會被調用。這個方法初始化這個servlet,有某些初始化參數你可以在部署描述文件(web.xml)中指定。例如,如果一個servlet有個大於0的值,那麼它的init()方法在容易啓動時會被立刻調用。

 

你可以在web.xml中指定該元素,像這樣:

<servlet>

<servlet-name>MyServlet</servlet-name>

<servlet-class>com.beginnersbook.MyServletDemo</servlet-class>

<load-on-startup>1</load-on-startup>

</servlet>

 

現在這個相應的servlet類com.beginnersbook.MyServletDemo的init()方法在web容器啓動時立刻被調用。

 

步驟4:調用service()方法

每次web server接受到servlet的請求時,它就產生一個新的線程來調用service()方法(所以我們經常說的單例多線程就是這個意思)。如果這個servlet是GenericServlet那麼這個請求被他自己的service()服務,如果這個servlet是HttpServlet,那麼service()方法接受該請求並基於請求類型分發它到對應的成立方法上。

 

例如,如果它是一個Get請求,service()方法將分發此請求到doGet()方法上,通過調用doGet()方法,並帶上請求參數。類似地,像Post,Head,Put等請求都會被分發到相應的doPost(),doPut(),doHead()方法上,通過service()方法。

(image)[https://beginnersbook.com/wp-content/uploads/2013/05/Servlet_Life_Cycle.jpg]

 

注意:不像init()方法和destory()方法只被調用一次,service()方法可在生命週期中調用任意多次,只要servlet沒有被銷燬,對於每個客戶端請求service()都會被調用。

 

步驟五:地用destory()方法

當servelt容器關閉(經常發生在我們關閉web server時),它卸載所有的servlet並調用每個初始化的servlet的destory()方法。

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章