JSP 動作元素
與JSP指令元素不同的是,JSP動作元素在請求處理階段運作。 JSP動作元素是用XML語法寫成的。
利用JSP動作可以動態地插入檔案、重複使用JavaBean元件、把使用者重新導向到另外的頁面、為Java外掛程式產生HTML程式碼。
動作元素只有一種語法,它符合XML標準:
<jsp:action_name attribute="value" />
動作元素基本上都是預先定義的函數,JSP規範定義了一系列的標準動作,它用JSP作為前綴,可用的標準動作元素如下:
語法 | #描述 |
---|---|
jsp:include | 在頁面被要求的時候引入一個檔案。 |
jsp:useBean | 尋找或實例化一個JavaBean。 |
jsp:setProperty | 設定JavaBean的屬性。 |
jsp:getProperty | 輸出某個JavaBean的屬性。 |
jsp:forward | 把請求轉到新的頁面。 |
jsp:plugin | 根據瀏覽器類型為Java外掛程式產生OBJECT或EMBED標記。 |
jsp:element | 定義動態XML元件 |
#jsp:attribute | 設定動態定義的XML元素屬性。 |
jsp:body | 設定動態定義的XML元素內容。 |
jsp:text | 在JSP頁面和文件中使用寫入文字的範本 |
常見的屬性
所有的動作要素都有兩個屬性:id屬性和scope屬性。
id屬性:
id屬性是動作元素的唯一標識,可以在JSP頁面中引用。動作元素所建立的id值可以透過PageContext來呼叫。
屬性:
此屬性用於辨識動作元素的生命週期。 id屬性和scope屬性有直接關係,scope屬性定義了相關聯id物件的壽命。 scope屬性有四個可能的值: (a) page, (b)request, (c)session, 和 (d) application。
<jsp:include>動作元素
<jsp:include>動作元素用來包含靜態和動態的文件。這個動作把指定文件插入正在產生的頁面。語法格式如下:
<jsp:include page="相对 URL 地址" flush="true" />
前面已經介紹過include指令,它是在JSP文件被轉換成Servlet的時候引入文件,而這裡的jsp:include動作不同,插入文件的時間是在頁面被請求的時候。
以下是include動作相關的屬性清單。
屬性 | 描述 |
---|---|
#page | 包含在頁面中的相對URL位址。 |
flush | 布林屬性,定義在包含資源前是否重新整理快取區。 |
實例
以下我們定義了兩個檔案date.jsp 和main.jsp,程式碼如下:
date. jsp檔案程式碼:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <p> 今天的日期是: <%= (new java.util.Date()).toLocaleString()%> </p>
main.jsp檔案程式碼:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h2>include 动作实例</h2> <jsp:include page="date.jsp" flush="true" /> </body> </html>
現在將以上兩個檔案放在伺服器的根目錄下,存取main.jsp檔案。顯示結果如下:
include 动作实例 今天的日期是: 2016-6-25 14:08:17
<jsp:useBean>動作元素
jsp:useBean 動作用來載入一個會在JSP頁面中使用的JavaBean 。
這個功能非常有用,因為它使得我們可以發揮 Java 元件重複使用的優勢。
jsp:useBean動作最簡單的語法為:
<jsp:useBean id="name" class="package.class" />
在類別載入後,我們既可以透過 jsp:setProperty 和 jsp:getProperty 動作來修改和擷取bean的屬性。
以下是useBean動作相關的屬性清單。
屬性 | 描述 |
---|---|
#class | #指定Bean的完整套件名稱。 |
type | 指定將引用該物件變數的型別。 |
beanName | 透過 java.beans.Beans 的 instantiate() 方法指定Bean的名字。 |
在給特定實例前,讓我們先來看看jsp:setProperty 和jsp:getProperty 動作元素:
<jsp:setProperty>動作元素
#jsp :setProperty用來設定已經實例化的Bean物件的屬性,有兩種用法。首先,你可以在jsp:useBean元素的外面(後面)使用jsp:setProperty,如下所示:
<jsp:useBean id="myName" ... /> ... <jsp:setProperty name="myName" property="someProperty" .../>
此時,不管jsp:useBean是找到了一個現有的Bean,還是新創建了一個Bean實例,jsp:setProperty都會執行。第二種用法是把jsp:setProperty放入jsp:useBean元素的內部,如下所示:
<jsp:useBean id="myName" ... > ... <jsp:setProperty name="myName" property="someProperty" .../> </jsp:useBean>
此時,jsp:setProperty只有在新建Bean實例時才會執行,如果是使用現有實例則不執行jsp:setProperty。
jsp:setProperty動作有下面四個屬性,如下表:
#屬性 | 描述 |
---|---|
#name | name屬性是必要的。它表示要設定屬性的是哪個Bean。 |
property | property屬性是必要的。它表示要設定哪個屬性。有一個特殊用法:如果property的值是"*",表示所有名字和Bean屬性名字匹配的請求參數都會被傳遞給對應的屬性set方法。 |
value | value 屬性是可選的。該屬性用來指定Bean屬性的值。字串資料會在目標類別中透過標準的valueOf方法自動轉換成數字、boolean、Boolean、 byte、Byte、char、Character。例如,boolean和Boolean類型的屬性值(例如"true")透過 Boolean.valueOf轉換,int和Integer類型的屬性值(例如"42")透過Integer.valueOf轉換。 value和param不能同時使用,但可以使用其中任一個。 |
param | param 是可選的。它指定用哪個請求參數作為Bean屬性的值。如果目前請求沒有參數,則什麼事情也不做,系統不會把null傳遞給Bean屬性的set方法。因此,你可以讓Bean自己提供預設屬性值,只有當請求參數明確指定了新值時才修改預設屬性值。 |
<jsp:getProperty>動作元素
jsp:getProperty動作提取指定Bean屬性的值,轉換成字串,然後輸出。語法格式如下:
<jsp:useBean id="myName" ... /> ... <jsp:getProperty name="myName" property="someProperty" .../>
下表是與getProperty相關聯的屬性:
#屬性 | ##描述|
---|---|
要檢索的Bean屬性名稱。 Bean必須已定義。 | |
表示要提取Bean屬性的值 |
屬性 | ##描述|
---|---|
page屬性包含的是一個相對URL。 page的值既可以直接給出,也可以在請求的時候動態計算,可以是JSP頁面或 Java Servlet. |