JSP 最佳實踐: 使用JSTL來更新JSP頁面 ------標準化JSTL標記爲您的Web頁面帶來更多的功能

 

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 標記與我們在前一部分中介紹的 includejsp:include 指令極其類似(見 參考資料)。 與include指令一樣, c:import 可以幫助您讀取(populate)您Web站點或Web應用程序的頁面,但其功能性擴展超出了核心JSP標記的範疇。

JSP最佳實踐這一部分,我們將使用 c:import 標記來了解如何將Web頁面從JSP轉變成JSTL。但是,在開始使用新標記之前,我們需要將JSTL裝載到Web容器中。

JSTL 設置

雖然JSTL計劃捆綁到下一波Web容器中,但您目前必須自己進行設置。按以下步驟操作以將JSTL裝載到Web容器中:

  1. apache.org下載 jakarta-taglibs-standard-current.tar.gz
  2. 解壓縮下載的文件。
  3. jakarta-taglibs/standard-1.0.3/tld/c.tld 拷貝到 WEB/INF/tlds 目錄。
  4. jakarta-taglibs/standard-1.0.3/lib 中的所有JAR文件拷貝到 WEB-INF/lib 目錄。
  5. 將以下顯示的條目添加到 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>
    


  6. 重啓Web容器。

這是JSTL設置的速成版本,它可以滿足大多數情況。更詳細信息請參閱 參考資料部分。





回頁首


聯合 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轉換技術,到時候見!



參考資料



關於作者

Photo of Brett McLaughlin

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聯繫。

發佈了3 篇原創文章 · 獲贊 1 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章