jsp(SUN企業級應用的首選)動作利用xml(標准化越來越近了)語法格式的標記來控制Servlet引擎的行為。利用jsp(SUN企業級應用的首選)動作可以動態地插入文件、重用JavaBean組件、把用戶重定向到另外的頁面、為Java插件生成HTML代碼。
jsp(SUN企業級應用的首選)動作包括:
jsp(SUN企業級應用的首選):include:在頁面被請求的時候引入一個文件。
jsp(SUN企業級應用的首選):useBean:尋找或者實例化一個JavaBean。
jsp(SUN企業級應用的首選):setProperty:設置JavaBean的屬性。
jsp(SUN企業級應用的首選):getProperty:輸出某個JavaBean的屬性。
jsp(SUN企業級應用的首選):forward:把請求轉到一個新的頁面。
jsp(SUN企業級應用的首選):plugin:根據浏覽器類型為Java插件生成OBJECT或EMBED標記。
13.1 jsp(SUN企業級應用的首選):include動作
該動作把指定文件插入正在生成的頁面。其語法如下:
<jsp(SUN企業級應用的首選):include page="relative URL" flush="true" />
前面已經介紹過include指令,它是在jsp(SUN企業級應用的首選)文件被轉換成Servlet的時候引入文件,而這裡的jsp(SUN企業級應用的首選):include動作不同,插入文件的時間是在頁面被請求的時候。jsp(SUN企業級應用的首選):include動作的文件引入時間決定了它的效率要稍微差一點,而且被引用文件不能包含某些jsp(SUN企業級應用的首選)代碼(例如不能設置HTTP頭),但它的靈活性卻要好得多。
例如,下面的jsp(SUN企業級應用的首選)頁面把4則新聞摘要插入一個“Whats New ?”頁面。改變新聞摘要時只需改變這四個文件,而主jsp(SUN企業級應用的首選)頁面卻可以不作修改:
WhatsNew.jsp(SUN企業級應用的首選)
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<HTML>
<HEAD>
<TITLE>Whats New</TITLE>
</HEAD>
<BODY BGCOLOR="#FDF5E6" TEXT="#000000" LINK="#0000EE"
VLINK="#551A8B" ALINK="#FF0000">
<CENTER>
<TABLE BORDER=5 BGCOLOR="#EF8429">
<TR><TH CLASS="TITLE">
Whats New at jsp(SUN企業級應用的首選)News.com</TABLE>
</CENTER>
<P>
Here is a summary of our four most recent news stories:
<OL>
<LI><jsp(SUN企業級應用的首選):include page="news/Item1.html" flush="true"/>
<LI><jsp(SUN企業級應用的首選):include page="news/Item2.html" flush="true"/>
<LI><jsp(SUN企業級應用的首選):include page="news/Item3.html" flush="true"/>
<LI><jsp(SUN企業級應用的首選):include page="news/Item4.html" flush="true"/>
</OL>
</BODY>
</HTML>
13.2 jsp(SUN企業級應用的首選):useBean動作
jsp(SUN企業級應用的首選):useBean動作用來裝載一個將在jsp(SUN企業級應用的首選)頁面中使用的JavaBean。這個功能非常有用,因為它使得我們既可以發揮Java組件重用的優勢,同時也避免了損失jsp(SUN企業級應用的首選)區別於Servlet的方便性。jsp(SUN企業級應用的首選):useBean動作最簡單的語法為:
<jsp(SUN企業級應用的首選):useBean id="name" class="package.class" />
這行代碼的含義是:“創建一個由class屬性指定的類的實例,然後把它綁定到其名字由id屬性給出的變量上”。不過,就象我們接下來會看到的,定義一個scope屬性可以讓Bean關聯到更多的頁面。此時,jsp(SUN企業級應用的首選):useBean動作只有在不存在同樣id和scope的Bean時才創建新的對象實例,同時,獲得現有Bean的引用就變得很有必要。
獲得Bean實例之後,要修改Bean的屬性既可以通過jsp(SUN企業級應用的首選):setProperty動作進行,也可以在Scriptlet中利用id屬性所命名的對象變量,通過調用該對象的方法顯式地修改其屬性。這使我們想起,當我們說“某個Bean有一個類型為X的屬性foo”時,就意味著“這個類有一個返回值類型為X的getFoo方法,還有一個setFoo方法以X類型的值為參數”。
有關jsp(SUN企業級應用的首選):setProperty動作的詳細情況在後面討論。但現在必須了解的是,我們既可以通過jsp(SUN企業級應用的首選):setProperty動作的value屬性直接提供一個值,也可以通過param屬性聲明Bean的屬性值來自指定的請求參數,還可以列出Bean屬性表明它的值應該來自請求參數中的同名變量。
在jsp(SUN企業級應用的首選)表達式或Scriptlet中讀取Bean屬性通過調用相應的getXXX方法實現,或者更一般地,使用jsp(SUN企業級應用的首選):getProperty動作。
注意包含Bean的類文件應該放到服務器正式存放Java類的目錄下,而不是保留給修改後能夠自動裝載的類的目錄。例如,對於Java Web Server來說,Bean和所有Bean用到的類都應該放入classes目錄,或者封裝進jar文件後放入lib目錄,但不應該放到servlets下。