jsp提供了自訂標籤的功能,擴充了jsp對標籤的處理能力,方便了開發人員開發。不過由於不同的開發人員對於同一功能可能定義了不同的標籤,這使得自訂標籤變得隨意。由於在web開發中很多功能都是開發人員所共用的,所以定義一套標準的標籤庫供開發人員使用無疑能提高開發效率。這就是JSTL(JavaServer Pages Standard Tag Library,JSTL)的由來。本篇主要介紹JSTL。
對於JSTL的簡介在此就不再贅述了,有興趣可以百度或Google即可。
如果要使用JSTL,則必須將jstl.jar和 standard.jar檔案放到classpath中,如果你還需要使用XML processing及Database access (SQL)標籤,還要將相關JAR檔案放到classpath中,這些JAR檔案全部存在於下載回來的zip檔案中。這個zip檔案可以從http://tomcat.apache.org/taglibs/standard/下載。
JSTL標籤庫分為五類,分別為JSTL核心標籤庫,資料庫標籤庫,I18N格式化標籤庫,xml標籤庫和JSTL函數標籤庫。
JSTL核心標籤庫
核心標籤庫主要包括了一般用途的標籤,條件標籤,迭代標籤和URL相關的標籤。在jsp頁面要使用核心標籤庫,必須使用<%@taglib%>指令指定核心標籤,代碼如下:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<c:set>標籤
jstl提供了方便定義變數的標籤<c:set>,能夠將變數儲存在jsp範圍中或javabean屬性中。其文法格式分為如下五種:
1)指定變數名和變數值,不指定scope(範圍)
<c:set var="username" value="value"></c:set>
2)將value的值儲存到範圍為scope的變數中。
<c:set var="username" value="value" scope="page|request|session|application"></c:set>
3)將本體內容的資料存放區至範圍為scope的變數中。
<c:set var="username" scope="page|request|session|application">本體內容</c:set>
4)將value值儲存到target對象的屬性中。
<c:set value="value" target="target" property="propertyName"></c:set>
5)將本體內容的資料存放區到target對象的屬性中。
<c:set target="target" property="propertyName">本體內容</c:set>
<c:out>標籤
<c:out>用來顯示資料的內容,類似於<%=%>,但是功能更加強大。使用它輸出內容比使用scriptlets代碼要更加簡單,方便頁面維護。它的文法格式分為以下四種。
1)通過在<c:out>中的value屬性指定需要顯示的值。
<c:out value="value"/>
2)通過escapeXml屬性設定是否將value中的值按照原樣輸出。因為<c:out>預設會將<,>,',",&轉換成<,>,',"和&。如果不想轉換,只需將escapeXml屬性設定為"false"。
<c:out value="value" escapeXml="true|false" />
3)通過default屬性來指定預設值。如果value的值為null,則顯示default的值。
<c:out value="value" default="no data" />
4)通過本體內容來指定預設值。如果value值為null,則顯示本體內容。
<c:out value="value" >本體內容</c:out>
<c:remove>標籤
<c:remove>標籤用來一處指定範圍的變數。其文法格式如下:
<c:remove var="number" scope="session" />
var屬性指定待刪除的變數名稱,scop屬性是可選的,用來指定變數範圍,預設為page。
<c:if>標籤
<c:if>標籤用來執行流程式控制制,其功能和java語言中的if完全相同。它有兩種文法格式,一種沒有本體內容,一種有本體內容。
1)沒有本體內容的<c:if>標籤格式如下:
<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"] />
其中test屬性必須填寫,表示進行判斷的運算式。屬性var定義變數,該變數存放判斷後的結果。scope表示var定義變數的儲存範圍。
2)有本體內容的<c:if>標籤格式如下:
<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"] >本體內容</c:if>
當test中運算式的結果為true時,執行本體內容。否則,不執行本體內容。
<c:choose>、<c:when>、<c:otherwise>標籤
<c:if>標籤只能判斷一個運算式,而且無法指定運算式不成立執行的語句。JSTL也提供了類似於if...else...的語句<c:choose>標籤。
<c:choose>標籤本身只能當<c:when>和<c:otherwise>標籤的父標籤。其中可以由一個或多個<c:when>標籤,有0或多個<c:otherwise>標籤。其文法格式如下:
<c:choose> .... <c:when test="testCondition"></c:when> .... <c:otherwise></c:otherwise></c:choose>
<c:forEach>標籤
<c:forEach>標籤有兩種文法格式,一種用來遍曆集合對象的成員,一種用來使語句迴圈執行指定次數。
1)<c:forEach>遍曆結合對象成員,文法格式如下:
<c:forEach var="varName" items="collection" varStatus="varStatusName" begin="begin" end="end" step="step">本體內容</c:forEach>
其中var用來存放現在指到的成員。items指被迭代的集合對象。varStatus用來存放現在指到的相關成員的資訊。begin表示開始位置(預設為0),end表示結束位置,step表示步長(預設為1)。
2)<c:forEach>指定語句執行次數,其文法格式如下。
<c:forEach var="varName" varStatus="varStatusName" begin="begin" end="end" step="step">本體內容</c:forEach>
<c:forTokens>標籤
<c:forTokens>標籤用來根據指定分隔字元分割字串。其文法格式如下。
<c:forTokens var="varName" items="stringOfTokens" delims="delimiters" varStatus="varStatusName" begin="begin" end="end" step="step">本體內容</c:forTokens>
其中,var,varStatus,begin,end,step屬性和<c:forEach>標籤中用法一樣。items屬性工作表示被分割的字串,delims屬性指定分隔字元。
<c:import>標籤
<c:import>標籤可以把其他靜態或動態檔案包含到本身的jsp網頁中。它和jsp動作指令<jsp:include>最大的差別在於:<jsp:include>只能包含和自己在同一個web application下的檔案,而<c:import>還可以包含不同web application或者其他網站的檔案。其文法格式如下:
<c:import url="url" context="context" var="varName" scope="page|request|session|application" charEncoding="charEncoding">本體內容</c:import>
或者,資源內容作為Reader對象被匯入。格式如下:
<c:import url="url" context="context" varReader="varReaderName" charEncoding="charEncoding">本體內容</c:import>
<c:param>標籤
<c:param>標籤用來傳遞參數,它包含兩個屬性name和value。其文法格式如下:
<c:param name="參數名" value="參數值" />
<c:url>標籤
<c:url>標籤使用正確的url重寫規則構造一個url。其文法格式如下:
<c:url value="expression" context="expression" var="name" scope="scope"> <c:param name="expression" value="expression"/> ...</c:url>
value 屬性用來指定基本 URL,然後在必要時標記對其進行轉換。如果這個基本 URL 以一個斜杠開始,那麼會在它前面加上 servlet 的上下文名稱。可以使用 context 屬性提供顯式的上下文名稱。如果省略該屬性,那麼就使用當前 servlet 內容相關的名稱。這一點特別有用,因為 servlet 上下文名稱是在部署期間而不是開發期間決定的。(如果這個基本 URL 不是以斜杠開始的,那麼就認為它是一個相對 URL,這時就不必添加上下文名稱。)
如果通過嵌套 <c:param> 標記指定了任何請求參數,那麼將會使用 HTTP GET 請求的標準標記法將它們的名稱和值添加到產生的 URL 後面。此外,還進行 URL 編碼:為了產生有效 URL,將對這些參數的名稱或值中出現的任何字元適當地進行轉換。
<c:redirect>標籤
<c:redirect>標籤將用戶端的請求重新導向到另一個資源。其文法格式如下:
<c:redirect url="expression" context="expression"> <c:param name="expression" value="expression"/> ...</c:redirect>
<c:redirect>用於向使用者的瀏覽器發送 HTTP 重新導向響應,它是 JSTL 中與 javax.servlet.http.HttpServletResponse 的 sendRedirect() 方法功能相當的標記。
轉載請註明出處:http://blog.csdn.net/iAm333