Servlet生命周期分為四個階段:
1:構造方法: 建立servlet對象的時候調用。預設情況下,第一次通路servlet的時候建立servlet對象隻調用1次。證明servlet對象在tomcat是單執行個體的。
2:init方法: 建立完servlet對象的時候調用。隻調用1次。
3:service方法: 每次送出請求時調用。調用n次。
4:destroy方法: 銷毀servlet對象的時候調用。停止伺服器或者重新部署web應用時銷毀servlet對象。隻調用1次。
Servlet的生命周期指的是 Servlet從被Web伺服器加載到它被銷毀的整個生命過程
Web伺服器加載Servlet:Web伺服器啟動後,它會根據每個工程的web.xml檔案去查找該工程的Servlet,并且找到這些Servlet的Class檔案所在的位址,将它們載入到Web容器中,不同的Servlet被Web容器加載的次序不同,通過web.xml檔案可以配置每個Servlet載入的次序。一般來說,Servlet在伺服器啟動時就會被Web伺服器加載,而JSP檔案隻有在使用者通路到該頁面時才會被動态載入。
建立一個Servlet執行個體:這時會調用該Servlet的構造函數去建立一個具體的對象。
經過以上的兩個步驟後,這時如果有用戶端請求,Web伺服器就會調用Servlet對象的init()方法
接着Web伺服器調用Servlet的service()方法去接收請求,處理請求,并把處理結果傳回。
銷毀:Servlet執行個體被銷毀,這是通過調用Servlet的destory()方法來實作的。
在以上的幾個階段中,Servlet對外提供服務階段最重要的。service()方法是程式設計人員真正要關心的方法,因為它才是Servlet真正開始響應用戶端請求,并且處理業務邏輯的方法。Service()接收到用戶端請求後,再調用Servlet的doGet()方法或者doPost()方法去處理請求。是以在編寫自己的Servlet時,一般隻需要重寫doGet()和doPost()方法,在該方法中去處理用戶端請求,并把處理結果傳回。

步驟:
1:Web Client向Servlet容器(tomcat)發出Http請求
2:Servlet容器接收Web Client的請求
3:Servlet容器建立一個HttpRequest對象,将Web Client請求的資訊封裝到這個對象中。
4:Servlet容器建立一個HttpResponse對象
5:Servlet容器調用HttpServlet對象的service方法,把HttpRequest對象與HttpResponse對象作為參數傳遞給HttpServlet對象。
6:HttpServlet調用HttpRequest對象的有關方法,擷取Http請求資訊
7:HttpServlet調用HttpResponse對象的有關方法,生成響應資料
8:Servlet容器把HttpServlet的響應結果傳入Web Client。
工作原理:
先解釋Servlet接收和響應客戶請求的過程,首先客戶發送個請求,Servlet容器會建立特定于這個請求的ServletRequest對象和ServletResponse對象,然後調用Servlet的service()方法。Service()方法從ServletRequest對象獲得客戶請求資訊,處理該請求,然後通過ServletResponse對象向客戶傳回響應資訊。
建立Servlet對象的時機
1:Servlet容器啟動時:讀取web.xml配置檔案中的資訊,構造指定的Servlet對象,建立ServletConfig對象,同時将ServletConfig對象作為參數來調用Servlet對象的init方法。
2:在Servlet容器啟動後:客戶首次向Servlet送出請求,Servlet容器會判斷記憶體中是否存在指定的Servlet對象,如果沒有則建立它,然後根據客戶的請求建立HttpRequest、HttpResponse對象,進而調用Servlet 對象的service方法。
3:Servlet Servlet容器在啟動時自動建立Servlet,這是由在web.xml檔案中為Servlet設定的
屬性決定的。從中我們也能看到同一個類型的Servlet對象在Servlet容器中以單例的形式存在。
<load-on-startup>
<servlet>
<servlet-name>Init</servlet-name>
<servlet-class>org.xl.servlet.InitServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
- 1
- 2
- 3
- 4
- 5
參考部落格:
http://www.cnblogs.com/xuekyo/archive/2013/02/24/2924072.html
https://blog.csdn.net/a3060858469/article/details/78120527