JSP(Java Server Pages)是由Sun Microsystems公司倡導、許多公司參與一塊兒創建的一種動態網頁技術標準。JSP技術有點相似ASP技術,它是在傳統的網頁HTML文件(*.htm,*.html)中插入Java程序段(Scriptlet)和JSP標記(tag),從而造成JSP文件,後綴名爲(*.jsp)。 用JSP開發的Web應用是跨平臺的,既能在Linux下運行,也能在其餘操做系統上運行。html
JSP頁面工做原理圖java
當一個JSP文件第一次被請求的時候,JSP引擎(自己也是一個Servlet)首先會把這個JSP文件轉換成一個Java源文件。在轉換過程當中若是發現JSP文件有語法錯誤,轉換過程將中斷,並向服務端和客戶端輸出出錯信息;若是轉換成功,JSP引擎用javac把該Java源文件編譯成相應的.class文件並將該.class文件加載到內存中。web
其次建立一個該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");
}