JSTL改進JSP來簡化網頁的實現過程(1)

來源:互聯網
上載者:User
js|過程|網頁 概述

Java Server Pages (JSP) 標準標記庫 (JSTL)的版本的發布對於JSP/servlet開發人員來說是一個重大的進展。有了一個表達語言(EL)和一組四種強大的、易於學習的標準標記庫,JSTL極有可能不久後成為實現動態、基於Java的網站的主要方法。

1996年對JSP servlet的介紹使得Java成為動態網頁開發的合理的選擇。隨後出現的Java伺服器頁(JSP)是走向快速的、可維護的Java網頁實現過程的合理進化的一步,緊接著就出現了JSP標記的支援。但是2002中期的JSTL(JSP標準標記庫)的發布才是進一步加速和簡化開發過程最大的一步。

在本文中,我解釋了JSTL的功能,也涵蓋了你啟動JSTL所需的每件事情。假設你有了對Java、JSP、XML和安裝一個Web容器的基本理解。如果你對這些主題感到陌生,你可以在Resources(http://www.javaworld.com/javaworld/jw-02-2003/jw-0228-jstl.html?#resources#resources)上瀏覽一下背景參考。在下面的闡述中,假定你有XML和SQL的知識。

安裝JSTL支援

對於我們的JSTL安裝例子來說,我們使用Tomcat 4.1(儘管任意支援Servlet 2.3和JSP1.2說明的servlet容器都應該能工作)。首先,下載Tomcat 4.1並且按指示進行安裝(注意:JSTL需要一個JSP1.2 Web容器)。

用tomcat4 start程式啟動Tomcat,並且運行index.html頁來確保Tomcat是啟用的、且運行良好。

接下來,安裝JSTL支援,你可以從Jakarta網站下載JSTL支援,(http://www.javaworld.com/javaworld/jw-02-2003/jw-0228-jstl.html?#resources#resources)並按照下面步驟:

1.從Jakarta網站下載JSTL檢索、解壓/脫檔該檔案。(http://www.javaworld.com/javaworld/jw-02-2003/jw-0228-jstl.html?#resources)

2.複製你已經解壓為common/lib的jar檔案到你的Tomcat安裝路徑中(儘管我們的項目不需要所有的jar檔案);這使得JSTL檔案適用於你的任意Web應用。

3.對於任意你想使用JSTL的Web應用來說,複製.tld檔案到你的Web應用的WEB-INF目錄下。

4.對於你的JSTL的Web應用,編輯web.xml並添加下列輸入:

<taglib>  <taglib-uri>http://java.sun.com/jstl/fmt</taglib-uri>  <taglib-location>/WEB-INF/fmt.tld</taglib-location>  </taglib>  <taglib>   <taglib-uri>http://java.sun.com/jstl/core</taglib-uri>   <taglib-location>/WEB-INF/c.tld</taglib-location>  </taglib>  <taglib>   <taglib-uri>http://java.sun.com/jstl/sql</taglib-uri>   <taglib-location>/WEB-INF/sql.tld</taglib-location>  </taglib>  <taglib>   <taglib-uri>http://java.sun.com/jstl/x</taglib-uri>   <taglib-location>/WEB-INF/x.tld</taglib-location>  </taglib>


這些輸入讓你的Web應用可使用JSTL標記庫的表達語言(EL)版本。這些輸入的位置有關係!如果你不肯定將他們輸入到何處,關於web.xml選項和順序的權威性指導在文件類型定義(DTD)中定義過:http://java.sun.com/j2ee/dtds/web-app_2_2.dtd。

5.當你建立了一個使用JSTL的JSP頁時,將他輸入到你的Web應用的主目錄下,就像其它JSP和HTML頁一樣。你可以為該頁任意取名,但是它必須有一個.jsp的副檔名。

基礎原理

首先,所有的JSTL也是JSP頁,JSTL只是JSP功能的一個超集。

同樣,所有的JSTL標記是有效XML。這意味著:如果你將JSTL標記之外的內容當作臨時文本(通常是HTML)時,剩下的JSTL標記必須當作合法的XML來解釋。這裡有一些隱含的規則,它要求大部分XML文法都是正確的。

JSTL提供一組四個標準標記庫(core核心、internationalization/format國際標準化/格式、XML和SQL)並支援EL。JSTL和EL的基本設計目的是簡化網頁開發和實現。

在本文中,我們遵循JSTL說明書的命名規則,並且把JSTL標記當作動作。一個JSTL標記對應於某個動作;調用動作明確的提醒我們:他們添加動態行為到一個另外的靜態頁上。

JSTL標記庫有兩個版本:一個用你以前使用的方法將JSP運算式插入,如<%= . . . %>,另一個使用一個JSTL EL.我會在後面進一步討論在JSTL中的EL支援。

EL支援

要理解當前JSTL對EL支援的狀態,讓我們檢查相關的說明書是怎樣處理的。Java說明書請求(JSR)專家群組成員決定:由於某種原因,EL規範說明應該是JSP說明書的一部份,而不是JSTL說明書的一部分。EL完整的說明書成為JSP2.0的一部分。因為JSTL1.0在JSP1.3之前已經完成,JSTL作者不得不對用於JSTL1.0的EL支援實現做一個合理的猜測(結果可能是相當好的)。一個JSTL維護版本將與JSP1.3說明書保持一致,並為了使EL適合JSP1.3說明書,JSTL維護版本做了一些修正。

本文描述的EL概要可能在即將發布的JSTL版本中有一點改動,但是任何改動都是微小的。

EL用於簡單的文法定義了一套功能強大的語言,它很容易學習。它融合著JavaScript語言和Perl語言較好的部分的一些風格。EL運算式,整合了來自四種標準標記庫的JSTL標記,提供了一個巨大的、靈活的屬性集。

所有的EL運算式都被${}括起來。JSTL中的運算式總是JSTL標記中的屬性值的一部分。運算式可以是屬性的一部分或者合并和嵌入到一個字串直接量中。JSTL屬性也可以包含簡單的字串直接量。在接下來的JSTL中,我們在一個來自核心庫的c:out動作中說明每種情況,這個核心庫將它的value屬性值送到JSP輸出上:

<c:out value="${anExpression}"/><c:out value="literalText${anExpression}${anotherExpression}"/><c:out value="literalText"/>


EL也定義了一套規則用於強製表達式中的值轉換為上下文相對應的類型。我們在這裡不詳細討論這些規則;然而,它的方法與用Perl語言定義的方式非常相似(就像Perl語言中的做法一樣,該方法理所當然的運行良好,但是,偶爾,也會出現可能不是你十分想要的那種結果,但你可以接受)。

EL為訪問對象屬性、集合元素、一組隱藏對象以及使用相關的、邏輯的和算術的操作符提供了支援。對於索引的屬性來說,包括數組和java.util.List類在內,元素可用下列文法訪問:

${alist[4]}${aList[someVariable]}


JavaBean屬性和java.util.Map元素(它代表一系列名字/值對)都可以使用下列方法的一個訪問得到。在以下的開頭兩個運算式裡,我們可以訪問到一個用JavaBean語言命名為aProperty的屬性或者用關鍵字aProperty訪問到一個Map實體。在第三個運算式中(注意:我已經省略了引號),我們用儲存在變數aVariableContainingPropertyName中的一個名字訪問了在anObject之內的一個元素:

${anObject.aProperty}${anObject["aPropertyName"]}${anObject[aVariableContainingPropertyName]}


在EL中定義了許多隱藏變數:

●pageContext:用於該網頁的pageContext對象

●pageScope, requestScope, sessionScope, 和 applicationScope:這些是映射這些範圍的每一個變數到值上的Map集。

●param 和 paramValues:用頁訪問傳遞的參數,與在JSP中一樣

●header 和 headerValues:用頁請求傳遞的頭,與在JSP中一樣

●cookie:Map映射cookie程式到特定的cookie對象上

EL定義了全套與你在Java中非常熟悉的那些完全對應的操作符。演算法操作符包括+、 -、 *、 / (或 div)、 和% (或 mod)。相關的操作符包括==、!=、<、>、<=、>=,它分別對應於eq、ne、lt、gt、le、和ge。我不想詳細闡述這些操作符,因為他們都能自我說明。


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.