JSP動作
JSP動作使用XML語法結構來控製Servlet引擎的行為。您可以動態地插入文件,重用JavaBeans組件,用戶轉發到另一個頁麵,或生成HTML的Java插件。
隻有一個用於操作元素語法,因為它符合XML標準:
<jsp:action_name attribute="value" />
動作要素基本上都是預定義的功能,而且已有下麵的JSP操作:
語法 | 目的 |
---|---|
jsp:include | Includes a file at the time the page is requested |
jsp:useBean | Finds or instantiates a JavaBean |
jsp:setProperty | Sets the property of a JavaBean |
jsp:getProperty | Inserts the property of a JavaBean into the output |
jsp:forward | Forwards the requester to a new page |
jsp:plugin | Generates browser-specific code that makes an OBJECT or EMBED tag for the Java plugin |
jsp:element | Defines XML elements dynamically. |
jsp:attribute | Defines dynamically defined XML element's attribute. |
jsp:body | Defines dynamically defined XML element's body. |
jsp:text | Use to write template text in JSP pages and documents. |
常見的屬性:
有兩個屬性是所有動作要素:id屬性和scope屬性。
-
Id attribute: id屬性唯一標識該動作元素,並允許操作要在JSP頁麵內引用。如果Action創建一個對象的id值可以通過使用隱式對象引用它的實例的PageContext
-
Scope attribute: 此屬性標識的Action元素的生命周期。 id屬性和範圍的屬性有直接關係,如範圍屬性確定與該ID相關聯的對象的壽命。 scope屬性有四個可能的值: (a) page, (b)request, (c)session, 和(d) application.
<jsp:include> 動作
此動作可讓您將文件插入正在生成的頁麵。其語法如下所示:
<jsp:include page="relative URL" flush="true" />
不同於include指令,它會插入這個文件當時的JSP頁麵轉換成servlet,這個動作插入文件在頁麵被請求時。
以下是相關聯的屬性的列表,包括動作:
屬性 | 描述 |
---|---|
page | The relative URL of the page to be included. |
flush | The boolean attribute determines whether the included resource has its buffer flushed before it is included. |
例子:
讓我們定義下麵的兩個文件(一個)date.jps及(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 例子Today's date: 12-Sep-2013 14:54:22 |
<jsp:useBean> 動作
useBean動作是相當具有通用性。它利用id和scope變量的現有對象首先搜索。如果冇有找到一個對象,然後它試圖創建指定的對象。
加載bean最簡單的方法如下:
<jsp:useBean id="name" class="package.class" />
一旦一個bean類被加載,你可以用 jsp:setProperty 和jsp:getProperty 動作來修改和檢索bean屬性。
以下是useBean動作相關的屬性列表:
屬性 | 描述 |
---|---|
class | Designates the full package name of the bean. |
type | Specifies the type of the variable that will refer to the object. |
beanName | Gives the name of the bean as specified by the instantiate () method of the java.beans.Beans class. |
讓我們討論 jsp:setProperty 和jsp:getProperty 提供有關這些行動的有效示例。
<jsp:setProperty> 動作
setProperty 動作設置一個bean的屬性。 bean必須有這個動作之前,預先定義的。有使用setProperty動作兩種基本方式:
使用jsp:setProperty 後,您可以使用 jsp:useBean 元素,如下所示:
<jsp:useBean id="myName" ... /> ... <jsp:setProperty name="myName" property="someProperty" .../>
在這種情況下,在 jsp:setProperty無論是一個新的bean是否被實例化或現有的bean被發現執行。
第二個方麵 jsp:setProperty 可以出現是一個 jsp:useBean元素中,如下所示:
<jsp:useBean id="myName" ... > ... <jsp:setProperty name="myName" property="someProperty" .../> </jsp:useBean>
在這裡,在jsp:setProperty隻執行,如果一個新的對象實例化,如果冇有一個現有的被發現。
以下是setProperty動作相關的屬性列表:
屬性 | 描述 |
---|---|
name | Designates the bean whose property will be set. The Bean must have been previously defined. |
property | Indicates the property you want to set. A value of "*" means that all request parameters whose names match bean property names will be passed to the appropriate setter methods. |
value | The value that is to be assigned to the given property. The the parameter's value is null, or the parameter does not exist, the setProperty action is ignored. |
param | The param attribute is the name of the request parameter whose value the property is to receive. You can't use both value and param, but it is permissible to use neither. |
<jsp:getProperty> 動作
使用getProperty動作用於檢索一個給定的屬性的值,並將其轉換為字符串,並最終將其插入到輸出。
使用getProperty動作僅具有兩個屬性,這兩者都是必需的,簡單的語法如下:
<jsp:useBean id="myName" ... /> ... <jsp:getProperty name="myName" property="someProperty" .../>
以下是與setProperty動作相關的必需的屬性列表:
屬性 | 描述 |
---|---|
name | The name of the Bean that has a property to be retrieved. The Bean must have been previously defined. |
property | The property attribute is the name of the Bean property to be retrieved. |
例子:
讓我們定義一個測試的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文件,並確保在C複製到TestBean.classC:apache-tomcat-7.0.2webappsWEB-INFclassesaction 文件夾,並CLASSPATH變量也應設置到這個文件夾:
現在使用中的main.jsp文件,該文件加載bean並設置/獲取一個簡單的String參數如下代碼:
<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 JSPGot message....Hello JSP... |
<jsp:forward> 動作
正向行動終止當前頁麵的動作,將請求轉發給另一個資源,如靜態頁麵,另一個JSP頁麵或Java Servlet。
這個動作的簡單語法如下:
<jsp:forward page="Relative URL" />
以下是與向前有關的行動所需的屬性列表:
屬性 | 描述 |
---|---|
page | Should consist of a relative URL of another resource such as a static page, another JSP page, or a Java Servlet. |
例子:
讓我們再利用下列兩個文件(一個)date.jps及(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。這將顯示結果類似如下。在這裡,它丟棄從主網頁內容,並從隻轉發頁麵中顯示的內容。
|
<jsp:plugin> 動作
plugin動作是用來插入Java組件到一個JSP頁麵。它決定了瀏覽器的類型,並插入需要的<object>或<embed>標簽。
如果需要的插件不存在,它會下載插件,然後執行Java組件。 Java組件可以是一個applet或一個JavaBean。
插件操作有對應於用來格式化Java組件常用的HTML標記幾個屬性。 <param>元素也可以用來將參數發送到applet或Bean。
下麵是一個使用插件行為的典型的語法:
<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>
可以使用一些小程序,如果你有興趣嘗試此操作。一個新的元件,所述<fallback>元件,可用於指定要發送給用戶的情況下的組件出現故障的錯誤的字符串。
<jsp:element> 動作
<jsp:attribute> 動作
<jsp:body> 動作
<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>
模板的body不能包含其他元素,它隻能包含文本和EL表達式(注:EL表達式將在後續章節中介紹)。請注意,在XML文件中,您不能使用表達式,如 ${whatever gt 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>動作。