
- JSP 基礎教程
- JSP - 首頁
- JSP - 概述
- JSP - 環境搭建
- JSP - 架構
- JSP - 生命週期
- JSP - 語法
- JSP - 指令
- JSP - 動作
- JSP - 隱式物件
- JSP - 客戶端請求
- JSP - 伺服器響應
- JSP - HTTP 狀態碼
- JSP - 表單處理
- JSP - 編寫過濾器
- JSP - 處理 Cookie
- JSP - 會話跟蹤
- JSP - 檔案上傳
- JSP - 處理日期
- JSP - 頁面重定向
- JSP - 訪問計數器
- JSP - 自動重新整理
- JSP - 傳送郵件
- 高階 JSP 教程
- JSP - 標準標籤庫
- JSP - 資料庫訪問
- JSP - XML 資料
- JSP - JavaBean
- JSP - 自定義標籤
- JSP - 表示式語言
- JSP - 異常處理
- JSP - 除錯
- JSP - 安全性
- JSP - 國際化
- JSP 有用資源
- JSP - 問題與解答
- JSP - 快速指南
- JSP - 有用資源
- JSP - 討論
JSP - 動作
在本章中,我們將討論 JSP 中的動作。這些動作使用 XML 語法中的構造來控制 servlet 引擎的行為。您可以動態插入檔案、重用 JavaBean 元件、將使用者轉發到另一個頁面或為 Java 外掛生成 HTML。
Action 元素只有一種語法,因為它符合 XML 標準 -
<jsp:action_name attribute = "value" />
Action 元素基本上是預定義的函式。下表列出了可用的 JSP 動作 -
序號 | 語法 & 目的 |
---|---|
1 | jsp:include 在請求頁面時包含一個檔案。 |
2 | jsp:useBean 查詢或例項化一個 JavaBean。 |
3 | jsp:setProperty 設定 JavaBean 的屬性。 |
4 | jsp:getProperty 將 JavaBean 的屬性插入輸出。 |
5 | jsp:forward 將請求者轉發到新頁面。 |
6 | jsp:plugin 生成瀏覽器特定的程式碼,為 Java 外掛建立 OBJECT 或 EMBED 標籤。 |
7 | jsp:element 動態定義 XML 元素。 |
8 | jsp:attribute 定義動態定義的 XML 元素的屬性。 |
9 | jsp:body 定義動態定義的 XML 元素的主體。 |
10 | jsp:text 用於在 JSP 頁面和文件中編寫模板文字。 |
常用屬性
所有 Action 元素都有兩個共同的屬性:id 屬性和 scope 屬性。
Id 屬性
id 屬性唯一標識 Action 元素,並允許在 JSP 頁面內引用該動作。如果 Action 建立了一個物件的例項,則可以使用 id 值透過隱式物件 PageContext 來引用它。
Scope 屬性
此屬性標識 Action 元素的生命週期。id 屬性和 scope 屬性直接相關,因為 scope 屬性決定了與 id 關聯的物件的生命週期。scope 屬性有四個可能的值:(a) page,(b) request,(c) session 和 (d) application。
<jsp:include> 動作
此動作允許您將檔案插入正在生成的頁面中。語法如下 -
<jsp:include page = "relative URL" flush = "true" />
與include指令不同,該指令在 JSP 頁面轉換為 servlet 時插入檔案,此動作在請求頁面時插入檔案。
下表列出了與 include 動作關聯的屬性 -
序號 | 屬性 & 描述 |
---|---|
1 | page 要包含的頁面的相對 URL。 |
2 | flush 布林屬性確定在包含之前是否重新整理包含資源的緩衝區。 |
示例
讓我們定義以下兩個檔案 (a) date.jsp 和 (b) main.jsp 如下 -
以下是 date.jsp 檔案的內容 -
<p>Today's date: <%= (new java.util.Date()).toLocaleString()%></p>
以下是 main.jsp 檔案的內容 -
<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>
現在讓我們將所有這些檔案儲存在根目錄中,並嘗試訪問 main.jsp。您將收到以下輸出 -
The include action Example
Today's date: 12-Sep-2010 14:54:22
<jsp:useBean> 動作
useBean動作非常通用。它首先使用 id 和 scope 變數搜尋現有的物件。如果未找到物件,則嘗試建立指定的物件。
載入 bean 的最簡單方法如下 -
<jsp:useBean id = "name" class = "package.class" />
載入 bean 類後,可以使用jsp:setProperty和jsp:getProperty動作修改和檢索 bean 屬性。
下表列出了與 useBean 動作關聯的屬性 -
序號 | 屬性 & 描述 |
---|---|
1 | class 指定 bean 的完整包名。 |
2 | type 指定將引用該物件的變數的型別。 |
3 | beanName 給出由 java.beans.Beans 類的 instantiate() 方法指定的 bean 的名稱。 |
現在讓我們在提供與這些動作相關的有效示例之前討論jsp:setProperty和jsp:getProperty動作。
<jsp:setProperty> 動作
setProperty動作設定 Bean 的屬性。在執行此操作之前,必須先定義 Bean。有兩種基本方法可以使用 setProperty 動作 -
您可以在jsp:useBean元素之後但外部使用jsp:setProperty,如下所示 -
<jsp:useBean id = "myName" ... /> ... <jsp:setProperty name = "myName" property = "someProperty" .../>
在這種情況下,無論是否例項化了新的 bean 或找到了現有的 bean,都會執行jsp:setProperty。
jsp:setProperty可以出現的第二個上下文是在jsp:useBean元素的主體內部,如下所示 -
<jsp:useBean id = "myName" ... > ... <jsp:setProperty name = "myName" property = "someProperty" .../> </jsp:useBean>
在這裡,只有在例項化了新物件時才會執行 jsp:setProperty,而不是在找到現有物件時執行。
下表列出了與setProperty動作關聯的屬性 -
序號 | 屬性 & 描述 |
---|---|
1 | name 指定將設定其屬性的 bean。必須事先定義 Bean。 |
2 | property 指示要設定的屬性。值為“*”表示所有名稱與 bean 屬性名稱匹配的請求引數都將傳遞到相應的 setter 方法。 |
3 | value 要分配給給定屬性的值。如果引數的值為 null 或引數不存在,則忽略 setProperty 動作。 |
4 | param param 屬性是請求引數的名稱,該引數的值將由屬性接收。您不能同時使用 value 和 param,但可以都不使用。 |
<jsp:getProperty> 動作
getProperty動作用於檢索給定屬性的值並將其轉換為字串,最後將其插入輸出。
getProperty 動作只有兩個屬性,這兩個屬性都是必需的。getProperty 動作的語法如下 -
<jsp:useBean id = "myName" ... /> ... <jsp:getProperty name = "myName" property = "someProperty" .../>
下表列出了與getProperty動作關聯的必需屬性 -
序號 | 屬性 & 描述 |
---|---|
1 | name 要檢索其屬性的 Bean 的名稱。必須事先定義 Bean。 |
2 | property property 屬性是要檢索的 Bean 屬性的名稱。 |
示例
讓我們定義一個測試 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 複製到C:\apache-tomcat-7.0.2\webapps\WEB-INF\classes\action資料夾中,並且CLASSPATH變數也應該設定為此資料夾 -
現在在main.jsp檔案中使用以下程式碼。這將載入 bean 並設定/獲取一個簡單的字串引數 -
<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>
現在讓我們嘗試訪問main.jsp,它將顯示以下結果 -
Using JavaBeans in JSP
Got message.... Hello JSP...
<jsp:forward> 動作
forward動作終止當前頁面的操作並將請求轉發到另一個資源,例如靜態頁面、另一個 JSP 頁面或 Java Servlet。
以下是forward動作的語法 -
<jsp:forward page = "Relative URL" />
下表列出了與 forward 動作關聯的必需屬性 -
序號 | 屬性 & 描述 |
---|---|
1 | page 應包含另一個資源的相對 URL,例如靜態頁面、另一個 JSP 頁面或 Java Servlet。 |
示例
讓我們重用以下兩個檔案 (a) date.jsp 和 (b) main.jsp 如下 -
以下是 date.jsp 檔案的內容 -
<p>Today's date: <%= (new java.util.Date()).toLocaleString()%></p>
以下是 main.jsp 檔案的內容 -
<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>
現在讓我們將所有這些檔案儲存在根目錄中,並嘗試訪問 main.jsp。這將顯示類似如下所示的結果。
在這裡,它丟棄了來自主頁面內容,並且僅顯示來自已轉發頁面的內容。
Today's date: 12-Sep-2010 14:54:22
<jsp:plugin> 動作
plugin動作用於將 Java 元件插入 JSP 頁面。它確定瀏覽器的型別並根據需要插入<object>或<embed>標籤。
如果所需的外掛不存在,它將下載外掛,然後執行 Java 元件。Java 元件可以是 Applet 或 JavaBean。
plugin 動作具有幾個屬性,這些屬性對應於用於格式化 Java 元件的常用 HTML 標籤。<param>元素也可用於向 Applet 或 Bean 傳送引數。
以下是使用 plugin 動作的典型語法 -
<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 來嘗試此操作。一個新的元素,<fallback>元素,可用於指定在元件失敗時傳送給使用者的錯誤字串。
The <jsp:element> Action
The <jsp:attribute> Action
The <jsp:body> Action
<jsp:element>、<jsp:attribute>和<jsp:body>動作用於動態定義 XML 元素。動態一詞很重要,因為它意味著 XML 元素可以在請求時生成,而不是在編譯時靜態生成。
以下是如何動態定義 XML 元素的簡單示例 -
<%@page language = "java" contentType = "text/html"%> <html xmlns = "http://www.w3c.org/1999/xhtml" xmlns:jsp = "http://java.sun.com/JSP/Page"> <head><title>Generate XML Element</title></head> <body> <jsp:element name = "xmlElement"> <jsp:attribute name = "xmlElementAttr"> Value for the attribute </jsp:attribute> <jsp:body> Body for XML element </jsp:body> </jsp:element> </body> </html>
這將在執行時生成以下 HTML 程式碼 -
<html xmlns = "http://www.w3c.org/1999/xhtml" xmlns:jsp = "http://java.sun.com/JSP/Page"> <head><title>Generate XML Element</title></head> <body> <xmlElement xmlElementAttr = "Value for the attribute"> Body for XML element </xmlElement> </body> </html>
<jsp:text> 動作
<jsp:text>動作可用於在 JSP 頁面和文件中編寫模板文字。以下是此操作的簡單語法 -
<jsp:text>Template data</jsp:text>
模板的主體不能包含其他元素;它只能包含文字和 EL 表示式(注意 - EL 表示式將在後續章節中解釋)。請注意,在 XML 檔案中,您不能使用諸如${whatever > 0}之類的表示式,因為大於號是非法的。相反,使用gt形式,例如${whatever gt 0}或者另一種方法是將值嵌入到CDATA部分。
<jsp:text><![CDATA[<br>]]></jsp:text>
例如,如果您需要包含DOCTYPE宣告(例如用於XHTML),則還必須使用<jsp:text>元素,如下所示 -
<jsp:text><![CDATA[<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">]]></jsp:text> <head><title>jsp:text action</title></head> <body> <books><book><jsp:text> Welcome to JSP Programming </jsp:text></book></books> </body> </html>
嘗試使用和不使用<jsp:text>動作的上述示例。