1. 程式人生 > >Servlet詳解

Servlet詳解

參數 number 獲取 用戶 blog 方案 工作 service get

一、Servlet類圖

技術分享

Servlet接口定義了幾個關鍵的方法:

  • init(),初始化 servlet 對象,完成一些初始化工作。它是由 servlet 容器控制的,該方法只能被調用一次
  • service(),接受客戶端請求對象,執行業務操作,利用響應對象響應客戶端請求。
  • destroy(),當容器監測到一個servlet從服務中被移除時,容器調用該方法,釋放資源,該方法只能被調用一次。
  • getServletConfig(),ServletConfig 是容器向 servlet 傳遞參數的載體。
  • getServletInfo(),獲取 servlet 相關信息。

init() 方法

init 方法被設計成只調用一次。它在第一次創建 Servlet 時被調用,在後續每次用戶請求時不再調用。

service() 方法

service() 方法是執行實際任務的主要方法。Servlet 容器(即 Web 服務器)調用 service() 方法來處理來自客戶端(瀏覽器)的請求,並把格式化的響應寫回給客戶端。

每次服務器接收到一個 Servlet 請求時,服務器會產生一個新的線程並調用服務。service() 方法檢查 HTTP 請求類型(GET、POST、PUT、DELETE 等),並在適當的時候調用 doGet、doPost、doPut,doDelete 等方法。

destroy() 方法

destroy() 方法只會被調用一次,在 Servlet 生命周期結束時被調用。destroy() 方法可以讓您的 Servlet 關閉數據庫連接、停止後臺線程、把 Cookie 列表或點擊計數器寫入到磁盤,並執行其他類似的清理活動。

在調用 destroy() 方法之後,servlet 對象被標記為垃圾回收。

二、何時創建

一般,創建servlet時機有兩個

1.第一次訪問Servlet的時候創建

(1).類加載

(2).實例化一個servlet 創建Servlet對象

(3).init方法
做一些初始化工作..比如從web.xml文件中讀取配置信息
(4).service方法

來處理客戶端請求 判斷請求類型get 調用doGet,post 調用doPost 在該方法中完成
(5).destroy方法
程序員能主動調用destroy方法來銷毀servlet對象嗎?
答:不能,這些方法都是tomcat容器調用的
destroy方法 什麽時候會被調用
(1)web服務器關閉時
(2) web應用程序關閉時(或被移除時)
(3)如果一個Servlet長時間沒有訪問 調用destory方法
具體執行策略:會先把對象 保存到文件中(使用對象序列化技術) 等再訪問該servlet對象時使用返序列化技術恢復Servlet
這樣Servlet的狀態就不會被丟失了

6.類卸載

重點:只有一個Servlet對象

對於同一個Servlet類的請求 只有一個Servlet對象

相當於每來一個新的請求 容器會為這個新的請求啟動一個線程 並且在該線程內調用service()方法。

執行過程:

第一次訪問時 先類加載、創建對象、調用init方法初始化、service方法

第二次再訪問 前面的都不執行了,直接執行service方法

2. web服務器啟動時創建:在web.xml servlet標簽裏配如下參數 <load-on-startup>1</load-on-startup>

三、架構圖

下圖顯示了一個典型的 Servlet 生命周期方案。

  • 第一個到達服務器的 HTTP 請求被委派到 Servlet 容器。
  • Servlet 容器在調用 service() 方法之前加載 Servlet。
  • 然後 Servlet 容器處理由多個線程產生的多個請求,每個線程執行一個單一的 Servlet 實例的 service() 方法。

技術分享

Servlet詳解