一、JSTL 簡(jiǎn)介
JSTL是一個(gè)不斷完善的開放源代碼的JSP標(biāo)簽庫,是由apache的jakarta小組來維護(hù)的。JSTL只能運(yùn)行在支持JSP1.2和Servlet2.3規(guī)范的容器上,如tomcat 4.x。但是在即將推出的JSP 2.0中是作為標(biāo)準(zhǔn)支持的。
JSTL包含兩個(gè)部分:標(biāo)簽庫和EL(Expression Language表達(dá)式語言)語言。
JSP標(biāo)準(zhǔn)標(biāo)記庫(JSP Standard Tag Library,JSTL)是一個(gè)實(shí)現(xiàn)Web應(yīng)用程序中常見的通用功能的定制標(biāo)記庫集,這些功能包括迭代和條件判斷、數(shù)據(jù)管理格式化、XML操作以及數(shù)據(jù)庫訪問。
JSTL 1.0 有四個(gè)定制標(biāo)記庫:core、format、xml 和 sql.
1.core 標(biāo)記庫提供了定制操作,通過限制了作用域的變量管理數(shù)據(jù),以及執(zhí)行頁面內(nèi)容的迭代和條件操作。
2.format 標(biāo)記庫定義了用來格式化數(shù)據(jù)(尤其是數(shù)字和日期)的操作。它還支持使用本地化資源束進(jìn)行 JSP 頁面的國際化。
3.xml 庫包含一些標(biāo)記,這些標(biāo)記用來操作通過 XML 表示的數(shù)據(jù)。
4.sql 庫定義了用來查詢關(guān)系數(shù)據(jù)庫的操作。
二、表達(dá)式語言(Expression Language)
1.隱含對(duì)象(常用)
1)requestScope:與請(qǐng)求作用域?qū)傩缘拿Q和值相關(guān)聯(lián)的 Map 類
2)sessionScope:與會(huì)話作用域?qū)傩缘拿Q和值相關(guān)聯(lián)的 Map 類
3)applicationScope:與應(yīng)用程序作用域?qū)傩悦Q和值相關(guān)聯(lián)的 Map 類
4)pageScope:與頁面作用域?qū)傩缘拿Q和值相關(guān)聯(lián)的 Map 類
5)param:按名稱存儲(chǔ)請(qǐng)求參數(shù)的主要值的 Map 類
6)paramValues:請(qǐng)求參數(shù)的所有值作為 String 數(shù)組存儲(chǔ)的 Map 類
2.EL 表達(dá)式的格式:
用美元符號(hào)($)定界,內(nèi)容包括在花括號(hào)({})中,eg:${value}
3.EL的存取器:使用點(diǎn)運(yùn)算符(.)和方括號(hào)運(yùn)算符([]).
1)點(diǎn)運(yùn)算符通常用于訪問對(duì)象的特性。例如,在表達(dá)式 ${user.firstName} 中,使用點(diǎn)運(yùn)算符來訪問 user 標(biāo)識(shí)符所引用對(duì)象的名為 firstName 的特性。
2)方括號(hào)運(yùn)算符用來檢索數(shù)組和集合的元素。在數(shù)組和有序集合的情況下,把要檢索的元素的下標(biāo)放在方括號(hào)中。對(duì)于實(shí)現(xiàn) java.util.Map 接口的集合,方括號(hào)運(yùn)算符使用關(guān)聯(lián)的鍵查找存儲(chǔ)在映射中的值。在方括號(hào)中指定鍵,并將相應(yīng)的值作為表達(dá)式的值返回。
3)點(diǎn)運(yùn)算符和方括號(hào)運(yùn)算符可能實(shí)現(xiàn)某種程度的互換
4.EL運(yùn)算符
1)算術(shù)運(yùn)算符: +、-、*、/(或 div)和 %(或 mod)
2)關(guān)系運(yùn)算符: ==(或 eq)、!=(或 ne)、<(或 lt)、>(或 gt)、<=(或 le)和 >=(或 ge)
3)邏輯運(yùn)算符: &&(或 and)、||(或 or)和 !(或 not)
4)驗(yàn)證運(yùn)算符: empty
三、常用的JSTL core tag
1.set定義變量標(biāo)記:定義限制了作用域的變量
Syntax:
1):<c:set value=”value” var=”varName” [scope=”{page|request|session|application}”]/>
2):<c:set var=”varName” [scope=”{page|request|session|application}”]> body content </c:set>
2.out打印標(biāo)記:顯示表達(dá)式的值,取代jsp scriptlet中的<%=variableName%>
Syntax:
1):<c:out value=”${variableNam}” [escapeXml=”{true|false}”]> default value </c:out>
2):<c:out value=”value” escapeXml=”{true|false}”] [default=”defaultValue”] />
3.forEach循環(huán)標(biāo)記(for/while):提供指定的循環(huán)次數(shù)(適用syntax 2)或在某個(gè)數(shù)據(jù)結(jié)構(gòu)(Collection/Array)(適用syntax 1)上進(jìn)行循環(huán)的能力
Syntax:
1):<c:forEach [var=”varName”] items=”collection” [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”] > body content </c:forEach>
2):<c:forEach [var=”varName”] [varStatus=”varStatusName”] begin=”begin” end=”end” [step=”step”]> body content</c:forEach>
4.forTokens循環(huán)標(biāo)記:允許對(duì)一個(gè)String值進(jìn)行循環(huán),使用所選擇的字符作為記號(hào)(token)之間的定界符
Syntax:
<c:forTokens items="stringOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]> body content </c:forTokens >
5.if條件求值標(biāo)記(if):只在指定的測(cè)試條件為真時(shí)求具體的值,沒有”else”條件—要么執(zhí)行要么忽略執(zhí)行體
Syntax:
1):<c:if test=”testCondition” var=”varName” [scope=”{page|request|session|application}”]/>
2):<c:if test=”testCondition” [var=”varName”] [scope=”{page|request|session|application}”]>body content</c:if>
6.choose條件求值標(biāo)記(switch-case/if-else):使用嵌套when標(biāo)記(類似case)和otherwise標(biāo)記(可選,類似default)
Syntax:
1):<c:choose> body content (<when> and <otherwise> subtags)</c:choose>
2):<c:when test=”testCondition”>body content</c:when>
3):<c:otherwise> conditional block</c:otherwise>
7.remove 刪除變量標(biāo)記:用來刪除限制了作用域的變量的
Syntax:
<c:remove var=”varName” [scope=”{page|request|session|application}”]/>
四、開始使用JSTL
1.必需的文件:
1)jar檔:jstl.jar,standard.jar.一般是放置在lib目錄下
2)tld文件:c.tld,一般會(huì)是在WEB-INF目錄下,依tld文件的位置修改web.xml文檔
3)一個(gè)web.xml的例子:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
<taglib>
<taglib-uri>http://java.sun.com/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
</web-app>
2.在JSP頁面中聲明標(biāo)記庫:
<%@ taglib prefix="c" uri="http://java.sun.com/jstl/core" %>
五、參考資料
JSTL規(guī)范:http://java.sun.com/products/jsp/jstl/index.jsp
JSTL 1.0相關(guān)下載:http://www.apache.org/dist/jakarta/taglibs/standard-1.0/
JSTL1.0規(guī)范書:http://www.jcp.org/aboutJava/communityprocess/first/jsr052/index.html
表達(dá)式語言:http://www-900.ibm.com/developerWorks/cn/java/j-jstl0211/