Java Servlet和JSP教程(11)(轉)

post0發表於2007-08-11
Java Servlet和JSP教程(11)(轉)[@more@]

此篇是本站CnJSP小組核心成員鈍刀原創作品

11 JSP

11.1 JSP概述

JavaServer Pages (JSP)使得我們能夠分離頁面的靜態HTML和動態部分。HTML可以用任何通常使用的Web製作工具編寫,編寫方式也和原來的一樣;動態部分的程式碼放入特殊標記之內,大部分以“”結束。例如,下面是一個JSP頁面的片斷,如果我們用http: //host/OrderConfirmation.jsp?title=Core+Web+Programming這個URL開啟該頁面,則結果顯示 “Thanks for ordering Core Web Programming”。

Thanks for ordering

JSP 頁面檔案通常以.jsp為副檔名,而且可以安裝到任何能夠存放普通Web頁面的地方。雖然從程式碼編寫來看,JSP頁面更象普通Web頁面而不象 Servlet,但實際上,JSP最終會被轉換成正規的Servlet,靜態HTML直接輸出到和Servlet service方法關聯的輸出流。

JSP到Servlet的轉換過程一般在出現第一次頁面請求時進行。因此,如果你希望第一個使用者不會由於JSP頁面轉換成Servlet而等待太長的時間,希望確保Servlet已經正確地編譯並裝載,你可以在安裝JSP頁面之後自己請求一下這個頁面。

另外也請注意,許多Web伺服器允許定義別名,所以一個看起來指向HTML檔案的URL實際上可能指向Servlet或JSP頁面。

除了普通HTML程式碼之外,嵌入JSP頁面的其他成分主要有如下三種:指令碼元素(Scripting Element),指令(Directive),動作(Action)。指令碼元素用來嵌入Java程式碼,這些Java程式碼將成為轉換得到的Servlet的一部分;JSP指令用來從整體上控制 Servlet的結構;動作用來引入現有的元件或者控制JSP引擎的行為。為了簡化指令碼元素,JSP定義了一組可以直接使用的變數(預定義變數),比如前面程式碼片斷中的request就是其中一例。

注意本文以JSP 1.0規範為基礎。和0.92版相比,新版本的JSP作了許多重大的改動。雖然這些改動只會使JSP變得更好,但應注意1.0的JSP頁面幾乎和早期的JSP引擎完全不相容。

11.2 JSP語法概要表

JSP元素 語法 說明 備註

JSP表示式 計算表示式並輸出結果 等價的XML表達是:

expression

可以使用的預定義變數包括:request,response,out,session,application,config,pageContext。這些預定義變數也可以在JSP Scriptlet中使用。

JSP Scriptlet 插入到service方法的程式碼。 等價的XML表達是:

code

JSP宣告 程式碼被插入到Servlet類(在service方法之外) 等價的XML表達是:

code

page指令 作用於Servlet引擎的全域性性指令 等價的XML表達是

合法的屬性如下表,其中粗體表示預設值:

import="package.class"

contentType="MIME-Type"

isThreadSafe="true|false"

session="true|false"

buffer="size kb|none"

autoflush="true|false"

extends="package.class"

info="message"

errorPage="url"

isErrorPage="true|false"

language="java"

include指令 當JSP轉換成Servlet時,應當包含本地系統上的指定檔案 等價的XML表達是:

其中URL必須是相對URL。

利用jsp:include動作可以在請求的時候(而不是JSP轉換成Servlet時)引入檔案。

JSP註釋 註釋;JSP轉換成Servlet時被忽略 如果要把註釋嵌入結果HTML文件,使用普通的HTML註釋標記jsp:include動作 當Servlet被請求時,引入指定的檔案 如果你希望在頁面轉換的時候包含某個檔案,使用JSP include指令

注意:在某些伺服器上,被包含檔案必須是HTML檔案或JSP檔案,具體由伺服器決定(通常根據副檔名判斷)。

jsp:useBean動作 或者

...

尋找或例項化一個Java Bean 可能的屬性包括:

id="name"

scope="page|request

|session|application"

class="package.class"

type="package.class"

beanName="package.class"

jsp:setProperty動作 設定Bean的屬性,既可以設定一個確定的值,也可以指定屬性值來自請求引數。 合法的屬性包括:

name="beanName"

property="propertyName|*"

param="parameterName"

value="val"

jsp:getProperty動作 name="propertyName"

value="val"/> 提取並輸出Bean的屬性。

jsp:forward動作 page="relative URL"/> 把請求轉到另外一個頁面。

jsp:plugin動作 attribute="value"*>

...

根據瀏覽器型別生成OBJECT或者EMBED標記,以便透過Java Plugin執行Java Applet。

11.3 關於模板文字(靜態HTML)

許多時候,JSP頁面的很大一部分都由靜態HTML構成,這些靜態HTML也稱為“模板文字”。模板文字和普通HTML幾乎完全相同,它們都遵從相同的語法規則,而且模板文字也是被Servlet直接傳送到客戶端。此外,模板文字也可以用任何現有的頁面製作工具來編寫。

唯一的例外在於,如果要輸出“

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/8225414/viewspace-946047/,如需轉載,請註明出處,否則將追究法律責任。

相關文章