JSTL介紹—JSP編程新組件 允許用標(biāo)簽編程
JSTL介紹中是允許JSP程序員使用標(biāo)簽進(jìn)行編程而不是Java代碼。為了說(shuō)明為什么這個(gè)是可取的,給出一個(gè)快速簡(jiǎn)單的小例子。我們就舉個(gè)非常簡(jiǎn)單的例子從1數(shù)到10。我們用常規(guī)的基于scriptlet JSP網(wǎng)頁(yè)和JSTL兩種方式來(lái)制作這個(gè)網(wǎng)頁(yè)。當(dāng)這個(gè)數(shù)到10的例子是使用scriptlet JSP編制的,JSP網(wǎng)頁(yè)會(huì)有如下顯示:
|
正如你從以上例子中所看到的,使用scriptlet代碼產(chǎn)生的網(wǎng)頁(yè)源代碼包括了HTML標(biāo)簽和Java語(yǔ)句的混合。有很多原因說(shuō)明為什么這種混合式編程風(fēng)格不是***的。
混合scriptlet和基于標(biāo)簽的代碼不是***選擇的主要原因是可讀性。這種可讀性是針對(duì)人和計(jì)算機(jī)的。JSTL允許編程者看一個(gè)由整個(gè)HTML和HTML-like標(biāo)簽組成的程序。
JSP scriptlet代碼的可讀性不僅只適用于人類。Scriptlet和HTML代碼的混合也很難被計(jì)算機(jī)讀取。尤其是HTML制作工具例如某個(gè)Dreamweaver和Microsoft FrontPage。目前,大多數(shù)HTML制作工具將JSP scriptlet代碼作為不可編輯的塊區(qū)而分離開(kāi)。HTML制作工具通常不直接修改JSP scriptlet 代碼。
以下代碼顯示如何使用JSTL編寫(xiě)從1數(shù)到10的這個(gè)例子。正如你所看到的,這個(gè)代碼列表更連貫,因?yàn)橹皇褂昧藰?biāo)簽。是HTML和JSTL標(biāo)簽混合在一起產(chǎn)生的例子。
|
當(dāng)你檢查以前的代碼的時(shí)候,你可以看到JSP網(wǎng)頁(yè)整個(gè)是由標(biāo)簽組成的。上述代碼使用了HTML標(biāo)簽如< head> 和< br>。標(biāo)簽的使用不僅限于HTML標(biāo)簽。這個(gè)代碼也使用了JSTL標(biāo)簽例如< c:forEach> 和 < c:out>。在本文中向你介紹一些JSTL的基礎(chǔ)知識(shí)。
安裝JSTL
為了使用JSTL,你必須安裝JSP 1.2(或更高的版本)的容器。其中最常用的JSP容器是Apache Tomcat Web server。你可以從這里http://jakarta.apache.org/tomcat/獲取一個(gè)Tomcat的副本。單獨(dú)使用Tomcat可以讓你使用常規(guī)的JSP scriptlet代碼。為了使用JSTL, 你必須安裝JSTL到Tomcat。JSTL可以從和Tomcat一樣的來(lái)源獲得。JSTL主要的URL是http://java.sun.com/products/jsp/jstl/。為了使用JSTL,你必須解壓分配文件并把它們安裝到Tomacat中的正確位置。
為了同時(shí)使用Tomcat,正確安裝JSTL遵循以下三個(gè)步驟:
復(fù)制JSTL JAR文件到Tomcat的lib目錄。
如果你使用Windows,你的lib目錄的可能位置是C:\Program Files\Apache Tomcat 4.0\webapps\ROOT\WEB-INF\lib。JSTL發(fā)布時(shí)就有很多JAR文件包括其中。你需要復(fù)制每一個(gè)JAR文件到Tomcat JAR目錄中。
復(fù)制JSTL TLD文件到Tomcat的web-inf目錄web-inf目錄的位置是C:\Program Files\Apache Tomcat 4.0\webapps\ROOT\WEB-INF。如果你研究JSTL分配文件,你應(yīng)該注意到8個(gè)擴(kuò)展名是TLD的文件。這8個(gè)文件要復(fù)制到你的web-inf目錄中。
修改web.xml文件來(lái)包括TLD文件***,你必須修改你的web.xml文件,并為這8個(gè)你添加的標(biāo)簽庫(kù)添加入徑。這個(gè)由在主< web-app>指令中添加< taglib>指令。
|
完成以上三個(gè)步驟,你已經(jīng)準(zhǔn)備好測(cè)試你的JSTL安裝。這個(gè)可以通過(guò)使用JSTL創(chuàng)建一個(gè)JSP網(wǎng)頁(yè)來(lái)完成。最簡(jiǎn)單的例子就是以上所示的"count to ten"例子。你應(yīng)該把你的JSP文件放到Webroot目錄中(C:\Program Files\Apache Tomcat 4.0\webapps\ROOT)。一旦Tomcat服務(wù)器啟動(dòng),你可以瀏覽http://127.0.0.1:8080/count.jsp來(lái)查看你的網(wǎng)頁(yè)。
如果你沒(méi)有正確安裝JSTL,可能也沒(méi)有錯(cuò)誤信息提示。如果JSTL不能翻譯你的標(biāo)簽,它們直接通過(guò)網(wǎng)頁(yè)瀏覽器。網(wǎng)頁(yè)瀏覽器將翻譯這些標(biāo)簽作為未知的HTML標(biāo)簽。大多數(shù)瀏覽器都會(huì)忽略未知的HTML標(biāo)簽。
JSTL標(biāo)簽庫(kù)
JSTL也常常作為一個(gè)單獨(dú)的標(biāo)簽庫(kù)。實(shí)際上,JSTL有4個(gè)標(biāo)簽庫(kù)。這些標(biāo)簽庫(kù)總結(jié)如下:
Core Tag Library—包括的標(biāo)簽是Web應(yīng)用程序必不可少的。core tag庫(kù)的例子包括循環(huán),算式評(píng)估和基本的輸入和輸出。
Formatting/Internationalization Tag Library—包括的標(biāo)簽是用于解析代碼的。其中一些標(biāo)簽是解析代碼的,例如日期,不同的基于當(dāng)前的區(qū)域。
Database Tag Library—包括的標(biāo)簽是用于訪問(wèn)SQL數(shù)據(jù)庫(kù)的。這些標(biāo)簽通常只用于創(chuàng)建雛形程序。這是因?yàn)榇蠖鄶?shù)程序不會(huì)從JSP網(wǎng)頁(yè)上直接處理數(shù)據(jù)庫(kù)訪問(wèn)。數(shù)據(jù)庫(kù)訪問(wèn)應(yīng)該置于EJBs中通過(guò)JSP網(wǎng)頁(yè)進(jìn)行訪問(wèn)。
XML Tag Library—包括的標(biāo)簽是可以用于訪問(wèn)XML元素。因?yàn)閄ML是用在很多的Web應(yīng)用程序中,XML處理是JSTL一個(gè)重要的功能。
在本文中,我們只需要大概的看幾個(gè)核心標(biāo)簽(core tags)。我們將舉一個(gè)簡(jiǎn)單的例子來(lái)展示用戶進(jìn)入一個(gè)表格時(shí)如何處理數(shù)據(jù)。在我們進(jìn)行這個(gè)程序之前,我們首先要看一看JSTL handles expressions。在JSTL中的表達(dá)式處理是通過(guò)使用EL表達(dá)式語(yǔ)言來(lái)完成的,像在JSP2.0中一樣。在下一節(jié)中,我們將檢查EL表達(dá)式語(yǔ)言。
EL表達(dá)式語(yǔ)言
JSP2.0其中一個(gè)主要的組件式叫做EL的新的表達(dá)式語(yǔ)言。EL廣泛應(yīng)用在JSTL中。但是,重點(diǎn)要記住的是EL是JSP的一個(gè)特征而不是JSTL的。與JSP2.0一起使用的JSP scriptlet代碼包括EL表達(dá)式。以下的示范代碼行是在JSP scriptlet代碼中使用了EL。
< p> |
正如你從以上代碼中所看到的,添加了"total" 和"shipping"值并作為HTML顯示而產(chǎn)生的。這些表達(dá)式也可以再JSTL標(biāo)簽中使用。JSTL1.0其中的一個(gè)重要需求就是JSTL要和JSP1.2一起使用。因?yàn)镴SP1.2不支持EL, 所以又必要提供一些而外的JSTL標(biāo)簽以便使用EL。例如,如果你想要使用JSTL來(lái)顯示以上的表達(dá)式,你可以使用以下的代碼:
< p> |
JSTL的一個(gè)需求就是不需要JSP2.0來(lái)運(yùn)行。通過(guò)提供一個(gè)可以顯示EL表達(dá)式的標(biāo)簽,這個(gè)需求才能被滿足。
JSTL示例
現(xiàn)在我們就來(lái)研究一個(gè)使用JSTL的簡(jiǎn)單例子。在這個(gè)例子中,我們將研究許多Web應(yīng)用程序都能做到的一個(gè)常見(jiàn)的程序。我們將看到如何POST一個(gè)表格并從其中運(yùn)行結(jié)果。能夠這樣做的一個(gè)簡(jiǎn)單的程序,見(jiàn)如下顯示:
|
這個(gè)簡(jiǎn)單的Web網(wǎng)頁(yè)將顯示一個(gè)表格并詢問(wèn)用戶猜一猜哪種計(jì)算機(jī)語(yǔ)言是程序可以考慮的。當(dāng)然,計(jì)算機(jī)會(huì)考慮"Java."。本頁(yè)首先要檢查看是否一個(gè)POST被完成了。這使得表格和處理表格的代碼放在一個(gè)單一的頁(yè)面中。這個(gè)是通過(guò)以下JSTL if 語(yǔ)句完成的。
< c:if test="${pageContext.request.method=='POST'}"> |
這里你看到< c:if>標(biāo)簽使用了一個(gè)EL表達(dá)式來(lái)評(píng)估要求的方式是否是一個(gè)POST。如果數(shù)據(jù)被粘貼到網(wǎng)頁(yè),用戶輸入他們的猜測(cè)的值被儲(chǔ)存在一個(gè)名字叫"guess"的參數(shù)中。這是因?yàn)?guess"被指定為表格輸入條目的名字了。我們現(xiàn)在必須檢查看一看那這個(gè)參數(shù)是否等于"Java"。這個(gè)通過(guò)以下的< c:if>標(biāo)簽來(lái)完成。
< c:if test="${param.guess=='Java'}"> |
如你所見(jiàn),如果語(yǔ)句評(píng)估正確,< c:if>標(biāo)簽的主體就被執(zhí)行。在本文中,我們開(kāi)始研究有關(guān)怎樣安裝JSTL和它是如何工作的基礎(chǔ)知識(shí)。
JSTL的核心標(biāo)簽也包括了循環(huán),反復(fù)和變量處理的標(biāo)簽。通過(guò)使用這些標(biāo)簽,你可以重復(fù)這些集合,訪問(wèn)用戶對(duì)話數(shù)據(jù)和執(zhí)行所有Web應(yīng)用程序執(zhí)行的其他的核心任務(wù)。除了core tag library,XML, database和formatting tag 庫(kù)也提供了更先進(jìn)的用途。
總結(jié)
本文向你展示了在JSTL和JSP scriptlet編程之間的一些不同之處。如你所看到的,JSTL承認(rèn)一個(gè)更一致的編程環(huán)境,通過(guò)承認(rèn)HTML和程序代碼一起作為標(biāo)簽來(lái)表達(dá)。JSTL和標(biāo)簽庫(kù)代表了網(wǎng)頁(yè)編程的一個(gè)新的方法。
JSTL沒(méi)有提供一個(gè)程序員需要?jiǎng)?chuàng)建一個(gè)完整功能網(wǎng)頁(yè)應(yīng)用程序的所有東西。此外,一些可以在JSTL中編程的程序往往***是沒(méi)有列入JSTL中。關(guān)于這個(gè)的一個(gè)***的例子就是數(shù)據(jù)庫(kù)JSTL標(biāo)簽。除了每個(gè)小的Web應(yīng)用程序外,它通常被認(rèn)為是不好的編程習(xí)慣就是嵌入實(shí)際的數(shù)據(jù)庫(kù)命令到一個(gè)JSP網(wǎng)頁(yè)中。這樣的程序代碼的恰當(dāng)位置是在你的Web應(yīng)用程序常使用的Java beans和EJBs中。對(duì)于這種慣例,你可以考慮創(chuàng)建自己的標(biāo)簽庫(kù)。這樣,你的JSP網(wǎng)頁(yè)可以使用JSTL來(lái)執(zhí)行基本的并非只是你的業(yè)務(wù)的編程程序。你應(yīng)該完成你自己的標(biāo)簽庫(kù)來(lái)執(zhí)行組件,這些只對(duì)你的業(yè)務(wù)是***的,也是在你的Web應(yīng)用程序中用到的。
JSTL讓你創(chuàng)建一個(gè)非常一致的編程JSP技術(shù)為基礎(chǔ)的應(yīng)用程序。這個(gè)不是通過(guò)JSTL來(lái)完成,而是通過(guò)JSTL,你自己的自定義標(biāo)簽庫(kù)和一個(gè)基本的數(shù)據(jù)庫(kù)組合來(lái)完成的。了解每一個(gè)這些組件可以讓你部署一個(gè)更有效的Web應(yīng)用程序。
您正在閱讀的是《JSTL介紹—JSP編程新組件 允許用標(biāo)簽編程》
【編輯推薦】