1. 程式人生 > >JSP工作原理及執行流程

JSP工作原理及執行流程

**JSP:**全稱是Java Server Pages,它和servle技術一樣,都是SUN公司定義的一種用於開發動態web資源的技術。JSP的本質是servlet, 通過response的printWriter返回,response的getOutputStream只能呼叫一次,返回流就不能返回頁面重新整理。
#####一、JSP工作原理
1.當一個JSP檔案第一次被請求的時候,JSP引擎(本身也是一個Servlet)首先會把這個JSP檔案轉換成一個Java原始檔。在轉換過程中如果發現JSP檔案有語法錯誤,轉換過程將中斷,並向服務端和客戶端輸出出錯資訊;如果轉換成功,JSP引擎用javac把該Java原始檔編譯成相應的.class檔案並將該.class檔案載入到記憶體中。

2.其次建立一個該Servlet的例項,並執行該例項的jspInit()方法(jspInit()方法在Servlet的生命週期中只被執行一次)。

3.然後建立並啟動一個新的執行緒,新執行緒呼叫例項的jspService()方法。(對於每一個請求,JSP引擎會建立一個新的執行緒來處理該請求。如果有多個客戶端同時請求該JSP檔案,則JSP引擎會建立多個執行緒,每個客戶端請求對應一個執行緒)。

4.瀏覽器在呼叫JSP檔案時,Servlet容器會把瀏覽器的請求和對瀏覽器的迴應封裝成HttpServletRequest和HttpServletResponse物件,同時呼叫對應的Servlet例項中的jspService()方法,把這兩個物件作為引數傳遞到jspService()方法中。

5.jspService()方法執行後會將HTML內容返回給客戶端。

6.如果JSP檔案被修改了,伺服器將根據設定決定是否對該檔案進行重新編譯。如果需要重新編譯,則將編譯結果取代記憶體中的Servlet,並繼續上述處理過程。 如果在任何時候由於系統資源不足,JSP引擎將以某種不確定的方式將Servlet從記憶體中移去。當這種情況發生時,jspDestroy()方法首先被呼叫, 然後Servlet例項便被標記加入“垃圾收集”處理。

以多執行緒方式執行可大大降低對系統的資源需求,提高系統的併發量及響應時間,但應該注意多執行緒的程式設計限制,由於該Servlet始終駐於記憶體,所以響應是非常快的。
雖然JSP效率很高,但在第一次呼叫時由於需要轉換和編譯而有一些輕微的延遲。

在jspInit()中可以進行一些初始化工作,如建立與資料庫的連線、建立網路連線、從配置檔案中獲取一些引數等,而在jspDestory()中釋放相應的資源。

JSP生命週期init() 和destory()

jspInit()及jspDestory()格式如下:

public void jspInit()      
 { 
     System.out.println("jspinit");   
 } 
public void jspDestory()    
 { 
    System.out.println("jspDestory");
}

#####二、執行流程

圖片.png

圖片.png

1.客戶端發出請求,請求為JSP,web容器就會找出相應的servlet進行處理
2.將servlet轉成位元組碼檔案
3.將位元組碼檔案載入到web容器裡
4.這時會在web容器裡建立例項
5.進行初始化
6.通過service接受請求
7.然後web容器會自動產生兩個物件servlet和service最後進行銷燬