當web服務器上的jsp頁面第一次被請求執行時,jsp引擎先將jsp頁面文件轉義成一個servlet,而這個引擎本身也是一個servlet,對此過程的詳細描述如下:
當web服務器上的jsp頁面第一次被請求執行時,jsp引擎先將jsp頁面文件轉義成一個servlet,而這個引擎本身也是一個servlet,對此過程的詳細描述如下:
1、jsp引擎先把jsp文件轉換成一個java源文件,即servlet,在轉換時如果發現jsp文件有任何語法錯誤,轉換過程將終端,并分別在服務器端和客戶端提示出錯信息。
2、如果轉換成功,jsp引擎用javac把該java源文件編譯成相應的class文件。
3、創建一個該servlet的對象,該servlet的jsplnit()方法被執行,jsplnit()方法在servlet的生命周期中只被執行一次。
4、jspservice()方法被調用來處理客戶端的請求。對每一個請求,jsp引擎創建一個新的線程來處理該請求。如果有多個客戶端同時請求該jsp文件,則jsp引擎會創建多個線程,每個客戶端請求對應一個線程。以多線程方式執行可以大大降低對系統的資源需求,提高系統的并發量及響應時間。但也應該注意多線程的編程限制,由于該servlet適中駐于內存,所以響應是非??斓?。
5、如果.jsp文件被修改了,服務器將根據設置決定是否對該文件重新編譯,如果需要重新編譯,則將編譯結果取代內存中的servlet,將繼續上述處理過程。
6、雖然jsp效率很高,但在第一次調用時由于需要轉換和編譯而又一些輕微的延遲。此外,在任何時候如果由于系統資源不足,jsp引擎將以某種不確定的方式將servlet從內存中移去。當這種情況發生時,jspdestroy()方法首先被調用。
7、然后servlet對象便被標記加入“垃圾收集”處理??稍趈splnit()中進行一些初始化工作,如建立與數據庫的鏈接,或建立網絡鏈接,從配置文件中取一些參數等,在jspdestroy()中釋放相應的資源。