下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、JSTL 概在 JSP 頁(yè)面中,使用庫(kù)代替?zhèn)鹘y(tǒng)的Jav段語(yǔ)言來(lái)實(shí)現(xiàn)頁(yè)面的顯示邏輯已經(jīng)不是新技術(shù)了,然而,由自定義很容易造成重復(fù)定義和非標(biāo)準(zhǔn)的實(shí)現(xiàn)。鑒于此,出現(xiàn)了 JSTL(JSP Standard Tag Library)。大多數(shù) JSP 頁(yè)面邏輯提供了實(shí)現(xiàn)的 JSTL 技術(shù),該技術(shù)本身就是 個(gè)庫(kù)。Sun 公司 Java 規(guī)范標(biāo)準(zhǔn)的 JSTL 由 apache jakarta 組織負(fù)責(zé)。作為開(kāi)源的標(biāo)準(zhǔn)技術(shù),它 直在不斷地完善。JSTL 的發(fā)布包有兩個(gè)版本:Standard-1.0 Taglib、Standard-1.1 Taglib,它們?cè)谑褂脮r(shí)是不同Standard-1.0Taglib(JS
2、TL1.0)支持Servlet2.3 JSP1.2 規(guī)范,Web 應(yīng)用服務(wù)器 支持這些規(guī)范,而它的發(fā)布也在 Tomcat 4.1.24 測(cè)試通過(guò)Standard-1.1Taglib(JSTL1.1)支持Servlet2.4 JSP2.0 規(guī)范,Web 應(yīng)用服務(wù)器 支持這些規(guī)范,它的發(fā)布在 Tomcat 5.0.3 測(cè)試通過(guò)在本章的介紹中,將以由 Sun 發(fā)布的 Standard-1.1 Taglib 庫(kù)為主,而 apache jakarta 組織發(fā)布的開(kāi)源庫(kù),可以從 找到所需要的幫助。Sun 發(fā)布的標(biāo)準(zhǔn) JSTL1.1 庫(kù)有以庫(kù):包含 Web 應(yīng)用的常見(jiàn)工作,比如:循環(huán)、表達(dá)式賦值、基本輸入輸
3、出等庫(kù):用來(lái)格式化顯示數(shù)據(jù)的工作,比如:對(duì)不同區(qū)域的日期格式化等數(shù)據(jù)庫(kù)庫(kù):可以做數(shù)據(jù)庫(kù)的工作XML 庫(kù):用來(lái)XML 文件的工作,這是 JSTL 庫(kù)的 個(gè)特點(diǎn)函數(shù)庫(kù):用來(lái)已經(jīng)定義的某個(gè)函數(shù)此外,JSTL 還提供了 EL 表達(dá)式語(yǔ)言(Expression Language)來(lái)進(jìn)行輔助JSTL EL 表達(dá)式語(yǔ)JSTL 庫(kù)和 EL 表達(dá)式語(yǔ)言兩個(gè)部分組成。EL 在 JSTL 1.0 規(guī)范中被引入,當(dāng)時(shí)用來(lái)作Java 表達(dá)式來(lái)工作,而該表達(dá)式必須配合 JSTL 的庫(kù)才能得到需要的結(jié)果說(shuō)明JSTL 1.1 規(guī)范中,JSP2.0 容器已經(jīng)能夠獨(dú)立的理解任何 EL 表達(dá)式。EL 可以獨(dú)立出現(xiàn)在 JSP 頁(yè)面
4、的任何角落。本文隨后的內(nèi)容將以 JSTL 1.1 規(guī)范作為介紹的重點(diǎn)。JSTL EL EL 是從 JavaScript 語(yǔ)言得到啟發(fā)的 種表達(dá)式語(yǔ)言,它借鑒了 JavaScript 多類型轉(zhuǎn)換無(wú)關(guān)性的特 點(diǎn)。在使用 EL 從 scope 中得到參數(shù)時(shí)可以自動(dòng)轉(zhuǎn)換類型,因此對(duì)于類型的限制更加寬松。Web 服務(wù)器對(duì)于 request 請(qǐng)求參數(shù)通常會(huì)以 String 類型來(lái)發(fā)送,在得到時(shí)使用的 Java 語(yǔ)言就應(yīng)該是 request.getParaeter(“”),這樣的話,對(duì)于實(shí)際應(yīng)用還必須進(jìn)行強(qiáng)制類型轉(zhuǎn)換。而 EL 就將用戶從這種類型轉(zhuǎn)換的繁瑣工作脫離出來(lái),允許用戶直接使用 EL表達(dá)式取得的值,
5、而不用關(guān)心它是什么類型。下面的示例就是 個(gè) EL 表達(dá)式,見(jiàn)例 9.1。例 9.1:簡(jiǎn)單 EL 表達(dá)式% page contentType=text/html; charset=UTF- $sampleValue+1 這個(gè)示例將在 JSP 頁(yè)面顯示為“1”,EL 表達(dá)式必須以“$”來(lái)表示,其中“”部分就是具體表達(dá)式內(nèi)容,“$”將這個(gè)表達(dá)式內(nèi)容包含在其中作為 EL表達(dá)式的定義。本示例可以在滿足 JSP2.0規(guī)范的任何 Web 應(yīng)用服務(wù)器中使用。EL 個(gè) EL 表達(dá)式包含變量和操作符兩在于 JSP 作用范圍的 JavaBean 都可以被轉(zhuǎn)化成 表達(dá)式來(lái)使用,它所包含的默認(rèn)變量如下:默認(rèn)變量 pag
6、eScope、requestScope、sessionScope、這 4 個(gè)默認(rèn)變量包含 Scope 作用范圍的參數(shù)集合,相當(dāng)于被保存在 java.util.Map 中的某個(gè)參數(shù)。下面看簡(jiǎn)單的示例 9.2:例 9.2:使用 sessionScope 變量的 EL 表達(dá)%request.getSession().setAttribute(sampleValue, new 取得保存在 Session 中參數(shù)的 sessionScope 變量的 EL 表達(dá)式,“.”是 property 操作符,在這里表示從 Session 中取得“鍵”為“sampleValue”的參數(shù),并顯示出來(lái)。顯示結(jié)果為“10
7、”。默認(rèn)變量 param、這兩個(gè)默認(rèn)變量包含請(qǐng)求參數(shù)的集合,param 表明請(qǐng)求包含的參數(shù)為單 控件,paramValues 表明請(qǐng)求包含的參數(shù)為控件數(shù)組。下面看 個(gè)簡(jiǎn)單示例 9.3:例 9.3:提交請(qǐng)求的頁(yè)面和接受的頁(yè)% page contentType=text/html; charset=UTF- form “sampleSingleValue”的是單 控件,通過(guò)遞交將請(qǐng)求參數(shù)傳送到 SampleJsp.jsp。% page contentType=text/html; charset=UTF- $paramValues.sampleValue2 $param.sampleSingleV
8、alue 這是請(qǐng)求轉(zhuǎn)發(fā)到的頁(yè)面,通過(guò)EL 表達(dá)式的paramValues 變量得到控件數(shù)組中最后 個(gè)控件的遞交參數(shù),通過(guò) EL 表達(dá)式的 param 變量得到單 控件的遞交參數(shù)??丶?shù)組參數(shù)的 EL 表達(dá)式使用“”來(lái)指定數(shù)組下標(biāo)。本示例將顯示控件數(shù)組中最后 個(gè)控件的值“12”和單 控件的值“SingleValue”。默認(rèn)變量 header、這兩個(gè)默認(rèn)變量包含請(qǐng)求參數(shù)頭部信息的集合,header 變量表示單 頭部信息,headerValues 則表示數(shù)組型的頭部信息。默認(rèn)變量 包含所有請(qǐng)求的 集合,集合中的每個(gè)對(duì)象對(duì)應(yīng) javax.servlet.http.默認(rèn)變量 包含所有應(yīng)用程序初始化參數(shù)的
9、默認(rèn)變量 等價(jià)于 page 環(huán)境類 javax.servlet.jsp.PageContext 的實(shí)例,用來(lái)提供不同的請(qǐng)求參數(shù)11 個(gè)默認(rèn)變量幾乎包含了 Web 應(yīng)用的所有基本操作,個(gè)表達(dá)式不使用這些變量而直接使用參名,那么就采用就近原則。該表達(dá)式將使用最近取得的參數(shù)值EL EL表達(dá)式中還有許多操作符可以幫助完成各種所需的操作,之前的示例中“.”、“”就是其中的兩個(gè),下面將用表 9.1 來(lái)展示所有操作符及它們各自的功能。表 9.1 EL 表達(dá)式的操操作功. 個(gè) bean 屬性或者 Mntry 個(gè)數(shù)組或者鏈表元素對(duì)子表達(dá)式分組,用來(lái)改變賦值順?條件語(yǔ)句,比如:條件如果條件為真,表達(dá)式值為前者,反
10、之為后+數(shù)算符,加操-數(shù)算符,減操作或者對(duì) 個(gè)值取*數(shù)算符,乘操/ 或 數(shù)算符,除操% 數(shù)算符,模操作(取余= 或 邏輯運(yùn)算符,判斷符號(hào)左右兩端是否相等,如果相等返回 true,否則返回 或 邏輯運(yùn)算符,判斷符號(hào)左右兩端是否不相等,如果不相等返回 true,否則返回 或 邏輯運(yùn)算符,判斷符號(hào)左邊是否大于右邊,如果大于返回 true,否則返回 = 或 邏輯運(yùn)算符,判斷符號(hào)左邊是否大于或者等于右邊,如果大于或者等于返回 true,否則返回 & 邏輯運(yùn)算符,與操作賦。如果左右兩邊同為 true 返回true,否則返回 | 或 邏輯運(yùn)算符,或操作賦。如果左右兩邊有任何 邊為 true true,否則返
11、回 ! 或 邏輯運(yùn)算符,非操作賦。如果對(duì) true 取運(yùn)算返回false,否則用來(lái)對(duì) 個(gè) 空變量值進(jìn)行判斷: null、 個(gè)String、空數(shù)組、 Map、沒(méi)有條目的 集調(diào)用方法, func 是方法名,args 是參數(shù),可以沒(méi)有,或者有 個(gè)、多個(gè)參數(shù).參數(shù)間用逗號(hào)隔這些操作符都是極其有用的,下面通過(guò)幾個(gè)示例來(lái)演示它們的使用方法:例 9.4:幾組操作符的示例 /顯示 /顯示 ) /顯示 ) /顯示 inputtype=textname=sample1value=$pageScope.sampleValue10顯示值為10的 Text 控件可以看到,對(duì)于這些示例,程序設(shè)計(jì)者完全無(wú)需管理它們的類型轉(zhuǎn)
12、換,在表達(dá)式都已經(jīng)處理了。有了 L 表達(dá)式,在 JP 頁(yè)面的編程變得更靈活,也更容易。JSTL 庫(kù)介在 JSTL1.1 中有以下這些庫(kù)是被支持的:Core 庫(kù)、XML processing 庫(kù)、I18N 庫(kù)、Database access 庫(kù)、Functions 庫(kù)。對(duì)應(yīng)的標(biāo)識(shí)符見(jiàn)表 9.2 所示表9.2 庫(kù)的標(biāo)識(shí)庫(kù)前cXMLxI18N下面看例9.5,簡(jiǎn)單使用庫(kù)的示例。例 9.5:簡(jiǎn)單 JSTL 庫(kù)示例% page contentType=text/html; charset=UTF-% taglib prefix=c /jsp/jstl/core br 在該示例的 JP 頁(yè)面中了將使用 or
13、e 庫(kù),它的 RI 為“hjpjt/ore”,綴為“c”。之后,頁(yè)面中就是使用了 JSTL 的進(jìn)行了工作。對(duì)于該的功能,這里暫時(shí)不作具體講解,只是讓讀者能夠有個(gè)簡(jiǎn)單的概念,了解怎樣定義和使用庫(kù)。JSTL Core Core 庫(kù),又被稱為庫(kù),該庫(kù)的工作是對(duì)于 JSP 頁(yè)面 般處理的封裝。在該庫(kù)中的 共有 14 個(gè),被分為了四類,分別是:循環(huán)控制:、URL相關(guān):、。以下是各個(gè)的用途和屬性以及簡(jiǎn)單示例。用于顯示的是 個(gè)最常用的,用于在 JSP 中顯示數(shù)據(jù)。它的屬性和描述如表 9.3 所示表 9.3 屬性和說(shuō)屬描輸出到頁(yè)面的數(shù)據(jù),可以是 EL 表達(dá)式或常量(必須當(dāng) value 為 null 時(shí)顯示的數(shù)
14、據(jù)(可選當(dāng)設(shè)置為 true 時(shí)會(huì)主動(dòng)更換特殊字符,比如“,;”(可選,默認(rèn)為 在 JSTL1.0 的時(shí)候,在頁(yè)面顯示數(shù)據(jù)必須使用來(lái)進(jìn)行。然而,在 JSTL1.1 中,由于 JSP2.0 規(guī)范已經(jīng)默認(rèn)支持了 EL 表達(dá)式,因此可以直接在 JSP 頁(yè)面使用表達(dá)式。下面看個(gè) 示例。 該示例將從 Session 查找名為“anyValue”的參數(shù),并顯示在頁(yè)面,若沒(méi)有找到則顯示“no value”用于賦值的用于為變量或JavaBean 中的變量屬性賦值的工作。它的屬性和描述如表 9.4 所示JavaBean 實(shí)例的變量屬性名稱(可選JavaBean 實(shí)例的變量屬性名稱(可選被賦值的 JavaBean
15、實(shí)例的名稱,若存在該屬性則必須存在 property 屬性(可選值的信息,可以是 EL 表達(dá)式或常描屬變量的作用范圍,若沒(méi)有變量的作用范圍,若沒(méi)有指定,默認(rèn)page(可選當(dāng)不存在 value 的屬性時(shí),將以包含內(nèi)的實(shí)體數(shù)據(jù)作為賦值的內(nèi)容。下面?zhèn)€示例被賦值的變量名(可選 該示例將為名為“oneString”的變量賦值為“this is andy”,其作用范圍為 page用于刪除的用于刪除存在于 scope 中的變量。它的屬性和描述如表 9.5 所示表9.5 屬性和說(shuō)屬描需要被刪除的變量變量的作用范圍,若沒(méi)有指定,默認(rèn)為全部查找(可選下面看 個(gè)示c:remove var=sampleValue $
16、sessionScope.sampleValue 該示例將存在于 Session 中名為“sampleValue”的變量刪除。下 EL 表達(dá)式顯示該變量時(shí),該變量用于異常捕獲的允許在 JSP 頁(yè)面中捕捉異常。它包含個(gè) var 屬性,是選。若沒(méi)有 var 屬性的定義,那么僅僅捕捉異常而不做任何事情,若定義了 var 屬性,則可以利用 var 所定個(gè) 示例。c:catch$param.sampleSingleValue9 = 當(dāng)“$param.sampleSingleValue9 = 3”表達(dá)式有異常時(shí),可以從 var 屬性“err”得到異常的內(nèi)容,通常判斷“err”是否為 null 來(lái)決定錯(cuò)誤信
17、息的提示。用于判斷的用于簡(jiǎn)單的條件語(yǔ)句。它的屬性和描述如表 9.6 所示屬描需要判斷的條屬描需要判斷的條保存判斷結(jié)果 true false 的變量名,該變量可供之后的工作使用(可選變量的作用范圍,若沒(méi)有指定,默認(rèn)為保存于 page 范圍中的變量(可選下面看 個(gè)示 It is$visits該示例將判請(qǐng)求提交的傳入控件數(shù)組參數(shù)中,下標(biāo)為“2”的控件內(nèi)容是否為“12”,若12 則顯示“It is 12”。判斷結(jié)果被保存在 page 范圍中的“visits用于復(fù)雜判斷的、這三個(gè)用于實(shí)現(xiàn)復(fù)雜條件判斷語(yǔ)句,類似“if,elseif”的條件語(yǔ)句8c:choose沒(méi)有屬性,可以被認(rèn)為是父,、將作為其子標(biāo)簽來(lái)使
18、用。等價(jià)于“if”語(yǔ)句,它包個(gè) test 屬性,該屬性表示需要判斷的條件8c:otherise沒(méi)有屬性,它等價(jià)于“else”語(yǔ)句。下面看 個(gè)復(fù)雜條件語(yǔ)句的示例。c:when test=$paramValues.sampleValue2 = not12not13,itisc:when test=$paramValues.sampleValue2 = not11not13,itisc:when test=$paramValues.sampleValue2 = not11not12,itisnot 11 、12、該示例將判斷 request 請(qǐng)求提交的傳入控件數(shù)組參數(shù)中,下標(biāo)為“2”控件內(nèi)容是否為“
19、11”或或“13”,并根據(jù)判斷結(jié)果顯示各自的語(yǔ)句,若都不是則顯示“not 11 、12、13用于循環(huán)的為循環(huán)控制。它的屬性和描述如表 9.7 所示表 9.7 屬性和說(shuō)屬描進(jìn)行循環(huán)的集合(可選開(kāi)始條件(可選結(jié)束條件(可選循環(huán)的步長(zhǎng),默認(rèn)為 1(可選做循環(huán)的對(duì)象變量名,若存在 items 屬性,則表示循環(huán)集合中對(duì)象的變量名(可選下面?zhèn)€顯示循環(huán)狀態(tài)的變量(可選合循環(huán)的示例。%ArrayListarrayList=new%request.getSession().setAttribute(arrayList, 可以根據(jù)某個(gè)分隔符分隔指定字符串,相當(dāng)于java.util.StringTokenizer
20、類。它的屬性和描述如表 9.8 所示:表 9.8 屬性和說(shuō)屬描進(jìn)行分隔的 EL 表達(dá)式或常分隔開(kāi)始條件(可選結(jié)束條件(可選循環(huán)的步長(zhǎng),默認(rèn)為 1(可選做循環(huán)的對(duì)象變量名(可選顯示循環(huán)狀態(tài)的變量(可選下面看 個(gè)示 需要分隔的字符串為“aa,bb,cc,dd”,分隔符為“,”。begin 屬性指定從第 個(gè)“,”開(kāi)始分隔,end 屬只能顯示“aa cc”用于包含頁(yè)面的允許包含個(gè) JSP 頁(yè)面到本頁(yè)面來(lái)。它的屬性和描述如表 9.9 所示屬描需要導(dǎo)入頁(yè)面的 屬描需要導(dǎo)入頁(yè)面的 Web Context 該屬性用于在不同的 Context 下導(dǎo)入頁(yè)面,當(dāng)出現(xiàn) 屬性時(shí),必須以“/”開(kāi)頭,此時(shí)也需要 url 屬
21、性以“/”開(kāi)頭(可選導(dǎo)入頁(yè)面的字符集(可選可以定義導(dǎo)入文本的變量名(可選導(dǎo)入文本的變量名作用范圍(可選 接受文本的 java.io.Reader 類變量名(可選下c:import url=/MyHtml.html var=thisPage c:import url=/MyHtml.html context=”/sample2” ml.html 該示例演示了三種不同的導(dǎo)入方法,種是在Context 下的導(dǎo)入,第二種是在不同的 Context 導(dǎo)入,第三種是導(dǎo)入任意 URL用于得到 URL 地址的用于得個(gè) URL 地址。它的屬性和描述如表 9.10 所示表 9.10 屬性和說(shuō)屬描頁(yè)面的 URL 地
22、Web Context 該屬性用于得到不同 Context 下的 URL 地址,當(dāng)出現(xiàn) context屬性時(shí),必須以“/”開(kāi)頭,此時(shí)也需要url屬性以“/”開(kāi)頭(可URL 的字符集(可選 URL 的變量名(可選)變量名作用范圍(可選下面看 個(gè)示 a得到個(gè) URL 后,以 EL 表達(dá)式放入的 href 屬性,達(dá)到的目的用于頁(yè)面重定向的用于頁(yè)面的重定向,該的作用相當(dāng)于 response.setRedirect 方法的工作。它包含 url context 兩個(gè)屬性,屬性含義和相同。下面?zhèn)€ 示例 該示例若出現(xiàn)在 JSP 中,則將重定向到當(dāng)前Web Context 下的“MyHtml html”頁(yè)面般會(huì)
23、與等 起使用用于包含傳遞參數(shù)的用來(lái)為包含或重定向的頁(yè)面?zhèn)鬟f參數(shù)。它的屬性和描述如表 9.11 所示表9.11 屬性和說(shuō)屬描傳遞的參數(shù)傳遞的參數(shù)值(可選下面是 個(gè)示 c:param name=userName value=”RW” 該示例將為重定向的“MyHtml.jsp”傳遞指定參數(shù)“userName=RW”JSTLXMLprocessing在企業(yè)級(jí)應(yīng)用越來(lái)越依賴 XML 的今天,XML 格式的數(shù)據(jù)被作為信息交換的優(yōu)先選擇XML processing 庫(kù)為程序設(shè)計(jì)者提供了基本的對(duì) XML 格式文件的操作。在該庫(kù)中的 共有 10 個(gè),被分為了8XML :、8XML流控制:、紹8由于該XML轉(zhuǎn)換:
24、、庫(kù)專注于對(duì)某 特定領(lǐng)域的實(shí)現(xiàn),因此本書(shū)將只選擇其中常見(jiàn)的 些和屬性進(jìn)行用于解析 XML 文件的是該組庫(kù)的,從其名就可以知道,它是作為解析XML 文件而存在的。它的屬性和描述如表 9.12 所示:表 9.12 屬性和說(shuō)屬描源 XML 的內(nèi)容,該屬性的內(nèi)容應(yīng)該為 String 類型或者java.io.Reader 的實(shí)例屬性來(lái)替代,但是不將解析后的 XML 保存在該屬性所指定的變量中,之后XML processing 庫(kù)中的其他 若要取 XML 中的內(nèi)容就可以從該變量中得到(可選)變量的作用范圍(可選指定保存的變量為 .w3c.dom. 接口類型(可選.w3c.dom. 的接口類型變量作用范圍(
25、可選定義 個(gè) URI,該 URI 將被使用到 XML 文件中以接入其他資源文件(可選該屬性必須為 xml.sax.XMLFilter 類個(gè) 實(shí)例可以使用 EL 表達(dá)式傳入將對(duì) 文件做過(guò)濾得到自身需要的部分(可選其中,var、scope 和 varDom、scopeDom 不應(yīng)該同時(shí)出現(xiàn),而應(yīng)該被視為兩個(gè)版本來(lái)使用,二者的變量都可以ML processing 庫(kù)的其他來(lái)使用。般會(huì)結(jié)合 XML processing 庫(kù)中的其他來(lái)面看 個(gè) 示例。首先給個(gè)簡(jiǎn)單的 XML 文件,將對(duì)該 XML 文件做解析,該 XML 文件名為 SampleXml xml?xml version=1.0 encoding
26、=UTF- 庫(kù)的工作: 該示例XML文件得到了的幫助,將源XML文件的內(nèi)容保存在 “xmlFile”變量中,根據(jù)“xmlFile”變量的值解析“SampleXml xml”。用于顯示 XML 內(nèi)容的從解析后保存的變量中取得需要的 XML 文件內(nèi)容,并顯示在頁(yè)面上。該標(biāo)簽是通過(guò) XPath 技術(shù)(定位XML 元素的 種技術(shù))來(lái)實(shí)現(xiàn)的。要使用必須將 xalan-j 的 jar 包保存在“WEB-INF/lib”下。它的屬性和描述如表 9.13 所示:表 9.13 屬性和說(shuō)屬描XPath 表達(dá)當(dāng)特殊字符如:“,&,”出現(xiàn)在取得的結(jié)果字符串中時(shí),將以轉(zhuǎn)義字符來(lái)需要與協(xié)同工作,下面?zhèn)€ 示例 passWo
27、rd:x:out select=$xmlFileValue/xml-age:x:out select=$xmlFileValue/xml- XML 文件并解析后的變量 xmlFileValue 將加上“$”作為 XPath 表達(dá)式的開(kāi)頭,select 中的表達(dá) 式將從 xml-body 根元素下的各個(gè)子元素中取得實(shí)體內(nèi)容,最后將結(jié)果顯示在頁(yè)面上根SampleXml.xl”文件的內(nèi)容,將顯示。用于保存 XML 內(nèi)容的允許將某個(gè)源XML 中元素的實(shí)體內(nèi)容或?qū)傩?,保存到個(gè)變量中去它的實(shí)現(xiàn)也依靠XPath技術(shù)。它的屬性和描述如表 9.14 所示:表9.14 屬性和說(shuō)屬描XPath 表達(dá)保存結(jié)果的變量變
28、量的作用范圍(可選的 var 保存的變量由 XPath 的結(jié)果決定該變量的類型,下面?zhèn)€ 示例 x:set select=$xmlFileValue/xml-body/name 這里將保存 XML name 元素內(nèi)容到變量“thisName”中用于判斷的允許由 XPath 的boolean()函數(shù)得到的判斷結(jié)果,來(lái)判斷是否顯示其所包含的內(nèi)容 的屬性與相同,但是 var 的結(jié)果只能是 boolean 類型。用于復(fù)雜判斷的、這組起使用,來(lái)提供“if elseif”語(yǔ)句的功能沒(méi)有屬性,可以被認(rèn)為是父,、將作為其子來(lái)使用等價(jià)于“if”語(yǔ)句,它包個(gè) test 屬性,該屬性為 XPath 判斷表達(dá)式?jīng)]有屬性
29、,它等價(jià)于“else”語(yǔ)句用于對(duì) XML 元素循環(huán)的 為對(duì) XML 文件中名稱元素的循環(huán)控制。它的屬性和描述如表 9.15 所示屬描XPath 表達(dá)式,結(jié)果屬描XPath 表達(dá)式,結(jié)果個(gè)集 合,將對(duì)該集合進(jìn)行循環(huán)(可選開(kāi)始條件(可選結(jié)束條件(可選循環(huán)的步長(zhǎng),默認(rèn)為 1(可選做循環(huán)的對(duì)象變量名,表示 XPath 表達(dá)式結(jié)果集合中個(gè)對(duì) 象(可選面看 個(gè)示顯示循環(huán)狀態(tài)的變量(可選下x:forEach select=$xmlFileValue/xml-body/books/book 該示例將使用循環(huán) XML 中多個(gè)同存于 books 元素下的 book 子元素格式化 XML 顯示數(shù)據(jù)的允許使用 XSL
30、T(轉(zhuǎn)換 XML 格式的語(yǔ)言)為頁(yè)面的顯示數(shù)據(jù)做格式化的處理。它屬性和描述如表 9.16 所示表 9.16 屬性和說(shuō)屬描源 XML 的內(nèi)容,該屬性的內(nèi)容應(yīng)該為 String、java.io.Reader、 javax.xml.transform.Source、.w3c.dom.的實(shí)例,或者從、兩個(gè)得到。可以用 xml 屬性來(lái)替代,但是不被(可選XSLT的內(nèi)容,該屬性的內(nèi)容應(yīng)該為String、java.io.Reader、 javax.xml.transform.Source 的實(shí)例(可選)定義 個(gè) URI,該URI將被使用到XML文件中以接入其他資源文件??梢杂脁ml SystemId 屬性來(lái)
31、替代,但是不被(可選)定義 個(gè) URI,該 URI 將被使用到 XSLT 文件中以接入其他資源文件(可選將格式化后的 XML 文件保存在該屬性所指定的變量中,保存的變量.w3c.dom. 接口類型(可選變量的作用范圍(可選保存轉(zhuǎn)化結(jié)果的變量,保存的變量為 javax.xml.transform.Result 類型的實(shí)例(可選下面看 個(gè)示 c:import var=xmlFile c:setvar=xs ?xmlxsl:stylesheet xsl:template xsl:apply-templates xsl:template match=xml-body marginheight=0 ma
32、rginwidth=0 topmargin=0 xsl:value-of select=name xsl:value-of select=passWord x:transformx:transform xslt=$xs oc doc=$xmlFile 這個(gè)示例將 XML 文件保存的數(shù)據(jù)信息利用保存在“xlFile”中,然后使用保存?zhèn)€ XSLT 的源到“xsoc”,最后通過(guò)格式化 XML 文件的數(shù)據(jù)顯示在頁(yè)面上。用于參數(shù)傳遞的用于在格式化 XML 時(shí)傳遞所需要的參數(shù)。它的屬性和描述與相同,這里不再贅述。I18Nformatting看到 I18N 就應(yīng)該想到知識(shí)“”,I18N formatting
33、 庫(kù)就是用于在 JSP 頁(yè)面中做的動(dòng)作。在該庫(kù)中的 共有 12 個(gè),被分為了兩類,分別是:、。下面只選擇其中常見(jiàn)的 些 和屬性進(jìn)行介紹。用于設(shè)置本地化環(huán)境的用于設(shè)置Locale 環(huán)境。它的屬性和描述如表 9.17 所示屬描Locale環(huán)境的指定,可屬描Locale環(huán)境的指定,可以是java.util.LocaleString類型的實(shí)Locale 環(huán)境變量的作用范圍(可選下面看 個(gè)示 表示設(shè)置本地環(huán)境為繁體中文。用于資源文件綁定的、這兩組用于資源配置文件的綁定,唯 不同的是將資源配置文件綁定于它體中的顯示,則允許將資源配置文件保存為 個(gè)變量,在之后的工作可以根據(jù)該變量來(lái)根據(jù) Locale 環(huán)境的
34、不同將查找不同后綴的資源配置文件,這點(diǎn)在的任何技術(shù)上都是 致的,通常來(lái)說(shuō),這兩種單獨(dú)使用是沒(méi)有意義的,它們都會(huì)與 I18N formatting 庫(kù)中的其他配合使用。它們的屬性和描述如表 9.18 所示:表 9.18 、屬性和說(shuō)描描屬資源配置文件的指定,只需要指定文件名而無(wú)須擴(kuò)展名,二組共有的屬獨(dú)有的屬性,用于保存資源配置文件個(gè) 變變量的作下面看 個(gè)示例fmt:setLocalevalue=zh fmt:setBundle basename=applicationMessage 該示例將會(huì)查個(gè) 名為.properties的資源配置文件來(lái)作為顯示的綁用于顯示資源配置文件信息的用于信息顯示的,將顯
35、示資源配置文件中定義的信息。它的屬性和描述如表 9.19 所示屬描資源配置文件的屬描資源配置文件的“鍵”指若使用保存了資源配置文件,該屬性就可以從保存的資源配置文件中進(jìn)行查將顯示信息保存為 個(gè)變變量的作下面看 個(gè)示fmt:setBundle basename=applicationMessage fmt:message key=userName fmt:message key=passWord bundle=$applicationBundle 該示例使用了兩種資源配置文件的綁定的做法,“applicationMessage”資源配置文件利第 個(gè)將使用“applicationAllMessag
36、e”資源配置文件中“鍵”為 “userName”的信息顯示。8 第二個(gè)雖然被定義在體內(nèi),但是它使用了 bundle 屬 性,因此將指定之前由保存的“applicationMessage”資源配置文件,該“鍵”為 “passWord”的信息顯示。用于參數(shù)傳遞的應(yīng)該位于內(nèi),將為該消息提供參數(shù)值。它只個(gè)屬性 value種 是直接將參數(shù)值寫(xiě)在 value 屬性中,另用于為請(qǐng)求設(shè)置字符編碼的用于為請(qǐng)求設(shè)置字符編碼。它只個(gè)屬性 value,在該屬性中可以定義符編碼用于設(shè)定時(shí)區(qū)的、這兩組都用于設(shè)定 個(gè)時(shí)區(qū)。唯 不同的是將使得在其體內(nèi)的工作可以使用該時(shí)區(qū)設(shè)置,則允許將時(shí)區(qū)設(shè)置保存為 個(gè)變量,在之后的工作可以根
37、據(jù)該變量來(lái)進(jìn)行。它們的屬性和描述如表 9.20 所示:表 屬描時(shí)區(qū)的設(shè)獨(dú)有的屬性,用于保存時(shí)區(qū)為 個(gè) 變變量的作用于格式化數(shù)字的用于格式化數(shù)字。它的屬性和描述如表 9.21 所示表9.21 屬性和說(shuō)屬描格式化的數(shù)字,該數(shù)值可以是 String 類型java.lang.Number屬描格式化的數(shù)字,該數(shù)值可以是 String 類型java.lang.Number 類型的實(shí)格式化的格式化模結(jié)果保存變量的作指定格式化結(jié)果的最大指定格式化結(jié)果的最小指定格式化結(jié)果的最大值,帶小ftratoimbe下面看 個(gè)示fmt:formatNumber value=1000.888 type=currency 該結(jié)
38、果將被保存在“money”變量中,將根據(jù) Locale 環(huán)境顯示當(dāng)?shù)氐呢泿鸥袷接糜诮馕鰯?shù)字的用于解個(gè)數(shù)字,并將結(jié)果作為 java.lang.Number 類的實(shí)例返回看起來(lái)和的作用正好相反它的屬性和描述如表 9.22 所示表9.22 屬性和說(shuō)屬描將被解析的字符解析格式化的解析格式化模結(jié)果保存變量,類型為 變量的作下面看 個(gè)以本地化的形式來(lái)解析字符串,該屬性的內(nèi)容應(yīng)為 String java.util.Locale 類型的實(shí)例解析之后的結(jié)果為“0.15用于格式化日期的用于格式化日期。它的屬性和描述如表 9.23 所示變量的作結(jié)果保存變量的作結(jié)果保存格式化模格式化的格式化的日期,該屬性的內(nèi)容應(yīng)該是
39、 java.util.Date 類型的實(shí)描屬指定格式化日期的時(shí)的關(guān)系密切。若沒(méi)有指timeZone 屬性,也可以通過(guò)、兩組設(shè)定的時(shí)區(qū)來(lái)格式化最后的結(jié)果用于解析日期的個(gè)日期并將結(jié)果作為 java.lang.Date 類型的實(shí)例返回 看起來(lái)和的作用正好相反。它的屬性和描述如表 9.24 所示:表9.24 屬性和說(shuō)屬描將被解析的字符解析格式化的解析格式化模結(jié)果保存變量,類型為 變量的作以本地化的形式來(lái)解析字符串,該屬性的內(nèi)容為 String 或 java.util.Locale 類型的實(shí)指定解析格式化日期和兩組都實(shí)現(xiàn)解析字符串為 個(gè)具體對(duì)象實(shí)例的工作,因此,這兩組解析對(duì) var 屬性的字符串參數(shù)要求
40、非常嚴(yán)格。就 JSP 頁(yè)面的表示層前段來(lái)說(shuō),處理這種解析本不屬于份內(nèi)之事,因此和兩組應(yīng)該盡量少用,替代工作的地方應(yīng)該在服務(wù)器端表示層的后段,比如在 Servlet 中。DatabaseaccessDatabase access 庫(kù)中的用來(lái)提供在 JSP 頁(yè)面中可以與數(shù)據(jù)庫(kù)進(jìn)行交互的功能,雖然它的存在對(duì)于早期純 JSP 開(kāi)發(fā)的應(yīng)用以及小型的開(kāi)發(fā)有著意義重大的貢獻(xiàn),但是對(duì)于 MVC 模型來(lái)說(shuō),它卻是規(guī)范的。因?yàn)榕c數(shù)據(jù)庫(kù)交互的工作本身就屬于業(yè)務(wù)邏輯層的工作,所以不應(yīng)該在 JSP 頁(yè)面中出現(xiàn),而是應(yīng)該在模型層中進(jìn)行。對(duì)于 Database access 庫(kù)本書(shū)不作重點(diǎn)介紹,只給出幾個(gè)簡(jiǎn)單示例讓讀者略微
41、了解它們的功能Database access 庫(kù)有以下 6 組來(lái)進(jìn)行工作:、用于設(shè)置數(shù)據(jù)源的用于設(shè)置數(shù)據(jù)源,下面?zhèn)€ 示例 該示例定義 個(gè)數(shù)據(jù)源并保存在“dataSrc”變量?jī)?nèi)用于查詢的用于查詢數(shù)據(jù)庫(kù),它體內(nèi)可以句查詢 SQL。下面?zhèn)€ 示例sql:query var=queryResults select*from該示例將返回查詢的結(jié)果到變量“queryResults”中,保存的結(jié)果是 javax.servlet.jsp.jstl.sql.esult類型的實(shí)例。要取得結(jié)果集中的數(shù)據(jù)可以使用循環(huán)來(lái)進(jìn)行。下面看 個(gè)示例。 “rs”是 java.srltjpjt.q.slt 實(shí)例的變量屬性之,用來(lái)表示
42、數(shù)據(jù)庫(kù)表中的“列”集合循環(huán)時(shí),通過(guò)“$ro.”表達(dá)式可以取得每列的數(shù)據(jù),“”是表中的列名。用于更新的用于更新數(shù)據(jù)庫(kù),它的體內(nèi)可以句更新的 SQL 語(yǔ)句。其使用和沒(méi)有什么不同。用于事務(wù)處理的sql:transaction用于數(shù)據(jù)庫(kù)的事務(wù)處理,在該體內(nèi)可以使用和標(biāo)簽,而的事務(wù)管理將作用于它們之上。serializable4 個(gè)級(jí)別。用于事務(wù)處理的、這兩個(gè)用于向 SQL 語(yǔ)句提供參數(shù),就好像程序中預(yù)處理 SQL 的“?”除java.util.Date 類型以外的所有相融參數(shù),則指定必須傳遞java.util.Date 類型的參數(shù)Functions 稱呼Functions 庫(kù)為庫(kù),倒不如稱呼其為函數(shù)庫(kù)
43、來(lái)得更容易理解些。因?yàn)?Functions 庫(kù)并沒(méi)有提供傳統(tǒng)的來(lái)為 JSP 頁(yè)面的工作服務(wù),而是被用于 EL 表達(dá)式語(yǔ)句中。在 JSP2.0 規(guī)范下出現(xiàn)的 Functions 庫(kù)為 EL 表達(dá)式語(yǔ)句提供了許多更為有用的功Functions 分為兩大類,共16 長(zhǎng)度函數(shù)以下是各個(gè)函數(shù)的用途和屬性以及簡(jiǎn)單示例。長(zhǎng)度函數(shù) fn:length 函長(zhǎng)度函數(shù) fn:length 的出現(xiàn)有重要的意義。在 JSTL1.0 中,有 個(gè)功能被忽略了,那就是對(duì)集合的長(zhǎng)度取值。雖然 java.util.Collection 接口定義了 size 方法,但是該方法不是 個(gè) 標(biāo)準(zhǔn)的 JavaBean 屬性方法(沒(méi)有 ge
44、t,set 方法),因此,無(wú)法通過(guò) EL 表達(dá)式“$collection.size”來(lái)輕松取得。fn:length 函數(shù)正是為了解決這個(gè)問(wèn)題而被設(shè)計(jì)出來(lái)的。它的參數(shù)為 input,將計(jì)算通過(guò)該屬性傳入的對(duì)象長(zhǎng)度。該對(duì)象應(yīng)該為集合類型String 類型。其返回結(jié)果是 個(gè) int 類型的值。下面看 個(gè)示例 %request.getSession().setAttribute(arrayList1, 個(gè) ArrayList 類型的實(shí)例“arrayList1”,并為其添加三個(gè)字符串對(duì)象,使用 fn:length 函數(shù)后就可判斷函數(shù) fn:contains fn:contains 函數(shù)用來(lái)判斷源字符串是
45、否包含子字符串。它包string 和 substring 兩個(gè)參數(shù),它們都String 類型,分布表示源字符串字符串。其返回結(jié)果為 個(gè) boolean 類型的值。下面?zhèn)€示例$fn:contains(ABC, $fn:contains(ABC, 前者返回“false”,后者返回“true”fn:containsIgnoreCase 函fn:containsIgnoreCase 函數(shù)fn:contains 函數(shù)的功能差不多,唯 的區(qū)別是 fn:containsIgnoreCase 函數(shù)對(duì)于子字符串的包含比較將忽略大小寫(xiě)。它與 fn:contains 函數(shù)相同,包括 string 和 substri
46、ng 兩個(gè)參數(shù),并返回 個(gè) boolean 類型的值。下面看 個(gè) 示例。$fn:containsIgnoreCase(ABC, $fn:containsIgnoreCase(ABC, 前者和后者都會(huì)返回“true詞頭判斷函數(shù) fn:startsWith fn:startsWith 函數(shù)用來(lái)判斷源字符串是否符合連串的特定詞頭。它除了包含 個(gè) string 參數(shù)外,還包個(gè) subffx 參數(shù),表示詞頭字符串,同樣是 String 類型。該函數(shù)返回個(gè) boolean 類型的值。下面看 前者返回“false”,后者返回“true”詞尾判斷函數(shù) fn:endsWith 函fn:endsWith 函數(shù)用來(lái)判斷源字符串是否符連串的特定詞尾。它與fn:startsWith函數(shù)相同,包括和 subffx 兩個(gè)參數(shù),并返個(gè) boolean 類型的值。下面看 個(gè)示例$fn:endsWith(ABC, $fn:endsWith(ABC, 前者返回“false”,后者返回“true”字符實(shí)體轉(zhuǎn)換函數(shù) fn:escXml 函fn:escXml 函數(shù)用于將所有特殊字符轉(zhuǎn)
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024-2030年中國(guó)嬰幼兒營(yíng)養(yǎng)米粉行業(yè)營(yíng)銷模式及未來(lái)5發(fā)展趨勢(shì)報(bào)告
- 2024-2030年中國(guó)地鐵廣告行業(yè)趨勢(shì)研究與投資價(jià)值分析報(bào)告
- 2024年度健身房裝修設(shè)計(jì)合同范本6篇
- 2024年物聯(lián)網(wǎng)平臺(tái)建設(shè)合同
- 眉山藥科職業(yè)學(xué)院《冶金資源綜合利用》2023-2024學(xué)年第一學(xué)期期末試卷
- 2024年版礦物材料交易合同
- 2024年標(biāo)準(zhǔn)版噴漿作業(yè)人員勞動(dòng)協(xié)議一
- 閱讀是一個(gè)專門(mén)的領(lǐng)域
- 四川省樂(lè)山市2019-2020學(xué)年高二下學(xué)期期末考試化學(xué)試題(解析版)
- 2024停薪留職員工技能提升與職業(yè)發(fā)展合同范本3篇
- 公園保潔服務(wù)投標(biāo)方案
- 2024年高考英語(yǔ)作文預(yù)測(cè):倡議書(shū)(附答案解析)
- 安徽省2023-2024學(xué)年七年級(jí)上學(xué)期期末數(shù)學(xué)試題(原卷版)
- 2024年人教版八年級(jí)生物(上冊(cè))期末試卷及答案(各版本)
- 農(nóng)作物病蟲(chóng)害防治的社會(huì)經(jīng)濟(jì)效益分析考核試卷
- 2023年全國(guó)職業(yè)院校技能大賽-商務(wù)數(shù)據(jù)分析賽項(xiàng)規(guī)程
- 第五單元 大單元教學(xué)設(shè)計(jì)-【大單元教學(xué)】2024-2025學(xué)年七年級(jí)語(yǔ)文上冊(cè)同步備課系列(統(tǒng)編版2024)
- 《林火生態(tài)與管理》實(shí)驗(yàn)報(bào)告
- 【課件】紀(jì)念與象征-空間中的實(shí)體藝術(shù)+課件-高中美術(shù)人美版(2019)美術(shù)鑒賞
- JB∕T 11864-2014 長(zhǎng)期堵轉(zhuǎn)力矩電動(dòng)機(jī)式電纜卷筒
- SL352水工混凝土試驗(yàn)規(guī)程
評(píng)論
0/150
提交評(píng)論