国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開(kāi)發(fā)設(shè)計(jì) > 正文

JSTL 入門(mén)(1):表達(dá)式語(yǔ)言

2019-11-18 11:50:40
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

  通過(guò)避免使用腳本編制元素來(lái)簡(jiǎn)化對(duì) jsp 應(yīng)用程序的軟件維護(hù)
  
  
  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)建其自己的操作了。
  
  JSP 標(biāo)準(zhǔn)標(biāo)記庫(kù)(JSTL)是 JSP 1.2 定制標(biāo)記庫(kù)集,這些標(biāo)記庫(kù)實(shí)現(xiàn)大量服務(wù)器端 Java 應(yīng)用程序常用的基本功能。通過(guò)為典型表示層任務(wù)(如數(shù)據(jù)格式化和迭代或條件內(nèi)容)提供標(biāo)準(zhǔn)實(shí)現(xiàn),JSTL 使 JSP 作者可以專注于特定于應(yīng)用程序的開(kāi)發(fā)需求,而不是為這些通用操作“另起爐灶”。
  
  當(dāng)然,您可以使用 JSP 腳本編制元素(scriptlet、表達(dá)式和聲明)來(lái)實(shí)現(xiàn)此類(lèi)任務(wù)。例如,可以使用三個(gè) scriptlet 實(shí)現(xiàn)條件內(nèi)容,清單 1 中著重顯示了這三個(gè) scriptlet。但是,因?yàn)槟_本編制元素依靠于在頁(yè)面中嵌入程序源代碼(通常是 Java 代碼),所以對(duì)于使用這些腳本編制元素的JSP 頁(yè)面,其軟件維護(hù)任務(wù)的復(fù)雜度大大增加了。例如,清單 1 中的 scriptlet 示例嚴(yán)格地依靠于花括號(hào)的正確匹配。假如不經(jīng)意間引入了一個(gè)語(yǔ)法錯(cuò)誤,則條件內(nèi)容中的嵌套其它 scriptlet 可能會(huì)造成嚴(yán)重破壞,并且在 JSP 容器編譯該頁(yè)面時(shí),要使所產(chǎn)生的錯(cuò)誤信息有意義可能會(huì)很困難。
  
  清單 1. 通過(guò) scriptlet 實(shí)現(xiàn)條件內(nèi)容
  <% if (user.getRole() == "member")) { %>
  

Welcome, member!


  <% } else { %>
  

Welcome, guest!


  <% } %>
  
  
  
  修正此類(lèi)問(wèn)題通常需要相當(dāng)豐富的編程經(jīng)驗(yàn)。盡管通常會(huì)由十分精通頁(yè)面布局和圖形設(shè)計(jì)的設(shè)計(jì)人員來(lái)開(kāi)發(fā)和維護(hù) JSP,但是同一頁(yè)面中的腳本編制元素出現(xiàn)問(wèn)題時(shí),需要程序員的介入。這種狀況將單個(gè)文件中代碼的責(zé)任分擔(dān)給多人,因而使得開(kāi)發(fā)、調(diào)試和增強(qiáng)此類(lèi) JSP 頁(yè)面成為很麻煩的任務(wù)。通過(guò)將常用功能包裝到定制標(biāo)記庫(kù)的標(biāo)準(zhǔn)集合中,JSTL 使 JSP 作者可以減少對(duì)編制腳本元素的需求,甚至可以不需要它們,并避免了相關(guān)的維護(hù)成本。
  
  JSTL 1.0
  JSTL 1.0 發(fā)布于 2002 年 6 月,由四個(gè)定制標(biāo)記庫(kù)(core、format、xml 和 sql)和一對(duì)通用標(biāo)記庫(kù)驗(yàn)證器(ScriptFreeTLV 和 PermittedTaglibsTLV)組成。core 標(biāo)記庫(kù)提供了定制操作,通過(guò)限制了作用域的變量治理數(shù)據(jù),以及執(zhí)行頁(yè)面內(nèi)容的迭代和條件操作。它還提供了用來(lái)生成和操作URL 的標(biāo)記。顧名思義,format 標(biāo)記庫(kù)定義了用來(lái)格式化數(shù)據(jù)(尤其是數(shù)字和日期)的操作。它還支持使用本地化資源束進(jìn)行 JSP 頁(yè)面的國(guó)際化。xml 庫(kù)包含一些標(biāo)記,這些標(biāo)記用來(lái)操作通過(guò) XML 表示的數(shù)據(jù),而 sql 庫(kù)定義了用來(lái)查詢關(guān)系數(shù)據(jù)庫(kù)的操作。
  
  兩個(gè) JSTL 標(biāo)記庫(kù)驗(yàn)證器答應(yīng)開(kāi)發(fā)人員在其 JSP 應(yīng)用程序中強(qiáng)制使用編碼標(biāo)準(zhǔn)。可以配置 ScriptFreeTLV 驗(yàn)證器以在 JSP 頁(yè)面中禁用各種類(lèi)型的 JSP 腳本元素 — scriptlet、表達(dá)式和聲明。類(lèi)似地,PermittedTaglibsTLV 驗(yàn)證器可以用來(lái)限制可能由應(yīng)用程序的 JSP 頁(yè)面訪問(wèn)的定制標(biāo)記庫(kù)集(包括 JSTL 標(biāo)記庫(kù))。
  
  盡管 JSTL 最終將會(huì)成為 J2EE 平臺(tái)的必需組件,但目前只有少數(shù)應(yīng)用程序服務(wù)器包括它。JSTL 1.0 的參考實(shí)現(xiàn)可作為 Apache 軟件基金會(huì)(Apache Software Foundation)的 Jakarta Taglibs 項(xiàng)目(請(qǐng)參閱參考資料)的一部分而獲得。可以將該參考實(shí)現(xiàn)中的定制標(biāo)記庫(kù)合并到任何支持 JSP 1.2 和 Servlet 2.3 規(guī)范的服務(wù)器,以添加對(duì) JSTL 的支持。
  
  表達(dá)式語(yǔ)言
  在 JSP 1.2 中,可以使用靜態(tài)字符串或表達(dá)式(假如答應(yīng)的話)指定 JSP 操作的屬性。例如,在清單 2 中,對(duì) 操作的 name 和 PRoperty 屬性指定了靜態(tài)值,而用表達(dá)式指定了其 value 屬性。這個(gè)操作的效果是將請(qǐng)求參數(shù)的當(dāng)前值賦予命名的 bean 特性。以這種形式使用的表達(dá)式被稱為請(qǐng)求時(shí)屬性值(request-time attribute value),這是構(gòu)建到 JSP 規(guī)范中的用于動(dòng)態(tài)指定屬性值的唯一機(jī)制。
  
  清單 2. 合并請(qǐng)求時(shí)屬性值的 JSP 操作
    value='<%= request.getParameter("timezone") %>'/>
  
  
  
  
  因?yàn)檎?qǐng)求時(shí)屬性值是用表達(dá)式指定的,所以它們往往有和其它腳本元素一樣的軟件維護(hù)問(wèn)題。因此,JSTL 定制標(biāo)記支持另一種用于指定動(dòng)態(tài)屬性值的機(jī)制。可以用簡(jiǎn)化的表達(dá)式語(yǔ)言(EL)而不使用完整的 JSP 表達(dá)式來(lái)指定 JSTL 操作的屬性值。EL 提供了一些標(biāo)識(shí)符、存取器和運(yùn)算符,用來(lái)檢索和操作駐留在 JSP 容器中的數(shù)據(jù)。EL 在某種程度上以 EcmaScript(請(qǐng)參閱參考資料)和 XML 路徑語(yǔ)言(XML Path Language,XPath)為基礎(chǔ),因此頁(yè)面設(shè)計(jì)人員和程序員都應(yīng)該熟悉它的語(yǔ)法。EL 擅長(zhǎng)尋找對(duì)象及其特性,然后對(duì)它們執(zhí)行簡(jiǎn)單操作;它不是編程語(yǔ)言,甚至不是腳本編制語(yǔ)言。但是,與 JSTL 標(biāo)記一起使用時(shí),它就能使用簡(jiǎn)單而又方便的符號(hào)來(lái)表示復(fù)雜的行為。EL 表達(dá)式的格式是這樣的:用美元符號(hào)($)定界,內(nèi)容包括在花括號(hào)({})中,如清單 3 所示。
  
  清單 3. 說(shuō)明 EL 表達(dá)式定界符的 JSTL 操作
  
  
  
  
  
  此外,您可以將多個(gè)表達(dá)式與靜態(tài)文本組合在一起以通過(guò)字符串并置來(lái)構(gòu)造動(dòng)態(tài)屬性值,如清單 4 所示。單獨(dú)的表達(dá)式由標(biāo)識(shí)符、存取器、文字和運(yùn)算符組成。標(biāo)識(shí)符用來(lái)引用存儲(chǔ)在數(shù)據(jù)中心中的數(shù)據(jù)對(duì)象。EL 有 11 個(gè)保留標(biāo)識(shí)符,對(duì)應(yīng)于 11 個(gè) EL 隱式對(duì)象。假定所有其它標(biāo)識(shí)符都引用限制了作用域的變量。存取器用來(lái)檢索對(duì)象的特性或集合的元素。文字表示固定的值 — 數(shù)字、字符、字符串、布爾型或空值。運(yùn)算符答應(yīng)對(duì)數(shù)據(jù)和文字進(jìn)行組合以及比較。
  
  清單 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í)符看作引用限制了作用域的變量。
  
  從更技術(shù)的方面來(lái)說(shuō),沒(méi)有映射到隱式對(duì)象的標(biāo)識(shí)符是用 PageContext 實(shí)例的 findAttribute() 方法求值的,該實(shí)例表示對(duì)頁(yè)面的處理,在該頁(yè)面上,當(dāng)前正在處理用于請(qǐng)求的表達(dá)式。標(biāo)識(shí)符的名稱作為參數(shù)傳遞給這個(gè)方法,然后該方法依次在四個(gè)作用域中搜索具有相同名稱的屬性。并將所找到的第一個(gè)匹配項(xiàng)作為 findAttribute() 方法的值返回。假如未在這四個(gè)作用域中找到這樣的屬性,則返回 null。
  
  最終,限制了作用域的變量是四個(gè) JSP 作用域的屬性,這些屬性具有可以用作 EL 標(biāo)識(shí)符的名稱。
  
  只要對(duì)限制了作用域的變量賦予由字母數(shù)字組成的名稱,就可以通過(guò) JSP 中提供的用于設(shè)置屬性的
  
  任何機(jī)制來(lái)創(chuàng)建它們。這包括內(nèi)置的 操作,以及由 S

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 神木县| 奈曼旗| 启东市| 修水县| 措美县| 揭东县| 贵州省| 托里县| 洛宁县| 三穗县| 太保市| 宿迁市| 黄浦区| 博湖县| 云林县| 濮阳市| 西宁市| 万源市| 黎川县| 崇文区| 惠来县| 永善县| 西藏| 舞钢市| 广宁县| 离岛区| 松阳县| 广东省| 镇雄县| 韶山市| 贵港市| 九寨沟县| 江永县| 栖霞市| 延长县| 久治县| 论坛| 海盐县| 上思县| 南雄市| 南昌市|