JSP 標(biāo)準(zhǔn)標(biāo)記庫(kù)(JSP Standard Tag Library,JSTL)是一個(gè)實(shí)現(xiàn) Web 應(yīng)用程序中常見(jiàn)的通用功能的定制標(biāo)記庫(kù)集,這些功能包括迭代和條件判定、數(shù)據(jù)治理格式化、xml 操作以及數(shù)據(jù)庫(kù)訪問(wèn)。在developerWorks 上其新系列的第一篇文章中,軟件工程師 Mark Kolb 向您展示了如何使用 JSTL 標(biāo)記來(lái)避免在 JSP 頁(yè)面中使用腳本編制元素。您還將了解如何通過(guò)從表示層刪除源代碼來(lái)簡(jiǎn)化軟件維護(hù)。最后,您將了解 JSTL 經(jīng)過(guò)簡(jiǎn)化的表達(dá)式語(yǔ)言,它答應(yīng)在不必使用功能齊全的編程語(yǔ)言的情況下對(duì) JSTL 操作指定動(dòng)態(tài)屬性值。
javaServer Pages(JSP)是用于 J2EE 平臺(tái)的標(biāo)準(zhǔn)表示層技術(shù)。JSP 技術(shù)提供了用于執(zhí)行計(jì)算(這些計(jì)算用來(lái)動(dòng)態(tài)地生成頁(yè)面內(nèi)容)的腳本編制元素和操作。腳本編制元素答應(yīng)在 JSP 頁(yè)面中包括程序源代碼,在為響應(yīng)用戶請(qǐng)求而呈現(xiàn)頁(yè)面時(shí)可以執(zhí)行這些源代碼。操作將計(jì)算操作封裝到很象 Html 或 XML 標(biāo)記的標(biāo)記中,JSP 頁(yè)面的模板文本通常包含這些標(biāo)記。JSP 規(guī)范只將幾種操作定義成了標(biāo)準(zhǔn),但從 JSP 1.1 開(kāi)始,開(kāi)發(fā)人員已經(jīng)能夠以定制標(biāo)記庫(kù)的方式創(chuàng)建其自己的操作了。
清單 4. 組合靜態(tài)文本和多個(gè) EL 表達(dá)式以指定動(dòng)態(tài)屬性值
限制了作用域的變量 JSP API 通過(guò) 操作答應(yīng)從 JSP 容器內(nèi)的四個(gè)不同作用域中存儲(chǔ)和檢索數(shù)據(jù)。JSTL 通過(guò)提供用于指定和除去這些作用域中的對(duì)象的附加操作來(lái)擴(kuò)展這一能力。此外,EL 提供將這些對(duì)象作為限制了作用域的變量進(jìn)行檢索的內(nèi)置支持。非凡地,任何出現(xiàn)在 EL 表達(dá)式中但不對(duì)應(yīng)于任何 EL 隱式對(duì)象的標(biāo)識(shí)符,都被自動(dòng)假定為引用存儲(chǔ)在四個(gè) JSP 作用域的其中某個(gè)中的對(duì)象,這四個(gè)作用域是:
頁(yè)面作用域 請(qǐng)求作用域 會(huì)話作用域 應(yīng)用程序作用域
您可能還記得,只有在為特定請(qǐng)求處理頁(yè)面期間才能檢索存儲(chǔ)在該頁(yè)面作用域中的對(duì)象。假如對(duì)象是存儲(chǔ)在請(qǐng)求作用域中的,可以在處理所有參與處理某請(qǐng)求的頁(yè)面期間檢索這些對(duì)象(譬如在對(duì)某個(gè)請(qǐng)求的處理中碰到了一個(gè)或多個(gè) 或 操作)。假如對(duì)象是存儲(chǔ)在會(huì)話作用域中的,則在與 Web 應(yīng)用程序的交互式會(huì)話期間,可以由用戶訪問(wèn)的任何頁(yè)面檢索它(即,直到與該用戶交互相關(guān)聯(lián)的 Httpsession 對(duì)象無(wú)效為止)。可以由任何用戶從任何頁(yè)面訪問(wèn)存儲(chǔ)在應(yīng)用程序作用域中的對(duì)象,直到卸載 Web 應(yīng)用程序本身為止(通常是由于關(guān)閉 JSP 容器所致)。
通過(guò)將字符串映射為期望作用域中的對(duì)象來(lái)將對(duì)象存儲(chǔ)到該作用域。然后,就可以通過(guò)提供相同字符串來(lái)從該作用域檢索該對(duì)象。在作用域的映射中查找字符串,并返回被映射的對(duì)象。在 Servlet API 中,將此類(lèi)對(duì)象稱為相應(yīng)作用域的屬性。但是,在 EL 的上下文中,也將與屬性相關(guān)聯(lián)的字符串看作變量的名稱,該變量通過(guò)屬性映射的方式獲得特定的值。
在 EL 中,與隱式對(duì)象無(wú)關(guān)聯(lián)的標(biāo)識(shí)符被認(rèn)為是存儲(chǔ)在四個(gè) JSP 作用域中的名稱對(duì)象。首先對(duì)頁(yè)面作用域檢查是否存在這樣的標(biāo)識(shí)符,其次對(duì)請(qǐng)求作用域、然后對(duì)會(huì)話作用域、最后對(duì)應(yīng)用程序作用域依次進(jìn)行這樣的檢查,然后測(cè)試該標(biāo)識(shí)符的名稱是否與存儲(chǔ)在該作用域中的某個(gè)對(duì)象的名稱匹配。第一個(gè)這樣的匹配作為 EL 標(biāo)識(shí)符的值被返回。通過(guò)這種方法,可以將 EL 標(biāo)識(shí)符看作引用限制了作用域的變量。