程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> JSP編程 >> 關於JSP >> JSP標准標簽庫介紹

JSP標准標簽庫介紹

編輯:關於JSP

 

簡介

JSP標准模板庫(JSTL)是SUN公司發布的一個針對JSP開發的新組件。JSTL允許你使用標簽(tags)來進行JSP頁面開發,而不是使用多數JSP程序員已經習慣了的scriptlet代碼方式開發。JSTL幾乎能夠做到傳統JSP scriptlet代碼能做的任何事情。你可能會疑惑,為什麼我們需要另一種這樣的HTML生成語言呢?

 

STL允許JSP程序員使用tags而不是JAVA代碼來編程。為了展示為什麼這個是更優越的,下面將給出示例。我們會檢查一個非常簡單的從1數到10的JSP頁面。我們將通過兩種方法來檢查,一種是基於JSP的scriptlet,一種是JSTL。當這個計數器頁面的例子是用JSP scriptlet來編寫時,JSP頁面如下所示:

 

<html>

  <head>

    <title>Count to 10 in JSP scriptlet</title>

  </head>

  <body>

<%

  for(int i=1;i<=10;i++)

{%>

<%=i%><br/>

<%

}

%>

  </body>

</html>

 

正如你在上例中看到的看到的那樣,使用scriptlet代碼產生的頁面源代碼會包含混合的HTML標簽和JAVA語句。這種混合型的編程方式不是最佳的方式,其主要原因有以下幾點。

 

主要的原因是它的可讀性。這個可讀性主要依賴於人類和計算機。JSTL可以允許程序員查看一個只包含完整HTML和類似HTML的標簽的頁面。

 

SP scriptlet代碼的可讀性不適合人類。這種混合的scriptlet和HTML代碼對於計算機來說也很難讀。尤其是針對那些HTML官方工具如Dreamweaver和Microsoft FrontPage,所表現出來的不直觀性更突出。目前,大多數HTML官方工具會以不可編輯塊(non-editable blocks)的形式來隔離JSP scriptlet代碼。這種HTML官方工具通常是不能直接修改JSP scriptlet代碼的。

 

下面這段代碼展示這個計數器范例如何使用JSTL方式來編寫。正如你所看到的,這個代碼列表有不變性,僅僅一個標簽被使用。HTML和JSTL標簽混合起來產生了這個程序。

 

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

<html>

  <head>

    <title>Count to 10 Example (using JSTL)</title>

  </head>

 

  <body>

    <c:forEach var="i" begin="1" end="10" step="1">

      <c:out value="${i}" />

 

      <br />

    </c:forEach>

  </body>

</html>

 

當你檢查上面這個例子的代碼時,你會看到,JSP頁面只包含標簽。上面的代碼使用諸如<head>和<br>這樣的HTML標簽。這種標簽用法不限制於HTML標簽。這段代碼也可以使用諸如<c:forEach>和<c:out>這樣的JSTL標簽。在本文中,將會介紹一些JSTL的基礎。

 

安裝JSTL

要使用JSTL,你必須安裝有一個JSP1.2(或者更高版本)的容器。最普通的JSP容器是Apache Tomcat。你能夠從http://jakarta.apache.org/tomcat/這裡下載到。獨立的Tomcat允許你使用常規的JSP scriptlet代碼。要使用JSTL,你必須在Tomcat中安裝JSTL。JSTL的主要URL是http://java.sun.com/products/jsp/jstl/。要使用JSTL,必須解壓這個文件,然後將它安裝到Tomcat的正確位置。

 

要在Tomcat中安裝JSTL,有下面三個步驟:

 

拷貝JSTL JAR文件到Tomcat的lib目錄中.

 

如果你使用的是Windows, 那麼lib目錄最可能的位置是C:\Program Files\Apache Tomcat 4.0\webapps\ROOT\WEB-INF\lib。你應該拷貝這些JAR包到你的Tomcat JAR目錄。

 

拷貝JSTL TLD文件到Tomcat的web-inf目錄中

 

你檢查JSTL發布文件時,你應該會注意到有8個文件是以TLD擴展名結尾的。所有這8個文件都應該復制到你的web-inf目錄中。

 

修改web.xml文件包含這些TLD文件。

 

最後,你必須修改你的web.xml,添加8個標簽庫的表項(entry)。需要添加的表項如下所示:

<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/fmt-rt</taglib-uri>

    <taglib-location>/WEB-INF/fmt-rt.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/core-rt</taglib-uri>

    <taglib-location>/WEB-INF/c-rt.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/sql-rt</taglib-uri>

    <taglib-location>/WEB-INF/sql-rt.tld</taglib-location>

</taglib>

 

<taglib>

    <taglib-uri>http://java.sun.com/jstl/x</taglib-uri>

    <taglib-location>/WEB-INF/x.tld</taglib-location>

</taglib>

 

<taglib>

    <taglib-uri>http://java.sun.com/jstl/x-rt</taglib-uri>

    <taglib-location>/WEB-INF/x-rt.tld</taglib-location>

</taglib>

 

完成上面這三步後,你現在可以准備測試你的JSTL安裝了。可以通過創建一個包含JSTL的JSP頁面來驗證。一個最簡單的范例程序就是上面的那個計數器程序。你應該將它放置在你的Webroot目錄中(C:\Program Files\Apache Tomcat 5.0\webapps\ROOT)。一旦Tomcat啟動後,你應該能夠通過浏覽http://127.0.0.1:8080/count.jsp來查看這個頁面。

 

如果你沒有正確安裝JSTL,那麼可能不會出現錯誤信息。如果JSTL不能解釋你的標簽含義,那麼它在Web浏覽器上會直接跳過。然後Web浏覽器將解釋這些未知的HTML標簽。多數浏覽器僅僅只是忽略這些未知的HTML標簽。

 

JSTL標簽庫

JSTL通常被認為是一種單標簽庫。但JSTL實際上有4個標簽庫。這些標簽庫被概括為如下:

 

核心標簽庫—包含一些Web應用的必要的標簽。核心標簽庫的實例包括循環,表達式賦值和基本輸入輸出。.

 

 

格式化/國際化標簽庫—包括被用來解析數據的標簽庫。這種標簽會解析數據,比如日期,不同的場所區域等。

 

 

數據庫標簽庫—包含被用來訪問SQL數據庫的標簽。這些標簽通常僅僅只創建原形(prototype)程序。這個是因為大多數程序不會直接從JSP頁面中來處理數據庫訪問。數據庫訪問應該被嵌入到能夠被JSP頁面所訪問的EJB中。

 

 

XML標簽庫—包含被用來訪問XML元素的標簽。因為XML廣泛使用於Web開發,XML的處理是JSTL的一個重要的特征。 

在本文中,我們將僅僅只對核心標簽做一個簡單介紹。我們將考察一個簡單的范例,來說明如何處理用戶在表單中輸入的數據。在我們開始檢查程序之前,我們必須先看看JSTL是如何處理表達式的,JSTL的表達式處理是通過使用EL表達式語言來完成的,僅僅只能在JSP2.0被使用。下一節,我們會考察EL表達式語言。

 

EL表達式語言

JSP2.0的一個主要的組件就是這個新的叫做EL的表達式語言。EL被廣泛用在JSTL中。然而,重要的是記住,EL是JSP的功能而不是JSTL的。被用在JSP2.0中JSP scriptlet代碼能夠包含EL表達式。下面這行代碼演示了JSP scriptlet代碼中的EL:

 

<p>

  Your total, including shipping is ${total+shipping}

</p>

 

正如你看到的,total和shipping相加後會產生HTML並且在浏覽器中顯示它們的值。這些表達式也可以在JSTL標簽中使用。JSTL1.0的一個重要問題是,JSTL不能用在JSP1.2的版本上。因為JSP1.2不支持EL,所以有必要提供一些額外的JSTL標簽來幫助EL的使用。例如,如果你想使用JSTL來顯示上面的表達式,你可以使用下面的代碼。

 

<p>

  Your total, including shipping is <c:out var="${total+shipping"/>

</p>

 

值得注意的是,JSTL不需要JSP2.0來運行。通過提供一個能夠顯示EL表達式的標簽,就可以達到這樣的需求。

 

JSTL范例

我們將考察一個簡單的使用JSTL的范例。在這個例子裡,我們將考察Web應用中的一個常見過程。我們會看到如何提交(POST)一個表單,並處理POST的結果。程序代碼如下:

 

<%@ taglib uri="http://java.sun.com/jstl/core" prefix="c" %>

<html>

  <head>

    <title>If with Body</title>

  </head>

 

  <body>

    <c:if test="${pageContext.request.method=='POST'}">

      <c:if test="${param.guess=='Java'}">You guessed it!

      <br />

 

      <br />

 

      <br />

      </c:if>

 

      <c:if test="${param.guess!='Java'}">You are wrong

      <br />

 

      <br />

 

      <br />

      </c:if>

    </c:if>

 

    <form method="post">Guess what computer language

                        I am thinking of?

    <input type="text" name="guess" />

 

    <input type="submit" value="Try!" />

 

    <br/>

    </form>

  </body>

</html>

 

這個簡單的Web頁面顯示一個表單,要求用戶猜測程序所想的計算機語言。當然,計算機想的是“Java”。這個頁面通過檢查“是否已提交”來開始。這使得表單和處理表單的代碼可以放在同一個頁面中。是通過下面的JSTL if語句實現的。

 

<c:if test="${pageContext.request.method=='POST'}">

 

現在你看到了,<c:if>標簽使用EL表達式來決定是否請求的方式是POST的。如果數據被post到頁面,那麼用戶輸入的他們的猜想值就會存儲在名為“guest”的參數中。這是因為“guest”是表單輸入項的名字。我們現在必須檢查是否這個參數等於“Java”。這個是通過下面的<c:if>標簽來完成:

 

<c:if test="${param.guess=='Java'}">

          You guessed it!

      </c:if>

 

 

正如你所看到的,如果表達式為true,<c:if>標簽的標簽體就被執行。在本文中,我們開始考察了JSTL如何被安裝,以及它是如何運轉的,也提供了一些JSTL小范例幫助大家理解。

 

JSTL的核心標簽也包含循環,疊代器和變量處理。通過使用標簽,你能在collections裡進行iterate,訪問用戶的會話數據(session data),執行其他的核心任務等。除了核心標簽庫,XML,數據庫和格式化標簽庫也提供了更多高級的用處。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved