1. 程式人生 > >從零開始學習Servlet(1): 作用和生命週期

從零開始學習Servlet(1): 作用和生命週期

Servlet

作用

Servlet 是實現了 javax.servlet.Servlet 介面的 Java 類, 負責處理客戶端的 HTTP 請求。是客戶端 與 資料庫或後臺應用程式之間互動的媒介 。功能:
1. 讀取客戶端傳送的資料
2. 處理資料,生成結果
3. 傳送資料到客戶端
這裡寫圖片描述

  • 讀取的資料包括:顯式資料如(HTML表單),隱式HTTP請求資料(cookies、媒體型別和壓縮格式的內容)

  • 處理過程涉及的操作:訪問資料庫,執行遠端方法呼叫(Remote Method Invocation)RMI或者公共物件請求代理體系結構(Common Object Request Broker Architecture)CORBA呼叫,呼叫Web服務,或者直接計算得出對應的響應。

  • 傳送的資料:
    顯示資料:文件(HTML/XML格式的文字檔案、二進位制檔案(GIF影象)、Excel檔案)。
    隱式資料:通知客戶端返回的文件型別(如HTML)、設定cookies和快取引數、其他型別的任務。

生命週期

  • 初始化 init()
  • 處理客戶端的請求 service()
  • 終結 destroy()
  • 最後Servlet由JVM的垃圾回收器回收

init()

public void init() throws ServletException {
  // 初始化程式碼...
}
  • 只調用一次,在且僅在第一次建立Servlet時呼叫。
  • Servlet創建於使用者第一次呼叫對應於該Servlet的url,但是也可以指定Servlet在伺服器第一次啟動時被載入。
  • 使用者呼叫一個Servlet時,就會建立一個Servlet例項,用一個使用者請求都會產生一個新的執行緒。然後移交給doGet或doPost方法。init()方法簡單的建立或者載入一些資料,這些資料將會用於Servlet的整個生命週期。

service()

public void service(ServletRequest request,ServletResponse response)throws ServletException,IOException{
    ....
    doGet();
    ...
    doPost();
    ....
}
  • 執行任務的主要方法,Web伺服器呼叫service()方法來處理來自客戶端的請求,並把格式化的響應結果返回給客戶端
  • 當Web伺服器接收到一個Servlet請求時,會產生一個新的執行緒然後呼叫服務,service()方法檢查HTTP請求型別(GET、POST、PUT、DELETE等),並在適當的時候呼叫doGet、doPost、doPut、doDelete等方法。
  • servive() 由Web伺服器呼叫,service()根據請求的型別呼叫doGet/doPost/…..等。所以我們不對service()方法做操作。只需根據客戶端的請求型別來重寫doGet()/doPost()/…

doGet()和doPost()

deget()和doPost()是請求中使用最多的方法

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

doGet()方法 處理GET請求,一般GET請求來自於一個URL的正常請求,或者是來自一個未指定METHOD的HTML表單。

  • doPost()
public void doPost(HttpServletRequest request,HttpResponse response)throws ServletException,IOException{
//Servlet 程式碼
}

doPost()方法處理POST請求 ,POST請求來自於一個特別指定了METHOD為POST的HTML表單。

destory()

public void desstroy(){
//
}
  • destory()方法只會被呼叫一次,在Servlet生命週期結束時呼叫。
  • destroy()負責關閉資料庫連線、停止後臺執行緒、把Cookie列表或者點選計數器寫入到磁碟,並執行其他類似的清理活動

總結

呼叫init()生成Servlet ,多次請求建立多個執行緒,執行單例的service()方法處理請求,處理完完成destory銷燬。