Brett McLaughlin ([email protected]), 作者, O'Reilly和同事
2003 年 7 月 31 日
JSP 標準標記庫(Standard Tag Library,JSTL)是一組以標準化格式實現許多通用的Web站點功能的定製標記。在 JSP 最佳實踐這一部分,Brett McLaughlin將向您介紹JSTL,闡述如何轉變JSP頁面來使用高功能性的標記。
JSP技術的優勢之一在於其定製標記庫工具。除了核心JSP標記,如 jsp:include
之外,定製標記庫工具使您能夠創建唯一的標記來描述以站點或應用程序爲導向的操作。一旦您創建了定製標記庫(簡稱 taglib),當您擴展項目或轉向另一個項目時您可以重複使用這些標記。您還可以將taglib傳遞給其它開發人員,從而他們可以在自己的網站上使用,或者在您Web應用程序的其它部分使用。在這一系列的下一部分,我將向您展示如何創建自己的定製標記庫,但現在我們將重點關注JSP標準標記庫(JSTL)。
JSTL實際上是一組標準化用於JSP 1.2的定製標記庫。許多JSTL標記都與核心JSP標記類似,但它們可以提供更多的功能。例如, c:import
標記與我們在前一部分中介紹的 include
和 jsp:include
指令極其類似(見 參考資料)。 與include指令一樣, c:import
可以幫助您讀取(populate)您Web站點或Web應用程序的頁面,但其功能性擴展超出了核心JSP標記的範疇。
在 JSP最佳實踐這一部分,我們將使用 c:import
標記來了解如何將Web頁面從JSP轉變成JSTL。但是,在開始使用新標記之前,我們需要將JSTL裝載到Web容器中。
雖然JSTL計劃捆綁到下一波Web容器中,但您目前必須自己進行設置。按以下步驟操作以將JSTL裝載到Web容器中:
- 從 apache.org下載
jakarta-taglibs-standard-current.tar.gz
。 - 解壓縮下載的文件。
- 將
jakarta-taglibs/standard-1.0.3/tld/c.tld
拷貝到WEB/INF/tlds
目錄。 - 將
jakarta-taglibs/standard-1.0.3/lib
中的所有JAR文件拷貝到WEB-INF/lib
目錄。 - 將以下顯示的條目添加到
WEB-INF/web.xml
部署描述符中。<taglib> <taglib-uri>http://java.sun.com/jstl/core</taglib-uri> <taglib-location>/WEB-INF/tlds/c.tld</taglib-location> </taglib>
- 重啓Web容器。
這是JSTL設置的速成版本,它可以滿足大多數情況。更詳細信息請參閱 參考資料部分。
|
如果您希望在JSP頁面上使用任何JSTL標記,您首先必須在該頁面上聲明標記庫前綴和URL。我們正在使用核心JSTL庫,因此使用的標準前綴是 c
(代表 核心)。表1顯示增加了 taglib
指令的Web站點索引文件:
表1:索引文件的taglib指令
<%@ page language="java" contentType="text/html" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <html> <head> <title>newInstance.com</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link href="/styles/default.css" rel="stylesheet" type="text/css" /> </head> <body> <jsp:include page="header.jsp" flush="true"> <jsp:param name="pageTitle" value="newInstance.com"/> <jsp:param name="pageSlogan" value=" " /> </jsp:include> <%@ include file="/navigation.jsp" %> <jsp:include page="bookshelf.jsp" flush="true" /> <jsp:include page="/mt-blogs/index.jsp" flush="true" /> <%@ include file="/footer.jsp" %> </body> </html> |
在向JSP頁面添加了JSTL taglib之後,您可以使用核心庫中的任何標記,只需把標記的前綴改爲 c
。爲了瞭解這一流程,我們將嘗試把頁面從 jsp:include
標記轉換成 c:import
標記。 表2顯示了本系列第二部分介紹的 jsp:include
實例(見 參考資料)轉爲使用新 c:import
標記。
表2:轉爲JSTL
<%@ page language="java" contentType="text/html" %> <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %> <html> <head> <title>newInstance.com</title> <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> <link href="/styles/default.css" rel="stylesheet" type="text/css" /> </head> <body> <jsp:include page="header.jsp" flush="true"> <jsp:param name="pageTitle" value="newInstance.com"/> <jsp:param name="pageSlogan" value=" " /> </jsp:include> <%@ include file="/navigation.jsp" %> <c:import url="bookshelf.jsp" /> <c:import url="/mt-blogs/index.jsp" /> <%@ include file="/footer.jsp" %> </body> </html> |
這一段程序與前面一段JSP程序之間唯一的區別是我們在c中使用了 url
屬性,而不是在 jsp:include
中使用 page
屬性。非常簡單,是不是?做一個娛樂性練習,嘗試自己轉換一個頁面,只需運行我們在“使用jsp:include管理動態內容”(本系列第二部分,參閱 參考資料)中使用的JSP程序代碼並將其轉換成JSTL,如表2所示。
如果您進行了仔細研究,您可能注意到我避免改變表2中的header inclusion程序代碼。header程序代碼包含參數,它增加了在此討論的複雜性。在 JSP 最佳實踐的下一部分,您將瞭解如何使用 c:import
來傳遞參數。我還將向您介紹 c:import
標記的一些特性,它可以提供比簡單的 jsp:include
標記更多的功能。那時,您可以實踐此處瞭解到的簡單的JSTL轉換技術,到時候見!
- 您可以參閱本文在 developerWorks 全球站點上的 英文原文.
- 從JSP技術開始? 參閱Brett McLaughlin撰寫的 JSP最佳實踐 第一部分 。您可以參閱
include.jsp
表,在本系統第二部分“ JSP 最佳實踐:用 jsp:include 控制動態內容"我們將它轉換成JSTL。 - 您可能還希望考慮使用JSP-標準IDE。您可以選擇:
- Noel Bergman的“ JSP 標記庫:着意設計的更好的可用性”( developerWorks, December 2001)介紹定製標記庫工具,它可以用於創建JSTL。
- Mark Kolb的“ JSTL 入門:表達式語言” ( developerWorks, February-May 2003)全面介紹JSP標準標記庫。
- JSP技術的指導性介紹,參閱Noel Bergman的“ JavaServer頁面技術簡 介”指南( developerWorks, August 2001)。
- For the nitty-gritty details of JSP technology, your best bet is to read the JSP specification.
- Hans Bergsten的 JavaServer 頁面 (O'Reilly & Associates, 2002)是瞭解JSP技術必不可少的參考資料。
- 參閱 developerWorksJava技術教程 瞭解developerWorks提供的免費Java技術教程。
- 在 developerWorksJava 技術專區 可以找到數百篇關於Java技術的參考資料(包括更多關於JSP技術的文章)
Brett McLaughlin自從 Logo 時代(還記得小三角形嗎?)開始就一直從事計算機方面的工作。目前,他專門從事用 Java 語言和與 Java 相關的技術構建應用程序基礎結構。最近幾年,他在 Nextel Communications 和 Allegiance Telecom, Inc. 從事這些基礎結構的實現。Brett 是 Java Apache Turbine 項目的共同創始人之一,該項目通過使用 Java servlet 爲 Web 應用程序開發構建可重用的組件體系結構。他還是 EJBoss 項目(一種開放源碼 EJB 應用程序服務器)和 Cocoon(一種開放源碼 XML Web 發佈引擎)的志願開發人員之一。您可以通過 [email protected]與 Brett聯繫。 |