Servlet的加載(執行過程,原理)和生命周期


 

Web服務器(tomcat,即Servlet容器)裝載,執行並管理Servlet的過程
l 客戶向服務器發送對頁面的請求。Web服務器將請求轉化為
ServletRequest 對象
l 如果Servlet還沒有裝入(加載),服務器就裝入它。-------------servlet實例化成對象

Servlet是位於Web 服務器內部的服務器端的Java應用程序,與傳統的
從命令行啟動的Java應用程序不同,Servlet由Web服務器進行加載,
該Web服務器必須包含 支持Servlet的Java虛擬機。


l 服務器把請求信息送給Servlet,給每一個請求創建一個執行的新線程。-------servlet初始化init()
l Serlvet執行service()方法,處理這個請求,生成一個響應並傳遞給服務器。
l 服務器(Servlet容器,tomcat)把響應返回給客戶端

 

 

 

 

 

 

Servlet 容器(即tomcat)創建 Servlet 的一個實例
l Servlet 的生命周期就是指創建 Servlet 實例之后其存在的時間以及何時消

l 生命周期的 3個方法為:

init()

當Servlet被Servlet容器載入后,程序的init()方法會被Servlet容器自動調用。
因此如果希望web應用在啟動時預先執行一些初始化的操作,就可以把實現這
些操作的代碼寫在一個Servlet程序的init()中。一旦初始化方法完成,
Servlet就能接收客戶端的請求。

一個Servlet在生命周期中只能初始化一次,所以對Servlet進行了修改,需要重
啟Tomcat。Tomcat配置中也可以配置自動重載,conf/ser ver.xml中的
<context>元素有一個reloadable屬性

service()

service()方法是抽象方法,
GenericServlet的子類必須重寫該方法。

 

destroy()

 

 

 

Sevlet生命周期:指Servlet對象在服務器內存中從創建到調用,到銷毀的整個過程,主要研究該過程中哪些方法對我
們的開發有用。
(1)實例化:當客戶端通過URL請求的時候,web容器根據web xm配置自動調用該Srvlet的構造方法,實例化對
象。
(2)初始化:通過該sevlet對象調用nit)方法,讀取web xml中該servlet的配置信息,為sevice方法提供相關數據。
(3)服務:通過該對象調用service(萬方法,如果是繼承HtpSevlet,則根據請求頭信息中的請求方法,調用對應的
doGet()/doPost()
(4)銷毀:不是在service0萬方法調用完后,立即調用,而是由JVM來決定。當JVM需要銷毀一些對象、 釋放內存空間

的時候,才會去調用該實例的destroy(方法。

 

Servlet生命周期
1.web服務器啟動時,會對servlet進行實例化操作
2.第一次訪問servlet時,會調用init方法進行初始化操作,這個操作只進行一次
3.每次訪問servlet時,都會調用service方法進行真正的請求和響應
4.web服務器關閉時,會調用destroy進行銷毀操作
5.在整個生命周期期間,init()和destroy()都各執行一次
6.與web服務器同生共死

 

Servlet體系結構是建立在Java多線程機制之上的,它的生命周期是由Web
容器負責的。
l 當客戶端第一次請求某個Servlet時,Servlet 容器將會根據web.xml配置
文件實例化這個Servlet類。當有新的客戶端請求該Servlet時,一般不會再
實例化該Servlet類,也就是有 多個線程在使用這個實例。
l Servlet容器會自動使用線程池等技術來支持系統的運行

 

 

 

 

 

HttpServlet在javax.servlet.http包中,它擴展了GenericServlet類。
HttpServlet類定義了service()方法和六個doXXX()方法。
l HttpServlet中處理客戶端請求的業務邏輯代碼是在doXXX()方法中實現,
不是在Service()方法中實現的。 HttpServlet類對Service()方法做了重置,
它實現的業務邏輯功能是:根據客戶端HTTP請求類型決定應該調用哪個
doXXX()方法來處理客戶端的請求。

如果選擇HttpServlet為Servlet程序的父類,沒有必要重置service()方法,
而是應該根據Http請求的類型,重置相應的 doXXX()方法來處理客戶端請
求。

 

web容器將http請求,封裝在HttpServletRequest對象中,並產生一個
HttpServletResponse對象,以這兩個對象做為參數,調用doXXX()方
法。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM