標籤:
什麼是JavaServer Pages?
JSP(全稱Java ServerPages)是由SunMicrosystems公司倡導和許多公司參與共同建立的一種使軟體開發人員可以響應用戶端請求,而動態
生成HTML、XML或其他格式文檔的Web網頁的技術標準。
從上面的話不難看出JSP的核心是:能夠及時響應客戶請求的動態網頁開發技術。它使用JSP的標籤在HTML網頁中插入Java代碼。標籤通常以
<%開頭以%>結束。
JSP的本質是Java servlet,主要用於實現Javaweb應用程式的使用者介面部分。在經典MVC架構中充當的是View視圖部分。
為什麼使用JSP?
JSP開發的WEB應用可以跨平台使用,既可以運行在Linux上也能運行在Window上。真正實現Java所謂的一次編譯,到處運行。。
JSP通過網頁表單擷取使用者輸入資料、訪問資料庫及其他資料來源,然後動態地建立網頁。
JSP的標籤有多種功能,比如訪問資料庫、記錄使用者選擇資訊、訪問JavaBeans組件等,還可以在不同的網頁中傳遞控制資訊和共用資訊。
JSP 生命週期
理解JSP底層功能的關鍵就是去理解它們所遵守的生命週期。
JSP生命週期就是從建立到銷毀的整個過程,我們可以拿來servlet的生命週期做對比,當然區別僅僅在於JSP生命週期多了一步將JSP檔案編譯成servlet。
以下是JSP生命週期中所走過的幾個階段:
- 編譯階段:
servlet容器編譯servlet源檔案,產生servlet類
- 初始化階段:
載入與JSP對應的servlet類,建立其執行個體,並調用它的初始化方法
- 執行階段:
調用與JSP對應的servlet執行個體的服務方法
- 銷毀階段:
調用與JSP對應的servlet執行個體的銷毀方法,然後銷毀servlet執行個體
JSP編譯
當瀏覽器請求JSP頁面時,JSP引擎會首先去檢查是否需要編譯這個檔案。如果這個檔案沒有被編譯過,或者在上次編譯後被更改過,則編譯這個JSP檔案。編譯的過程包括三個步驟:
- 解析JSP檔案。
- 將JSP檔案轉為servlet。
- 編譯servlet。
初始化jspInit()
容器載入JSP檔案後,它會在為請求提供任何服務前調用jspInit()方法。如果您需要執行自訂的JSP初始化任務,複寫jspInit()方法就行了,就像下面這樣:
public void jspInit(){
// 初始化代碼
}
一般來講程式只初始化一次,servlet也是如此。通常情況下您可以在jspInit()方法中初始化資料庫連接、開啟檔案和建立查詢表。
JSP執行
這一階段描述了JSP生命週期中一切與請求相關的互動行為,直到被銷毀。
當JSP網頁完成初始化後,JSP引擎將會調用_jspService()方法。
_jspService()方法需要一個HttpServletRequest對象和一個HttpServletResponse對象作為它的參數,就像下面這樣:
void _jspService(HttpServletRequestrequest,
HttpServletResponseresponse)
{
// 服務端處理代碼
}
_jspService()方法在每個request中被調用一次並且負責產生與之相對應的response,並且它還負責產生所有7個HTTP方法的回應,比如GET、POST、DELETE等等。
JSP清理
JSP生命週期的銷毀階段描述了當一個JSP網頁從容器中被移除時所發生的一切。
jspDestroy()方法在JSP中等價於servlet中的銷毀方法。當您需要執行任何清理工作時複寫jspDestroy()方法,比如釋放資料庫連接或者關閉檔案夾等等。
jspDestroy()方法的格式如下:
public void jspDestroy()
{
// 清理代碼
}
JSP執行個體
JSP生命週期代碼執行個體如下所示:
<%@ page contentType="text/html; charset=GB2312" %><html><head><title>life.jsp</title></head><body><%! private int initVar=0; private int serviceVar=0; private int destroyVar=0;%> <%! public void jspInit(){ initVar++; System.out.println("jspInit(): JSP被初始化了"+initVar+"次"); } public void jspDestroy(){ destroyVar++; System.out.println("jspDestroy(): JSP被銷毀了"+destroyVar+"次"); }%><% serviceVar++; System.out.println("_jspService(): JSP共響應了"+serviceVar+"次請求");String content1="初始化次數 : "+initVar; String content2="響應客戶請求次數 : "+serviceVar; String content3="銷毀次數 : "+destroyVar;%><h1><%=content1 %></h1><h1><%=content2 %></h1><h1><%=content3 %></h1></body></html>
JSP與PHP、ASP的對比
PHP文法簡單,非常易學易用,很利於快速開發各種功能不同的定製網站,PHP因為結構上的缺陷,使的PHP在複雜的大型項目上的開發和維護
都比較困難。
JSP和PHP一樣,簡單而易於維護,很適合小型網站應用程式,通過DCOM和MTS技術,ASP甚至還可以完成小規模的公司專屬應用程式,但ASP的致命缺點
就是不支援跨平台的系統,在大型項目開發和維護上非常困難。
JSP本身雖然也是指令碼語言,但是卻和PHP、ASP有著本質的區別。PHP和ASP都是由語言引擎解釋執行程式代碼,而JSP代碼卻被編譯成
Servlet並由Java虛擬機器執行,這種編譯操作僅在對JSP頁面的第一次請求時發生。因此JSP的執行效率比PHP和ASP都要高一些。
當然顯而易見JSP與ASP相比具有兩大優勢。首先,動態部分用Java編寫,而不是VB或其他MS專用語言,所以更加強大與易用。第二點就是JSP
易於移植到非MS平台上,支援跨平台。
當然每種技術都有其存在的必要性,我們要做的就是在合適的時機選擇合適的技術,以滿足我們的需求。
J2EE的13 規範之解讀JSP