JSP有哪些動作?

來源:互聯網
上載者:User
js

JSP動作包括:

jsp:include:在頁面被請求的時候引入一個檔案。
jsp:useBean:尋找或者執行個體化一個JavaBean。
jsp:setProperty:設定JavaBean的屬性。
jsp:getProperty:輸出某個JavaBean的屬性。
jsp:forward:把請求轉到一個新的頁面。
jsp:plugin:根據瀏覽器類型為Java外掛程式產生OBJECT或EMBED標記。
   13.1 jsp:include動作

   該動作把指定檔案插入正在產生的頁面。其文法如下:
<jsp:include page="relative URL" flush="true" />



   前面已經介紹過include指令,它是在JSP檔案被轉換成Servlet的時候引入檔案,而這裡的jsp:include動作不同,插入檔案的時間是在頁面被請求的時候。jsp:include動作的檔案引入時間決定了它的效率要稍微差一點,而且被引用檔案不能包含某些JSP代碼(例如不能設定HTTP頭),但它的靈活性卻要好得多。

   例如,下面的JSP頁面把4則新聞摘要插入一個“What's New ?”頁面。改變新聞摘要時只需改變這四個檔案,而主JSP頁面卻可以不作修改:

   WhatsNew.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>What's New</TITLE>
</HEAD>

<BODY BGCOLOR="#FDF5E6" TEXT="#000000" LINK="#0000EE"
VLINK="#551A8B" ALINK="#FF0000">

<CENTER>
<TABLE BORDER=5 BGCOLOR="#EF8429">
<TR><TH CLASS="TITLE">
What's New at JspNews.com</TABLE>
</CENTER>
<P>
Here is a summary of our four most recent news stories:
<OL>
<LI><jsp:include page="news/Item1.html" flush="true"/>
<LI><jsp:include page="news/Item2.html" flush="true"/>
<LI><jsp:include page="news/Item3.html" flush="true"/>
<LI><jsp:include page="news/Item4.html" flush="true"/>
</OL>
</BODY>
</HTML>

jsp:useBean動作

   jsp:useBean動作用來裝載一個將在JSP頁面中使用的JavaBean。這個功能非常有用,因為它使得我們既可以發揮Java組件重用的優勢,同時也避免了損失JSP區別於Servlet的方便性。jsp:useBean動作最簡單的文法為:
<jsp:useBean id="name" class="package.class" />



   這行代碼的含義是:“建立一個由class屬性指定的類的執行個體,然後把它綁定到其名字由id屬性給出的變數上”。不過,就象我們接下來會看到的,定義一個scope屬性可以讓Bean關聯到更多的頁面。此時,jsp:useBean動作只有在不存在同樣id和scope的Bean時才建立新的對象執行個體,同時,獲得現有Bean的引用就變得很有必要。

   獲得Bean執行個體之後,要修改Bean的屬性既可以通過jsp:setProperty動作進行,也可以在Scriptlet中利用id屬性所命名的物件變數,通過調用該對象的方法顯式地修改其屬性。這使我們想起,當我們說“某個Bean有一個類型為X的屬性foo”時,就意味著“這個類有一個傳回值類型為X的getFoo方法,還有一個setFoo方法以X類型的值為參數”。

   有關jsp:setProperty動作的詳細情況在後面討論。但現在必須瞭解的是,我們既可以通過jsp:setProperty動作的value屬性直接提供一個值,也可以通過param屬性聲明Bean的屬性值來自指定的請求參數,還可以列出Bean屬性工作表明它的值應該來自請求參數中的同名變數。

   在JSP運算式或Scriptlet中讀取Bean屬性通過調用相應的getXXX方法實現,或者更一般地,使用jsp:getProperty動作。

   注意包含Bean的類檔案應該放到伺服器正式存放Java類的目錄下,而不是保留給修改後能夠自動裝載的類的目錄。例如,對於Java Web Server來說,Bean和所有Bean用到的類都應該放入classes目錄,或者封裝進jar檔案後放入lib目錄,但不應該放到servlets下。

   下面是一個很簡單的例子,它的功能是裝載一個Bean,然後設定/讀取它的message屬性。

   BeanTest.jsp
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Reusing JavaBeans in JSP</TITLE>
</HEAD>

<BODY>
<CENTER>
<TABLE BORDER=5>
<TR><TH CLASS="TITLE">
Reusing JavaBeans in JSP</TABLE>
</CENTER>
<P>

<jsp:useBean id="test" class="hall.SimpleBean" />
<jsp:setProperty name="test"
property="message"
value="Hello WWW" />
<H1>Message: <I>
<jsp:getProperty name="test" property="message" />
</I></H1>

</BODY>
</HTML>



   SimpleBean.java

   BeanTest頁面用到了一個SimpleBean。SimpleBean的代碼如下:
package hall;

public class SimpleBean {
private String message = "No message specified";

public String getMessage() {
return(message);
}

public void setMessage(String message) {
this.message = message;
}
}

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自己提供預設屬性值,只有當請求參數明確指定了新值時才修改預設屬性值。
例如,下面的代碼片斷表示:如果存在numItems請求參數的話,把numberOfItems屬性的值設定為請求參數numItems的值;否則什麼也不做。

<jsp:setProperty name="orderBean"
property="numberOfItems"
param="numItems" />

如果同時省略value和param,其效果相當於提供一個param且其值等於property的值。進一步利用這種藉助請求參數和屬性名稱字相同進行自動賦值的思想,你還可以在property(Bean屬性的名字)中指定“*”,然後省略value和param。此時,伺服器會查看所有的Bean屬性和請求參數,如果兩者名字相同則自動賦值。

jsp:getProperty動作

   jsp:getProperty動作提取指定Bean屬性的值,轉換成字串,然後輸出。jsp:getProperty有兩個必需的屬性,即:name,表示Bean的名字;property,表示要提取哪個屬性的值。下面是一個例子,更多的例子可以在前文找到。
<jsp:useBean id="itemBean" ... />
...
<UL>
<LI>Number of items:
<jsp:getProperty name="itemBean" property="numItems" />
<LI>Cost of each:
<jsp:getProperty name="itemBean" property="unitCost" />
</UL>

   13.6 jsp:forward動作

   jsp:forward動作把請求轉到另外的頁面。jsp:forward標記只有一個屬性page。page屬性包含的是一個相對URL。page的值既可以直接給出,也可以在請求的時候動態計算,如下面的例子所示:
<jsp:forward page="/utils/errorReporter.jsp" />
<jsp:forward page="<%= someJavaExpression %>" />



相關文章

Cloud Intelligence Leading the Digital Future

Alibaba Cloud ACtivate Online Conference, Nov. 20th & 21st, 2019 (UTC+08)

Register Now >

Starter Package

SSD Cloud server and data transfer for only $2.50 a month

Get Started >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。