Servlet生命週期
Web容器維護servlet實例的生命週期。下面來看看servlet的生命週期,主要分爲以下幾個步驟:
- 加載Servlet類,如前面小節中的示例代碼:MyServlet.java。
- 創建Servlet實例。
- 調用Servlet類的
init
方法。 - 調用Servlet類的
service
方法。 - 調用Servlet類的
destroy
方法。
模型流程圖如下所示 -
如上圖所示,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()
方法。