JSP行為標籤使用XML語法結構來控制servlet引擎。它能夠動態插入一個檔案,重用JavaBean元件,引導使用者去另一個頁面,為Java外掛產生相關的HTML等等。行為標籤只有一種語法格式,它嚴格遵守XML標準:
<jsp:action_name attribute="value" />
行為標籤基本上是一些預先就定義好的函式:
語法 | 描述 |
jsp:include | 用於在當前頁面中包含靜態或動態資源,在頁面被請求時引入一個檔案 |
jsp:useBean | 尋找和初始化一個JavaBean元件 |
jsp:setProperty | 設定JavaBean元件的值 |
jsp:getProperty | 將JavaBean元件的值插入到output中 |
jsp:forward | 從一個JSP檔案向另一個檔案傳遞一個包含使用者請求的request物件,把請求轉到一個新的頁面 |
jsp:plugin | 用於在生成的HTML頁面中包含Applet和JavaBean物件,根據瀏覽器型別為Java外掛生成OBJECT或EMBED標記 |
jsp:element | 動態建立一個XML元素 |
jsp:attribute | 定義動態建立的XML元素的屬性 |
jsp:body | 定義動態建立的XML元素的內容 |
jsp:text | 在JSP頁面和文件中使用寫入文字的模板 |
常見的屬性
所有的動作元素都要有兩個屬性:id屬性和scope屬性。
- id屬性:
id屬性是動作元素的唯一標識,可以在JSP頁面中引用。動作元素常見的id值可以通過PageContext來呼叫的。
- scope屬性:
該屬性用來識別動作元素的生命週期。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 | 布林屬性,定義在包含資源前是否重新整理快取區 |
<jsp:useBean>動作元素
jsp:useBean 動作用來載入一個將在JSP頁面中使用的JavaBean。這個功能非常有用,因為它使得我們可發揮Java元件複用的優勢。簡單的語法:
<jsp:useBean id ="name" class="package.class">
在類載如後,我們既可以通過jsp:setProperty 和 jsp:getProerty 動作來修改和檢索bean的屬性。useBean的屬性有:
屬性 | 描述 |
class | 指定bean的完整包名 |
type | 指定將引用該物件變數的型別 |
beanName | 通過java.beans.Beans的instantiate()方法指定Bean的名字 |
<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屬性是必需的。 |
property | property屬性是必需的。它表示要設定哪個屬性。其特殊用法:如果property的值是“*”,表示所有名字和Bean屬性名字匹配的請求引數都將被傳遞給相應的屬性的set方法。 |
value | value屬性是可選的。該屬性用來指定Bean屬性的值。字串資料會在目標類中通過標準的valueOf方法自動轉換成數字、boolean、byte、char。 |
param | param是可選的。它指定用哪個引數作為Bean屬性的值。如果當前請求沒有引數,則什麼事情也不做,系統不會把null傳遞給Bean屬性的set方法。 |
<jsp:getProerty>動作元素
jsp:getProerty黨組織取得指定Bean屬性的值,轉換成字串,然後輸出。
<jsp:useBean id="myName" ... /> ...... <jsp:getProerty name="myName" property="someProperty" ... />
getProperty相關聯的屬性:
屬性 | 描述 |
name | 要檢索的Bean屬性的名稱。Bean必須已定義 |
property | 表示要提取Bean屬性的值 |
<jsp:forward>動作元素
jsp:forward動作把請求轉到另外的頁面。jsp:forward標記只有一個屬性page。
<jsp:forward page="相對 URL 地址">
<jsp:forward>的page屬性包含的是一個相對URL。page的值既可以直接給出,也可以在請求的時候動態計算,可以是一個JSP頁面或者一個Java Servlet 。下面示例用兩個檔案,分別是: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 http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <h2>forward動作示例</h2> <jsp:forward page="date.jsp"></jsp:forward> </body> </html>
執行的結果是:
今天的日期:2017-8-21 16:30:08
<jsp:plugin>動作元素
jsp:plugin動作用來根據瀏覽器的型別,插入通過Java外掛執行Java Applet所必需的OBJECT或EMBED元素。如果需要的外掛不存在,它會下載外掛,然後執行Java元件。Java元件可以是一個applet或一個JavaBean。plugin動作有多個對應的HTML元素的屬性用於格式化Java元件。param元素可用於向Applet或Bean傳遞引數。
<jsp:element> 、 <jsp:attribute>、 <jsp:body>動作元素
<jsp:element> 、 <jsp:attribute>、 <jsp:body>動作元素動態定義XML元素。動態是非常重要的,這就意味著XML元素在編譯時是動態生成的而非靜態。
<jsp:text>動作元素
<jsp:text>動作元素允許在JSP頁面和文件中使用寫入文字的模板:
<jsp:text>模板資料</jsp:text>
以上文字模板不能包含其他元素,只能只能包含文字和EL表示式。請注意,在XML檔案中,不能使用表示式如 ${whatever > 0},因為>符號是非法的。 你可以使用 ${whatever gt 0}表示式或者嵌入在一個CDATA部分的值。