鍍金池/ 教程/ Java/ JSP - 操作
JSP - 異常處理
JSP - 標(biāo)準(zhǔn)標(biāo)簽庫
JSP - 操作
JSP - 語法
JSP - 概述
JSP - 過濾器
JSP - 文件上傳
JSP - 指令
JSP - 訪問數(shù)據(jù)庫
JSP - 國際化
JSP - 隱式對(duì)象
JSP - 面試問題
JSP - 體系結(jié)構(gòu)
JSP - 發(fā)送電子郵件
JSP - 客戶端請(qǐng)求
JSP - 服務(wù)器響應(yīng)
JSP - 表達(dá)式語言
JSP - 自定義標(biāo)簽
JSP - HTTP 狀態(tài)碼
JSP - 調(diào)試
JSP - XML 數(shù)據(jù)
JSP - 有用的資源
JSP - 處理日期
JSP - 生命周期
JSP - 會(huì)話跟蹤
JSP - JavaBeans
JSP - 自動(dòng)刷新
JSP - 頁面重定向
JSP - 點(diǎn)擊計(jì)數(shù)器
JSP - 安全性
JSP - Cookies 處理
JSP - 環(huán)境配置
JSP - 表單處理

JSP - 操作

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 來引用該操作

  • Scope屬性: 這個(gè)屬性標(biāo)識(shí)了操作元素的生命周期。id 屬性和 scope 屬性是直接相關(guān)的,因?yàn)?scope 屬性決定了 id 屬性相關(guān)的對(duì)象的生命周期。scope 屬性有四個(gè)可能值:(a)頁面,(b)請(qǐng)求,(c)會(huì)話和(d)應(yīng)用程序。

<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:setPropertyjsp:getProperty 操作來修改和檢索 bean 屬性。

下面是與 useBean 操作關(guān)聯(lián)的屬性列表:

屬性 描述
class 指定 bean 的全部包名。
type 指定將在對(duì)象中引用的變量的類型。
beanName 通過 java.beans.Beans 類中的 instantiate()方法給定 bean 名稱。

在給出與這些操作有關(guān)的有效的例子之前,讓我們先討論一下 jsp:setPropertyjsp: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 元素: