JSP標准標簽庫(JSP Standard Tag Library,JSTL)是實現Web應用程序中常見的通用功能的定制標簽庫集,程序員使用JSTL標簽來避免在JSP頁面中使用腳本。本章將介紹JSTL的應用基礎、如何從表示層刪除源代碼來簡化軟件的維護。
JSTL概述
JSTL英文全稱是“JSP Standard Tag Library”,即JSP標准標簽庫之意。
JSTL是由JCP(Java Commnunity Process)指定的標准規范,是一組形如html的標簽,使得程序員即使不需要學習Java也可以編寫動態Web頁。自2002年中期發布後,它已成為JSP平台的一個標准組成部分。
JSTL提供了諸如循環、條件、數據庫訪問、XML處理、國際化等開發上的工具和流程。
目前最新的版本為1.2,是一個正在不斷開發和完善的開放源代碼的JSP標簽庫,它支持多種標簽。
JSTL分成了5大類,如下表所示:
在學習JSTL標簽庫之前,需要先下載JSTL所需要的JAR包。有兩種獲取方式,獲取API裡面的jstl.jar、standard.jar。
使用MyEclipse自帶的驅動包。使用MyEclipse創建Web工程時,選擇“JSTL Support”選項。
Core標簽庫
核心標簽庫主要包括通用標簽、條件標簽、迭代標簽和與URL相關的標簽。
在使用Core標簽庫的JSP文件的開始部分,添加代碼: <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
通用標簽
<c:out>標簽
用於將表達式的結果輸出到當前的JspWriter對象中。其功能類似於JSP的表達式<%= %>,或者EL表達式${}。
語法 <c:out value=“value” [default=“default value”] [escapeXml=“true|false”] /> <c:out value=“value” [escapeXml=“true|false”] > default value </c:out>
<c:out> 標簽用於輸出一段文本內容到pageContext對象當前保存的“out”對象中。
<c:set>標簽
<c:set>標簽用於設置JSP頁面的各種域范圍中的變量,或者設置java.util.Map對象或JavaBean對象的屬性。
語法
<c:set value=“value” var=“name” [scope=“范圍”]/>將value的值保存到名為name的變量中,同時name變量保存到選定的作用范圍中。例如, <c:set value=“sunwk” name=“username” scope=“session”/>
<c:set var=“name” [scope=“范圍”] > value </c:set> 將標簽體中的內容保存到名為name的變量中,同時name變量保存到選定的作用范圍中。例如, <c:set var=“username” scope=“session”> sunwk </c:set>
<c:set value=“value” target=“target” property=“propertyName” />將value的值保存到target對象的propertyName屬性中。
<c:set target=“target” property=“propertyName”>
value </c:set> 將標簽體的內容保存到target對象的propertyName屬性中。
<c:set>標簽用於把某一個對象存在指定的域范圍內,或者設置Web域中的java.util.Map類型的屬性對象或JavaBean類型的屬性對象的屬性。
<c:remove>標簽
<c:remove>標簽用於移除JSP頁面中指定域范圍中的變量。
語法 <c:remove var=“name” [scope=“范圍”]/>
<c:catch>標簽
<c:catch>標簽用於捕獲嵌套在標簽體內的內容拋出的異常對象,並將異常信息保存到變量中。
語法 <c:catch [var=“name”]> body content </c:catch> 將可能發生異常的代碼放到該標簽中,如果發生異常,異常信息保存到name變量中。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=gb2312" %>
<c:catch var="myex“ scope=“page”>
<%
10/0;
%>
</c:catch>
異常:<c:out value="${myex}" /><br />
異常 myex.getMessage:<c:out value="${myex.message}" /><br />
異常 myex.getCause:<c:out value="${myex.cause}" /><br />
異常 myex.getStackTrace:<c:out value="${myex.stackTrace}" />
條件標簽
<c:if>標簽
<c:if>標簽用來做條件判斷,功能類似於JSP中的<%if(boolean){}%>。
注意:對於判斷標簽的test屬性,可以使用一些關系操作符,如==、!=、<、>、>=、<=等,也可以將這些關系操作符用eq、ne、lt、le、gt、ge取代。
<c:choose>、<c:when>、<c:otherwise>標簽
<c:choose>標簽用於提供條件選擇的上下文,它必須與<c:when>和<c:otherwise>標簽一起使用。
<c:when>作為<c:choose>的子標簽,<c:when>有一個test屬性,該屬性的值為布爾型,如果test的值為true,則執行<c:when>標簽體的內容。
<c:otherwise>標簽沒有屬性,它必須作為<c:choose>標簽的最後分支出現。
<c:choose>標簽
<c:choose>標簽用於指定多個條件選擇的組合邊界,它必須與<c:when>和<c:otherwise>標簽一起使用。使用<c:choose>,<c:when>和<c:otherwise>三個標簽,可以構造類似 “if-else if-else” 的復雜條件判斷結構。
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page contentType="text/html;charset=gb2312" %>
<c:set value="${param.count}" var="count“ />
<c:choose>
<c:when test="${count == 0}">
對不起,沒有符合您要求的記錄。
</c:when>
<c:otherwise>
符合您要求的記錄共有${count}條.
</c:otherwise>
</c:choose>
迭代標簽
<c:forEach>標簽
<c:forEach>標簽用於對一個集合對象中的元素進行循環迭代操作,或者按指定的次數重復迭代執行標簽體中的內容。
注意:
items屬性並不是一定要有的屬性,但是當沒有使用items屬性時,就一定要使用begin和end屬性。
varStatus:用來保存現有遍歷計數相關的信息。例如,如果varStatus=“i”,那麼會將相應信息放到名稱為i的變量中,i變量有四個屬性值,index、count、first和last。
<c:forTokens>標簽
<c:forTokens>標簽用來浏覽一字符串中所有的成員,其成員是由定義符號(Delimiters)所分隔的。
<c:forTokens items=“a:b:c:d” delims=“:” var=“token”>
注意:這個標記的使用效果相當於java.util.StringTokenizer類。將字符串“a:b:c:d”以“:”分隔符分開,token是循環到當前所分割得到的字符串。
<c:out value=“${token}” /> <br>
</c:forTokens>
URL相關的標簽
JSP網頁開發中經常用到超鏈接、頁面的包含和重定向等操作,在JSTL中,也提供了相應的標簽來完成這些功能,這些標簽包括<c:import>、<c:url>、<c:redirect>和<c:param>。
<c:import>標簽:可以把其他靜態或者動態文件包含到本身的JSP頁面中。與JSP的動作<jsp:include>的區別在於:<jsp:include>只能包含和自己在同一個Web應用中的文件,<c:import>不僅能包含和自己在同一個Web應用下的文件,還可包含其他Web應用或其他網站的文件。
屬性
url屬性是必須要有的,它是用來設定被包含頁面的地址,可以是絕對地址也可以是相對地址。
url如果使用相對地址,把同一個Web應用中的文件引入的話,例如<c:import url=“MyHtml.html”/>
還可使用絕對路徑,將其他網站的文件包含進來。例如<c:import url=“http://www.baidu.com” charEncoding=“gb2312”/>
當var屬性存在時,把文件內容包含進來,但是它不輸出到網頁上,而是保存到var設定的變量中,而屬性scope設定該變量的作用范圍。
<c:url>標簽
<c:url>標簽在JSP頁面構造一個URL,它提供了3個功能元素,它們可以在URL前面附加當前Servlet上下文的名稱;可以為會話管理重寫URL;可以對請求參數名稱和值進行URL編碼,這些功能在為J2EE Web應用程序構造URL時特別有用。
<c:redirect>標簽
<c:redirect>標簽用於向用戶的浏覽器發送HTTP重定向響應,它是JSTL中與 javax.servlet.http.HttpServletResponse的sendRedirect()方法功能相當的標記。
<c:param>標簽
<c:param>標簽的作用是為一個URL添加請求參數,在前面的<c:url>、<c:redirect>和<c:import>標簽中都已經見過<c:param>的用法。
在JSP頁面進行URL的相關操作時,經常要在URL地址後面附加一些參數。<c:param>標簽可以嵌套在<c:import>、<c:url>或<c:redirect>標簽內,為這些標簽所使用的URL地址附加參數。
<c:param>標簽在為一個URL地址附加參數時,將自動對參數值進行URL編碼,例如,如果傳遞的參數值為“中國”,則將其轉換為“%d6%d0%b9%fa”後再附加到URL地址後面,這也就是使用<c:param>標簽的最大好處。
示例:<c:param name="name" value="value" />