JSP 操作使用 XML 語法結(jié)構(gòu)來控制 servlet 引擎的行為。你可以動(dòng)態(tài)地插入一個(gè)文件,重組 JavaBean 組件,將用戶轉(zhuǎn)換到另一個(gè)頁面,或?yàn)?Java 插件生成 HTML。
操作元素只有一個(gè)語法,因?yàn)樗?XML 標(biāo)準(zhǔn):
<jsp:action_name attribute="value" />
動(dòng)作元素基本上是預(yù)定義的函數(shù),有以下 JSP 操作:
語法 | 目的 |
---|---|
jsp:include | 當(dāng)請(qǐng)求頁面時(shí),包含一個(gè)文件 |
jsp:useBean | 發(fā)現(xiàn)或?qū)嵗粋€(gè) JavaBean |
jsp:setProperty | JavaBean 的屬性集 |
jsp:getProperty | 將 JavaBean 的屬性嵌入到輸出中 |
jsp:forward | 將請(qǐng)求轉(zhuǎn)發(fā)給一個(gè)新頁面 |
jsp:plugin | 生成瀏覽器-特定代碼,為 Java 插件創(chuàng)建 OBJECT 或 EMBED 標(biāo)簽 |
jsp:element | 動(dòng)態(tài)的定義 XML 元素 |
jsp:attribute | 定義了動(dòng)態(tài)定義的 XML 元素的屬性 |
jsp:body | 定義了動(dòng)態(tài)定義 XML 元素的 body |
jsp:text | 用于在 JSP 頁面和文檔中編寫模板 |
對(duì)于所有的操作元素來說,有兩個(gè)屬性是共同的:id 屬性和 scope 屬性。
Id 屬性: Id 屬性惟一地標(biāo)識(shí)操作元素,并允許在 JSP 頁面內(nèi)引用操作。如果操作創(chuàng)建了一個(gè)對(duì)象的一個(gè)實(shí)例,那么 id 值可以通過隱式對(duì)象 PageContext 來引用該操作
<jsp:include>
操作此操作允許你將文件插入到將要生成的頁面中。語法如下:
<jsp:include page="relative URL" flush="true" />
該操作與包含指令不同,包含指令在 JSP 頁面轉(zhuǎn)換成 servlet 時(shí)插入文件,該操作在請(qǐng)求頁面時(shí)插入文件。
下面是與包含操作相關(guān)的屬性列表:
屬性 | 描述 |
---|---|
page | 要被包含的頁面的相對(duì) URL。 |
flush | 布爾屬性決定了包含的資源在被包含之前其緩沖區(qū)是否刷新。 |
讓我們定義以下兩個(gè)文件(a)date.jsp 和(b)main.jsp,如下:
以下是 date.jsp 文件的內(nèi)容:
<p> Today's date: <%= (new java.util.Date()).toLocaleString()%> </p>
以下是 main.jsp 文件的內(nèi)容:
<html> <head> <title>The include Action Example</title> </head> <body> <center> <h2>The include action Example</h2> <jsp:include page="date.jsp" flush="true" /> </center> </body> </html>
現(xiàn)在讓我們把所有這些文件保存在在根目錄中,并試圖訪問 main.jsp。這將顯示如下所示結(jié)果:
The include action Example
Today's date: 12-Sep-2010 14:54:22
<jsp:useBean>
操作useBean 操作具有多種用途。它首先利用 id 和 scope 變量搜索現(xiàn)有對(duì)象。如果沒有找到一個(gè)對(duì)象,那么它會(huì)試圖創(chuàng)建指定的對(duì)象。
加載 bean 的最簡單的方式如下:
<jsp:useBean id="name" class="package.class" />
加載 bean 類完成后,你可以使用 jsp:setProperty 和 jsp:getProperty 操作來修改和檢索 bean 屬性。
下面是與 useBean 操作關(guān)聯(lián)的屬性列表:
屬性 | 描述 |
---|---|
class | 指定 bean 的全部包名。 |
type | 指定將在對(duì)象中引用的變量的類型。 |
beanName | 通過 java.beans.Beans 類中的 instantiate()方法給定 bean 名稱。 |
在給出與這些操作有關(guān)的有效的例子之前,讓我們先討論一下 jsp:setProperty 和 jsp:getProperty 操作。
<jsp:setProperty>
操作setProperty 操作設(shè)置了 Bean 的屬性。在定義該操作之前, Bean 一定已經(jīng)預(yù)定義了。有兩種使用 setProperty 操作的基本的方式:
你可以使用 jsp:setProperty 之后,但是在該操作外面,使用一個(gè) jsp:useBean 元素,如下所示:
<jsp:useBean id="myName" ... />
...
<jsp:setProperty name="myName" property="someProperty" .../>
在這種情況下,無論新的 bean 是否實(shí)例化或現(xiàn)有的 bean 是否被發(fā)現(xiàn),jsp:setProperty 都會(huì)被執(zhí)行。
jsp:setProperty 可以出現(xiàn)的第二個(gè)背景是在 jsp:useBean 元素內(nèi)部,如下所示:
<jsp:useBean id="myName" ... >
...
<jsp:setProperty name="myName" property="someProperty" .../>
</jsp:useBean>
這里,當(dāng)且僅當(dāng)實(shí)例化一個(gè)新對(duì)象時(shí),jsp:setProperty 才會(huì)被執(zhí)行,如果一個(gè)現(xiàn)有的對(duì)象被發(fā)現(xiàn)時(shí),它不會(huì)被執(zhí)行。
下面是與 setProperty 操作相關(guān)的屬性列表:
屬性 | 描述 |
---|---|
name | 指定了將被設(shè)置屬性的 bean。該 Bean 一定是之前定義的。 |
property | 表明了你想設(shè)置的屬性。值為“*”意味著所有請(qǐng)求的名字與 bean 屬性名字匹配的參數(shù)將被傳遞給適當(dāng)?shù)?setter 方法。 |
value | 值分配給給定屬性的值。參數(shù)的值為 null 或參數(shù)不存在時(shí),setProperty 操作將被忽略。 |
param | param 屬性是請(qǐng)求參數(shù)的名稱,該屬性會(huì)接收該請(qǐng)求參數(shù)的值。你不能同時(shí)使用值和參數(shù),但是使用其中的一個(gè)是允許的。 |
<jsp:getProperty>
操作getProperty 操作用于檢索給定屬性的值并將它轉(zhuǎn)換成一個(gè)字符串,并最終將它插入到輸出中。
getProperty 操作只有兩個(gè)屬性,兩者都是必需的,其簡單的語法如下所示:
<jsp:useBean id="myName" ... />
...
<jsp:getProperty name="myName" property="someProperty" .../>
以下是與 setProperty 操作相關(guān)的屬性屬性列表:
屬性 | 描述 |
---|---|
name | 有檢索屬性的 Bean 的名稱。Bean 一定是之前定義的。 |
property | property 屬性是要被檢索的 Bean 屬性的名稱。 |
讓我們定義一個(gè)測(cè)試的 bean,在例子中使用如下所示:
/* File: TestBean.java */
package action;
public class TestBean {
private String message = "No message specified";
public String getMessage() {
return(message);
}
public void setMessage(String message) {
this.message = message;
}
}
編譯以上代碼生成 TestBean.class 文件并確保將 TestBean.class 復(fù)制在 C:\ apache-tomcat-7.0.2 \ webapps \ web - inf \ classes \action 文件夾中,且類路徑變量也應(yīng)設(shè)置為該文件夾:
現(xiàn)在在 main.jsp 文件中使用以下代碼,該文件加載 bean 并 set/get 了一個(gè)簡單的字符串參數(shù):
<html> <head> <title>Using JavaBeans in JSP</title> </head> <body> <center> <h2>Using JavaBeans in JSP</h2> <jsp:useBean id="test" class="action.TestBean" /> <jsp:setProperty name="test" property="message" value="Hello JSP..." /> <p>Got message....</p> <jsp:getProperty name="test" property="message" /> </center> </body> </html>
現(xiàn)在試著訪問 main.jsp,將會(huì)出現(xiàn)如下所示的結(jié)果:
Using JavaBeans in JSP
Got message....
Hello JSP...
<jsp:forward>
操作forward 操作終止當(dāng)前頁面的操作并將請(qǐng)求轉(zhuǎn)發(fā)給另一個(gè)資源,如一個(gè)靜態(tài)頁面,另一個(gè) JSP 頁面,或 Java Servlet。
該操作的簡單的語法如下所示:
<jsp:forward page="Relative URL" />
以下是與 forward 操作相關(guān)的屬性列表:
屬性 | 描述 |
---|---|
page | 應(yīng)該包括另一個(gè)資源的相對(duì) URL,比如靜態(tài)頁面,另一個(gè) JSP 頁面,或 Java Servlet。 |
讓我們重用以下兩個(gè)文件(a)date.jsp (b)main.jsp,如下所示:
以下是 date.jsp 文件的內(nèi)容:
<p> Today's date: <%= (new java.util.Date()).toLocaleString()%> </p>
以下是 main.jsp 文件的內(nèi)容:
<html> <head> <title>The include Action Example</title> </head> <body> <center> <h2>The include action Example</h2> <jsp:forward page="date.jsp" /> </center> </body> </html>
現(xiàn)在讓我們把所有這些文件保存在在根目錄中并試圖訪問 main.jsp。這將顯示類似如下所示的結(jié)果。這里丟棄主頁的內(nèi)容,只顯示來自轉(zhuǎn)發(fā)頁面的內(nèi)容。
Today's date: 12-Sep-2010 14:54:22
<jsp:plugin>
操作插件用于將 Java 組件插入到 JSP 頁面中。它決定了瀏覽器的類型以及需要插入的 < object > 或 < embed > 標(biāo)簽的類型。
如果所需的插件不存在,它將下載插件,然后執(zhí)行 Java 組件。Java 組件可以是一個(gè) Applet 或一個(gè) JavaBean。
插件操作有幾個(gè)屬性,對(duì)應(yīng)常用的生成 Java 組件的 HTML 標(biāo)簽。< param >元素也可以用來給 Applet 或 Bean 發(fā)送參數(shù)。
下面是使用插件操作的典型的語法:
<jsp:plugin type="applet" codebase="dirname" code="MyApplet.class"
width="60" height="80">
<jsp:param name="fontcolor" value="red" />
<jsp:param name="background" value="black" />
<jsp:fallback>
Unable to initialize Java Plugin
</jsp:fallback>
</jsp:plugin>
如果你感興趣的話,你可以使用applet嘗試該操作。一個(gè)新元素,< fallback >元素,當(dāng)組件失敗時(shí),可以用來指定一個(gè)錯(cuò)誤字符串發(fā)送給用戶。
<jsp:element>
操作<jsp:attribute>
操作<jsp:body>
操作,和操作是用于動(dòng)態(tài)的定義 XML 元素的。動(dòng)態(tài)這個(gè)詞是很重要的,因?yàn)檫@意味著 XML 元素可以在請(qǐng)求時(shí)生成,而不是在編譯時(shí)靜態(tài)生成。 下面是一個(gè)簡單的例子來動(dòng)態(tài)定義 XML 元素: