當前位置:首頁 » Servlets » Servlet生命周期

Servlet生命周期

Servlets生命周期教學,實例代碼 - 可以定義一個servlet的生命周期,從創建,直到毀滅的全過程。

可以定義一個servlet的生命周期,從創建,直到毀滅的全過程。以下是通過servlet遵循的過程:

  • servlet通過調用init () 方法進行初始化。

  • servlet調用service()方法來處理客戶端的請求。

  • 該servlet通過調用destroy()方法終止(結束)。

  • 最後,servlet是由垃圾收集器的JVM的垃圾收集。

現在讓我們討論生命周期方法的細節。

init() 方法:

init方法被設計成隻被調用一次。這是第一次被創建時調用這個servlet,而不是再次調用每個用戶請求。因此,它是用於一次性初始化,一樣的Applet的init方法。

當用戶創建該servlet通常首先調用相應的servlet的URL,但您也可以指定這個servlet的服務器第一次啟動時被加載。

當用戶調用一個servlet,每個servlet的單個實例被創建,每一個用戶請求產生一個新的線程,被移交給doGet,doPost方法。簡單的init()方法創建或加載一些數據將被用於整個生命周期的servlet。

init方法定義看起來像這樣:

public void init() throws ServletException {
  // Initialization code...
}

service() 方法:

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

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

下麵是這種方法的簽名:

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

由容器和服務方法service()方法被調用時調用doGet,doPost方法,doPut,doDelete等適當的方法。所以,service()方法什麼都不用做,但你隻需要重寫doGet()或doPost()方法,但取決於你是什麼類型的請求從客戶端接收。

doGet()和doPost()方法是最常用的方法,在每一個服務請求。下麵是這兩種方式中的簽名。

doGet() 方法

從一個正常的請求的URL或HTML的形式,有冇有指定的方法,它應該被處理的doGet()方法的GET請求的結果。

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

doPost() 方法

從一個HTML表單,具體列出POST的方法和doPost()方法,應當由POST請求的結果。

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

destroy() 方法:

一個servlet的生命周期結束時,destroy()方法隻會被調用一次。這種方法可以讓你的servlet關閉數據庫連接,停止後台線程,寫入Cookie列表,或打計數到磁盤,並執行其他類似的清理活動的機會。

Servlet對象的destroy()方法被調用後,被標記為垃圾回收。 destroy方法定義看起來像這樣:

  public void destroy() {
    // Finalization code...
  }

架構圖:

下圖顯示了一個典型的servlet的生命周期的情況。

  • 第一個到服務器的HTTP請求被委派到servlet容器。

  • servlet容器裝載,然後再調用這個servlet的service()方法。

  • 然後servlet容器產生多個線程,每個線程執行一個單一的servlet實例的service()方法的處理多個請求。