介紹JSP Action的使用
JSP Actions的使用
JSP actions 使用您可以動(dòng)態(tài)的插入一個(gè)文件,重用JavaBeans組件,前進(jìn)到另一個(gè)頁(yè)面,或?yàn)镴ava 插件生成一個(gè)HTML??梢允褂玫腶ction:
(1) JSP:include --在頁(yè)面被請(qǐng)求時(shí)包含進(jìn)一個(gè)文件。
(2) JSP:useBean--找到或?qū)嵗粋€(gè)JavaBean。
(3) JSP:setProperty--設(shè)置一個(gè)JavaBean屬性。
(4) JSP:getProperty--將JavaBean的屬性插入到輸出。
(5) JSP:forward--讓請(qǐng)求者可以向前到一個(gè)新的頁(yè)面。
(6) JSP:plugin--用OBJECT或EMBED標(biāo)簽為Java plugins生成特定的瀏覽器的代碼。
1.JSP Action include
這個(gè)action使您可以在即將生成的頁(yè)面上包含進(jìn)一些文件
與include directive不同,這個(gè)action是在頁(yè)面被請(qǐng)求時(shí)才將文件包含進(jìn)來(lái),而,include directive則是在JSP頁(yè)面被轉(zhuǎn)換為servlet時(shí)包含文件。為了提高效率,include action做了一點(diǎn)小小的犧牲,即,它不允許被包含的頁(yè)面含有一般的JSP代碼(例如,不可設(shè)置HTTP頭),但是,它具有顯著的靈活性,如下面的 JSP 代碼,它實(shí)現(xiàn)將四個(gè)不同的片段插入如下的頁(yè)面。每一次當(dāng)標(biāo)題改變的時(shí)候,您僅需修改這四個(gè)文件而無(wú)須更改主要的JSP 頁(yè)面。
這個(gè)action使您能將一個(gè)JavaBean裝入一個(gè)JSP頁(yè)面。這是一個(gè)非常有用的能力,因?yàn)樗鼓梢允褂每芍赜玫腏AVA類而不需犧牲性能。最簡(jiǎn)單的語(yǔ)法用于指定一個(gè)bean
這通常意味著“實(shí)例化一個(gè)類的對(duì)象通過(guò)指定一個(gè)類,并將之與一個(gè)通過(guò)id指定名稱的變量綁定”。然而,就象我們看到的,您可以指定一個(gè)scope屬性來(lái)使得bean不僅僅與當(dāng)前的頁(yè)面相聯(lián)系。在這種情形下,得到一個(gè)對(duì)已存在的bean的引用是非常有用的,而且,僅當(dāng)沒(méi)有相同的id和scope的bean存在時(shí)才創(chuàng)建一個(gè)新的?,F(xiàn)在,您已有了bean,您可以通過(guò)JSP:setProperty來(lái)修改它,或者,通過(guò)使用之前用id指定的名字來(lái)使用 scriptlet或明確的調(diào)用方法。當(dāng)您說(shuō)“這個(gè)bean有一個(gè)稱為foo的X類型的屬性”,您真正的意思是“這個(gè)類有一個(gè)稱為getFoo的方法,它返回X類型的某類值,還有另一個(gè)方法稱為setFoo,它以X為參數(shù)?!边@JSP:setProperty action 將在下一單元詳細(xì)的介紹,但是現(xiàn)在您既可以給出一個(gè)明確的值,給出一個(gè)屬性來(lái)說(shuō)明此值是從request的參數(shù)繼承而來(lái),也可以僅僅列出屬性來(lái)標(biāo)志此值應(yīng)該從與屬性名同名的參數(shù)繼承而來(lái)。您可以通過(guò)調(diào)用適用的getXxx方法,或更普遍的,使用JSP:getProperty action,來(lái)得到已存在的JSP表達(dá)式或scriptlet屬性。
請(qǐng)注意,為bean指定的類必須在服務(wù)器的規(guī)則的類路徑下,而不是用來(lái)保留當(dāng)改變時(shí)自動(dòng)裝載的類的路徑。例如,在Java Web Server上,它和它所用的類必須到類的目錄或在lib目錄下的一個(gè)jar文件內(nèi),而不是在servlets的目錄下。 以下是bean的原代碼:
2.JSP:useBean 的詳細(xì)用法
最簡(jiǎn)單的使用bean的方式是:
為了裝載bean,需要用JSP:setProperty和 JSP:getProperty來(lái)修改和檢索bean的屬性。且,還有兩種別的選項(xiàng)。首先,您可以使用容器的格式
要指出的是,Body部分應(yīng)該僅在bean第一次實(shí)例化時(shí)被執(zhí)行,而不是在每次被找到和使用時(shí)。Beans能夠被共享,因此,并不是所有的 JSP:useBean 陳述都產(chǎn)生一個(gè)新的bean的實(shí)例。其次,除了id 或class以外,還有三種屬性您可以使用:scope,type,和beanName。指明bean在之上可以被使用的前后關(guān)系。有四個(gè)可能的值:page,request,session,和application。缺省為page,表明 bean僅在當(dāng)前頁(yè)可用(保存在當(dāng)前的PageContext中)。request的一個(gè)值表明bean僅用于當(dāng)前客戶端的請(qǐng)求(保存在 ServletRequest對(duì)象中)。Session的值指出在當(dāng)前的HttpSession的生命周期內(nèi),對(duì)象對(duì)所有的頁(yè)面可用。最后,application的值指出對(duì)象對(duì)所有共享ServletsContext的頁(yè)面可以使用。使用JSP:useBean 僅在沒(méi)有相同的id和scope 的bean時(shí)創(chuàng)建一個(gè)新的bean,如果已有則使用之,并忽略以JSP:useBean標(biāo)志開(kāi)始和結(jié)尾的代碼。
type指明將指向?qū)ο蟮淖兞康念愋?。這必須與類名相匹配或是一個(gè)超類或者是一個(gè)實(shí)現(xiàn)類的接口。記住,變量的名由id屬性來(lái)指定。
beanName賦予bean一個(gè)名字,您應(yīng)該在Beans的實(shí)例化方法中提供。它允許您給出type和一個(gè)beanName,并省略類屬性。
3.JSP Action setProperty
這是一個(gè)必選屬性。它指出哪一個(gè)bean的屬性將被設(shè)置。JSP:usebean必須出現(xiàn)在JSP:setProperty之前。
property這是一個(gè)必選屬性。表明您將設(shè)置哪一個(gè)屬性。然而,有一個(gè)特殊的情況:如果以"*"為值意味著,所有的名稱與bean的屬性匹配的request參數(shù)都將被傳遞到相應(yīng)的屬性設(shè)置方法。
value這是一個(gè)可選屬性。它指定被設(shè)置的屬性的值。字符串的值通過(guò)相應(yīng)的對(duì)象或包的標(biāo)準(zhǔn)的valueOf方法將自動(dòng)的轉(zhuǎn)換為 numbers,boolean,Boolean,byte,Byte,char,和Character。例如,boolean或Boolean屬性的值 “true”將通過(guò)Boolean.valueOf方法轉(zhuǎn)化,而,一個(gè)int或Integer屬性的值“42”將通過(guò)Integer.valueOf轉(zhuǎn)化。您不能同時(shí)使用value和param屬性,但,兩個(gè)都不用是允許的。
param這是一個(gè)可選屬性。它指明了bean的屬性應(yīng)該繼承的request的參數(shù)。如果當(dāng)前的request沒(méi)有這樣的一個(gè)參數(shù),就什麼也不做:系統(tǒng)并不將 null傳給設(shè)置屬性的方法。因此,您可以使用bean的缺省值。例如下面的這段程序執(zhí)行“將numberOfItems屬性設(shè)置為任意numItems request參數(shù)的值,如果有這樣的一個(gè)request參數(shù),否則什么也不做?!?/P>
如果您將value和param同時(shí)缺省,這和您將param的名稱設(shè)為bean的屬性名相同一樣。您可以通過(guò)將name的值設(shè)置為”*”和省略 value和param來(lái)自動(dòng)的使用與bean的屬性相應(yīng)的request的屬性。在這種情況下,服務(wù)器將反復(fù)的查找可用的屬性和request參數(shù)來(lái)匹配具有相同名字的。
【編輯推薦】