JSP(全稱JavaServer Pages)是由Sun Microsystems公司主導創建的一種動態網頁技術標準。JSP部署于網絡服務器上,可以響應客戶端發送的請求,并根據請求內容動態地生成HTML、XML或其他格式文檔的Web網頁,然后返回給請求者。JSP技術以Java語言作為腳本語言,為用戶的HTTP請求提供服務,并能與服務器上的其它Java程序共同處理復雜的業務需求。
JSP將Java代碼和特定變動內容嵌入到靜態的頁面中,實現以靜態頁面為模板,動態生成其中的部分內容。JSP引入了被稱為“JSP動作”的XML標簽,用來調用內建功能。另外,可以創建JSP標簽庫,然后像使用標準HTML或XML標簽一樣使用它們。標簽庫能增強功能和服務器性能,而且不受跨平臺問題的限制。JSP文件在運行時會被其編譯器轉換成更原始的Servlet代碼。JSP編譯器可以把JSP文件編譯成用Java代碼寫的Servlet,然后再由Java編譯器來編譯成能快速執行的二進制機器碼,也可以直接編譯成二進制碼。
JSP特點
● 能以模板化的方式簡單、高效地添加動態網頁內容。
● 可利用JavaBean和標簽庫技術復用常用的功能代碼(設計好的組件容易實現重復利用,減少重復勞動)。標簽庫不僅帶有通用的內置標簽(JSTL),而且支持可擴展功能的自定義標簽。
●有良好的工具支持。
● 繼承了Java語言的相對易用性。
● 繼承了Java的跨平臺優勢,實現“一次編寫,處處運行”。因為支持Java及其相關技術的開發平臺多,網站開發人員可以選擇在最適合自己的系統平臺上進行JSP開發;不同環境下開發的JSP項目,在所有客戶端上都能順利訪問。
● 頁面中的動(控制變動內容的部分)/靜(內容不需變動的部分)區域以分散但又有序的形式組合在一起,能使人更直觀地看出頁面代碼的整體結構,也使得設計頁面效果和程序邏輯這2部分工作容易分離(外觀視圖與邏輯分離)。從而方便分配人員并發揮各自長處,實現高效地分工合作。
● 可與其它企業級Java技術相互配合。JSP可以只專門負責頁面中的數據呈現,實現分層開發。
● 1.2版本
JSP1.2不支持EL,但可以使用外部的JSTL標簽以便使用EL。
● 2.0版本
JSP 2.0的一個主要特點是它支持表達語言(expression language)。JSTL表達式語言可以使用標記格式方便地訪問JSP的隱含對象和JavaBeans組件,JSTL的核心標記提供了流程和循環控制功能。自制標記也有自定義函數的功能,因此基本上所有scriptlet能實現的功能都可以由JSTL替代。在JSP 2.0中,建議盡量使用EL而使JSP的格式更一致。
● SimpleTag
JSP 2.0中加入了新的創建自制標記的API,javax.servlet.jsp.tagext.SimpleTag定義了用來實現簡單標記的接口。和 JSP 1.2中的已有接口不同的是,SimpleTag接口不使用doStartTag和doEndTag方法,而提供了一個簡單的doTag方法。這個方法在調用該標記時只被使用一次。而需要在一個自制標記中實現的所有邏輯過程、循環和對標記體的評估等都在這個方法中實現。從這個方面來講, SimpleTag和IterationTag可以達到同等的作用。但SimpleTag的方法和處理周期要簡單得多。在SimpleTag中還有用來設置JSP內容的setJspBody和getJspBody方法。Web容器會使用setJspBody方法定義一個代表JSP內容的 JspFragment對象。實現SimpleTag標記的程序可以在doTag方法中根據需要多次調用getJspBody.invoke方法以處理JSP內容。
● 重要功能
JSP2.0中的一個主要功能是JSP fragment,它的基本特點是可以使處理JSP的容器推遲評估JSP標記屬性。我們知道一般JSP是首先評估JSP標記的屬性,然后在處理JSP標記時使用這些屬性,而JSP fragment提供了動態的屬性。也就是說,這些屬性在JSP處理其標記體時是可以被改變的。JSP需要將這樣的屬性定義為 javax.servlet.jsp.tagext.JspFragment類型。當JSP標記設置成這種形式時,這種標記屬性實際上的處理方法類似于標記體。在實現標記的程序中,標記屬性可以被反復評估多次。這種用法稱為JSP fragment。JSP fragment還可以定義在一個SimpleTag處理程序中使用的自制標記動作。像前面例子說明的,getJspBody返回一個 JspFragment對象并可以在doTag方法中多次使用。需要注意的是,使用JSP fragment的JSP只能有一般的文本和JSP action,不能有scriptlet和scriptlet表達式。