2011年11月26日 星期六

何謂JSP?

JSP(全稱JavaServer Pages)是由Sun Microsystems公司倡導和許多公司參與共同建立的一種使軟體開發者可以響應客戶端請求,而動態生成HTMLXML或其他格式文檔的Web網頁的技術標準。JSP技術是以Java語言作為指令碼語言的,JSP網頁為整個伺服器端的Java函式庫單元提供了一個介面來服務於HTTP的應用程式。
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碎片):
<%@ include file="somefile.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:
<%@ taglib prefix="myprefix" uri="taglib/mytag.tld" %>

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

沒有留言:

張貼留言