Servlet生命週期

Web容器維護servlet實例的生命週期。下面來看看servlet的生命週期,主要分爲以下幾個步驟:

  1. 加載Servlet類,如前面小節中的示例代碼:MyServlet.java
  2. 創建Servlet實例。
  3. 調用Servlet類的init方法。
  4. 調用Servlet類的service方法。
  5. 調用Servlet類的destroy方法。

模型流程圖如下所示 -

Servlet生命週期

如上圖所示,servlet有三種狀態:新,就緒和結束。 如果servlet實例被創建,則servlet處於新狀態。 調用init()方法後,Servlet進入就緒狀態。 在就緒狀態下,servlet執行所有任務。當web容器調用destroy()方法時,它轉移到結束狀態。

1.加載Servlet類

類加載器負責加載servlet類。 當Web容器接收到servlet的第一個請求時,將加載servlet類。

2.創建Servlet實例

Web容器在加載servlet類之後創建一個servlet的實例。servlet實例在servlet生命週期中只創建一次。

3.調用init方法

Web容器在創建servlet實例後調用init方法一次。 init方法用於初始化servlet。 它是javax.servlet.Servlet接口的生命週期方法。init方法的語法如下:

public void init(ServletConfig config) throws ServletException

4.調用service方法

每當接收到servlet的請求時,Web容器都會調用service方法。如果servlet未初始化,則遵循上述前三個步驟,然後調用service方法。 如果servlet被初始化,它調用service方法。 請注意,servlet僅初始化一次。 Servlet接口的service方法的語法如下:

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

5.調用destroy方法

從服務中刪除servlet實例之前,Web容器調用destroy方法。它使servlet有機會清理所有資源,例如內存,線程等。Servlet接口的destroy方法的語法如下:

public void destroy()

架構圖

下圖描述了一個典型的servlet生命週期場景。

  • 首先將來到服務器的HTTP請求委託給servlet容器。
  • servlet容器在調用service()方法之前加載servlet。
  • 然後,servlet容器通過產生多個線程來處理多個請求,每個線程執行servlet的單個實例的service()方法。

Servlet生命週期