1. 程式人生 > >Servlet的生命週期?

Servlet的生命週期?

https://blog.csdn.net/jassy1994/article/details/54025471

Servlet的生命週期從Servlet類載入,到建立Servlet類例項,Servlet的初始化(真正成為一個Servlet),有請求到來,呼叫service方法(主要工作),直到Servlet被destroy;

1.Servlet類載入:

1.1 啟動web容器後,容器去尋找應用的部署描述檔案(web.xml),從部署描述檔案中讀取到上下文初始化引數,此時建立一個ServletContext物件,應用的所有部分共享此上下文;

1.2 容器為context-param建立String名值對(引數名和引數值均為String型別);

1.3 容器將名值對交給ServletContext物件;

1.4 如果在部署描述檔案中有Listener標籤的話,建立Listener例項;

1.5 容器呼叫Listener的contextInitialized方法,傳入ServletContextEvent物件,此物件包含一個ServletContext引用,事件處理程式碼可以得到上下文初始化引數。

2.建立Servlet類例項:

2.1 容器讀取部署描述檔案中的Servlet標籤,包括初始化引數(init-param);

2.2 容器建立ServletConfig例項;

2.3 容器為servlet初始化引數建立名值對;

2.4 容器用名值對填充ServletConfig;

2.5 容器建立Servlet類的新例項(一般在第一次請求到來時建立,也可通過設定load-on-start引數在容器啟動時建立)。

3.Servlet初始化:

Servlet的init方法在一個生命週期中只被執行一次,呼叫service方法前,初始化必須完成;

在GenericServlet中有兩個init方法,其中有引數的init方法,呼叫了無參的init方法,所以,若需要重寫init方法,只需要重寫無參的。

4.Servlet的service方法:

每次請求到來,都會呼叫service方法,在HttpServlet中,service方法用於判斷請求的方法(不用重寫),而去重寫doGet方法或doPost方法。

5.Servlet的destroy方法:

銷燬Servlet例項時呼叫,意味著Servlet的生命週期結束。