JSP使Java代碼和特定的預定義動作可以嵌入到靜態頁面中。JSP句法增加了被稱為JSP動作的XML標籤,它們用來呼叫內建功能。另外,可以創建JSP標籤函式庫,然後像使用標準HTML或XML標籤一樣使用它們。標籤函式庫提供了一種和平台無關的擴充套件伺服器性能的方法。
JSP被JSP編譯器編譯成Java Servlets。一個JSP編譯器可以把JSP編譯成JAVA代碼寫的servlet然後再由JAVA編譯器來編譯成機器碼,也可以直接編譯成二進位碼。
JSP和Servlets
從架構上說,JSP可以被看作是從Servlets高階提煉而作為JAVA Servlet 2.1 API的擴充套件而應用。Servlets和JSPs最早都是由Sun Microsystems(昇陽公司)開發的。從JSP1.2版本以來,JSP處於Java Community Process(有人譯為:JAVA社群組織)開發模式下。JSR-53規定了JSP 1.2和Servlet 2.4的規範,JSR-152規定了JSP 2.0的規範。2006年5月,JSP 2.1的規範作為Java EE 5的一部份,在JSR-245中發布。
JSP句法
一個JSP頁面可以被分為以下幾部份:
- 靜態資料,如HTML
- JSP指令,如include指令
- JSP指令碼元素和變數
- JSP動作
- 使用者自訂標籤
靜態資料
靜態資料在輸入檔案中的內容和輸出給HTTP響應的內容完全一致。此時,該JSP輸入檔案會是一個沒有內嵌JAVA或動作的HTML頁面。而且,客戶端每次請求都會得到相同的響應內容。
JSP指令
JSP指令控制JSP編譯器如何去生成servlet,以下是可用的指令:
- 包含指令include –包含指令通知JSP編譯器把另外一個檔案完全包含入當前檔案中。效果就好像被包含檔案的內容直接被貼上到當前檔案中一樣。這個功能和C預處理器所提供的很類似。被包含檔案的副檔名一般都是"jspf"(即JSP Fragment,JSP碎片):
- 頁面指令page –頁面指令有以下幾個選項:
import | 使一個JAVA匯入宣告被插入到最終頁面檔案。 |
contentType | 規定了生成內容的型式。當生成非HTML內容或者當前字符集character set並非預設字符集時使用。 |
errorPage | 處理HTTP請求時,如果出現異常則顯示該錯誤提示資訊頁面。 |
isErrorPage | 如果設定為TRUE,則表示當前檔案是一個錯誤提示頁面。 |
isThreadSafe | 表示最終生成的servlet是否安全執行緒(thread safe)。 |
<%@ page import="java.util.*" %> //example import导入样例 <%@ page contentType="text/html" %> //example contentType页面类型样例 <%@ page isErrorPage=false %> //example for non error page无错页面样例 <%@ page isThreadSafe=true %> //example for a thread safe JSP安全线程JSP样例会
注意:在同一個JSP檔案中只有"import"匯入頁面指令可以被多次使用。
- 標籤函式庫指令taglib –標籤函式庫指令描述了要使用的JSP標籤函式庫。該指令需要指定一個前綴prefix(和C++的名稱空間很類似)和標籤函式庫的描述URI:
JSP指令碼元素和變數
標準指令碼變數
以下是永遠可用的指令碼變數:
- out – JSPWriter用來寫入響應流的資料
- page – servlet自身
- pageContext –一個PageContext例項包括和整個頁面相聯繫的資料,一個給定的HTML頁面可以在多個JSP之間傳遞。
- request – HTTP request物件
- response – HTTP response物件
- session – HTTP session物件,在多個請求之間追蹤一個客戶的資訊。
指令碼元素
有三個基本的指令碼元素,作用是使JAVA代碼可以直接插入servlet.
一種是宣告標籤,在JAVA SERVLET的類體中放入一個變數的定義。靜態的成員變數也可以如此定義。
<%! int serverInstanceVariable = 1; %>
一種是指令碼標籤,在JAVA SERVLET的類的_jspService()方法中放入所包含的語句。
<% int localStackBasedVariable = 1; out.println(localStackBasedVariable); %>
一種是運算式標籤,在JAVA SERVLET的類中放入待賦值的運算式,運算式注意不能以分號結尾。
<%= "expanded inline data " + 1 %>
JSP動作JSP動作是一系列可以呼叫內建於網路伺服器中的功能的XML標籤。JSP提供了以下動作:
jsp:include | 和子過程類似,JAVA SERVLET暫時接管對其它指定的JSP頁的請求和響應。當處理完該JSP頁後就馬上把控制權交還當前JSP頁。這樣JSP代碼就可以在多個JSP頁中共享而不用複製。 |
jsp:param | 可以在jsp:include, jsp:forward或jsp:params塊之間使用。指定一個將加入請求的當前參陣列中的參數。 |
jsp:forward | 用於處理對另一個JSP或SERVLET的請求和響應。控制權永遠不會交還給當前JSP頁。 |
jsp:plugin | [url=/zh-tw/Netscape_Navigator]Netscape Navigator[/url]的老版本和[url=/zh-tw/Internet_Explorer]Internet Explorer[/url]使用不同的標籤以嵌入一個[url=/w/index.php?title=Java_applet&action=edit&redlink=1]applet[/url]。這個動作產生為嵌入一個APPLET所需要的指定瀏覽器標籤。 |
jsp:fallback | 如果瀏覽器不支援APPLETS則會顯示的內容。 |
jsp:getProperty | 從指定的[url=/w/index.php?title=JavaBeans&action=edit&redlink=1]JavaBean[/url]中獲取一個屬性值。 |
jsp:setProperty | 在指定的JavaBean中設定一個屬性值。 |
jsp:useBean | 創建或者復用一個JavaBean變數到JSP頁。 |
jsp:include | 和子過程類似,JAVA SERVLET暫時接管對其它指定的JSP頁的請求和響應。當處理完該JSP頁後就馬上把控制權交還當前JSP頁。這樣JSP代碼就可以在多個JSP頁中共享而不用複製。 |
jsp:param | 可以在jsp:include, jsp:forward或jsp:params塊之間使用。指定一個將加入請求的當前參陣列中的參數。 |
jsp:forward | 用於處理對另一個JSP或SERVLET的請求和響應。控制權永遠不會交還給當前JSP頁。 |
jsp:plugin | [url=/zh-tw/Netscape_Navigator]Netscape Navigator[/url]的老版本和[url=/zh-tw/Internet_Explorer]Internet Explorer[/url]使用不同的標籤以嵌入一個[url=/w/index.php?title=Java_applet&action=edit&redlink=1]applet[/url]。這個動作產生為嵌入一個APPLET所需要的指定瀏覽器標籤。 |
jsp:fallback | 如果瀏覽器不支援APPLETS則會顯示的內容。 |
jsp:getProperty | 從指定的[url=/w/index.php?title=JavaBeans&action=edit&redlink=1]JavaBean[/url]中獲取一個屬性值。 |
jsp:setProperty | 在指定的JavaBean中設定一個屬性值。 |
jsp:useBean | 創建或者復用一個JavaBean變數到JSP頁。 |
詳全文:http://zh.wikipedia.org/zh-tw/JSP
沒有留言:
張貼留言