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,資料庫和格式化標籤庫也提供了更多進階的用處。
(End)
註:EL Expression Language這裡翻譯成EL表達式語言,有的是翻譯成EL表達語言,是一個意思。
Translated by Caiyi0903(Willpower),2004.2.19