1.JSP 簡介
JSP(Java Server Pages)是由Sun Microsystems公司倡導、許多公司參與一起建立的一種動態網頁技術標准。JSP技術有點類似ASP技術,它是在傳統的網頁HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP標記(tag),從而形成JSP文件,后綴名為(*.jsp)。 用JSP開發的Web應用是跨平台的,既能在Linux下運行,也能在其他操作系統上運行。
2.JSP 工作原理
JSP頁面工作原理圖
當一個JSP文件第一次被請求的時候,JSP引擎(本身也是一個Servlet)首先會把這個JSP文件轉換成一個Java源文件。在轉換過程中如果發現JSP文件有語法錯誤,轉換過程將中斷,並向服務端和客戶端輸出出錯信息;如果轉換成功,JSP引擎用javac把該Java源文件編譯成相應的.class文件並將該.class文件加載到內存中。
其次創建一個該Servlet的實例,並執行該實例的jspInit()方法(jspInit()方法在Servlet的生命周期中只被執行一次)。
然后創建並啟動一個新的線程,新線程調用實例的jspService()方法。(對於每一個請求,JSP引擎會創建一個新的線程來處理該請求。如果有多個客戶端同時請求該JSP文件,則JSP引擎會創建多個線程,每個客戶端請求對應一個線程)。
瀏覽器在調用JSP文件時,Servlet容器會把瀏覽器的請求和對瀏覽器的回應封裝成HttpServletRequest和HttpServletResponse對象,同時調用對應的Servlet實例中的jspService()方法,把這兩個對象作為參數傳遞到jspService()方法中。
jspService()方法執行后會將HTML內容返回給客戶端。
如果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");
}