該標籤庫可以完成更復雜的功能,比如可以
完成遍歷集合和數組,條件判斷,循環等功能。
目的:不希望在jsp頁面中出現java邏輯代碼。
JSTL標籤庫可分5類:核心標籤庫
I18N格式化標籤庫
SQL標籤庫
XML標籤庫
函數標籤庫
主要講核心標籤庫共13個:分爲四類
standard.jar 標準jar包,定義規範
jstl.jar 具體實現jar包
注意:1)web工程導包需要將包copy到WEB-INF下lib文件夾中。
2)在jsp頁面中導入標籤庫
taglib
WebContent
文件夾:jstl
jsp: jstl.jsp
第一類:表達式控制標籤
1、<c:out> 輸出變量到JspWriter輸出流中
1) 語法1:<c:out value="result"
[escapeXml]="{true|false}"
[default="defaultValue"]/>
注意:a)如果result爲null,則輸出default中的值
b)escapeXml:設定是否轉換特
殊字符(如<、>等一些轉
義字符),在默認值爲true的情況
下直接在輸出<的,如果改爲
false將會進行轉義輸出“<”等。
2) 語法2:<c:out value="result"
[escapeXml]="{true|false}">
default value</c:out>
例如: value可以使用el表達式
<c:out value="${student.address.country}"/>
2、<c:set>
該標籤用於在某個範圍中設置指定變量,
或者設置某個對象的屬性
1) 在scope中設置變量(value指定)、名字由var指定
<c:set var="name" value="attrValue"
[scope="page|...."]/>
注意: var指定的值-->屬性名
value指定的值-->屬性值
value可以通過el標籤來取到數據,如:value="${user }"
相對於:scope.setAttribute("name","attrValue");
2) 帶有一個Body體
<c:set var="varName" [scope]>
body content
</c:set>
注:指定varName變量的值爲body content.
scope指定變量存放的範圍,默認爲page
3) 設置某個特定對象的一個屬性(attribute)
<c:set target="${student}"
property="name" value="terry"/>
注:把一個值爲terry賦值給指定的student對象的name屬性,
相當與setter()方法。
4) 設置某個特定對象的一個屬性,並且標籤帶有一個body
<c:set target="${target}"
property="propertyName"> body content
</c:set>
注意: 1)scope屬性不能在這裏使用。
2)把一個值爲body content賦值給指定
的target對象的propertyName屬性。
3、<c:remove>
<c:remove var="varName" [scope="page|...."]/>
相當於 scope.removeAttribute("varName");
在指定scope中根據屬性名varName來刪除屬性值
如果沒有指定scope,那麼依次從page、request、session和application範圍中
根據該屬性名去刪除屬性值。
4、<c:catch> 捕獲由嵌套在它裏面的代碼拋出的異常
語法:<c:catch [var="varName"]>
nested actions
</c:catch>
var:用於存放這個異常對象的屬性名,
通過它可以輸出異常對象的所有信息。
scope:默認爲page。
第二類:流程控制標籤
5、<c:if>
語法:
<c:if test="condition"
var="varName" [scope]>
body content</c:if>
var爲存放布爾型變量的屬性名,
scope爲該變量的存放範圍。
6、<c:choose>
用於條件選擇,它和<c:when>
以及<c:otherwise>一起使用
語法: <c:choose>
(<when> and <otherwise>)
</c:choose>
注意: body體內容只能由以下的元素構成
1) 空格
2) 0個或者多個<when>子標籤,
<when>必須出現在<c:choose>和<c:ohterwise>之間
3) 0個或者多個<ohterwise>
7、<c:when>
代表了<c:choose>的一個分支
語法: <c:when test="condition">
body content
</c:when>
注意: 必須以<c:choose>作爲它的父標籤
必須在<c:otherwise>之前出現
8、<c:otherwise>
<c:choose>的最後的選擇
語法: <c:otherwise>
body
</c:otherwise>
注意: 必須以<c:choose>作爲父標籤
必須是<c:choose>的最後分支
第三類:循環標籤
9、迭代標籤(用來迭代集合、數組、枚舉
或者迭代器(Iterator))
1) <c:forEach>
語法1: <c:forEach [var="varName"]
items="collection/array/Enumaration/Iterator"
[varStatus="varStatusName"]
[begin="begin"] [end="end"]
[step="step"]>
body
</c:forEach>
語法2: 迭代固定的次數(做普通的循環輸出,類似for循環)
<c:forEach [var="varName"]
[varStatus="varStatusName"]
begin="begin" end="end"
[step="step"]>
body content
</c:forEach>
名字 類型 描述
var String 存放變量(迭代出來的)的屬性名(scope爲page)
items 任何支持的類型 將要迭代itmes的集合/數組/枚舉/Iterator
varStatus String 迭代的狀態,可以訪問迭代的自身信息,如索引號
begin int items從index[begin]開始迭代
沒有指定items從index開始做循環
end int items從index[end]結束
沒有指定items從end結束
step int 迭代的步長(>0)
注意:varStatus中有index(索引),
count(循環次數)
,first(是否是第一個位置),
last(是否爲最後一個位置)
2) <c:forTokens>類似java中的StringTokenizer
這個標籤專門用於處理TokenString的迭代,
可以指定一個或者多個分隔符號(delimiters)
語法: <c:forTokens items="stringOfTokens"
delims="delimiters"
[var="varName"] [varStatus="varStatusName"]
[begin="begin"] [end="end"]
[step="step"]>
body content
</c:forTokens>
第四類:URL操作標籤
10、URL相關的標籤
1) <c:import>導入一個基於URL的資源
<c:import url="url" [var="varName"] [scope]>
[<c:param/>]*
</c:import>
var:存放URL資源內容的屬性名
scope:存放的範圍
該標籤可以把其他靜態或動態文件包含到本JSP頁面。
同<jsp:include>的區別爲:只能包含同一個web應用中的文件。
而<c:import>可以包含其他web應用中的文件,
甚至是網絡上的資源。
url分爲
絕對路徑: http://localhost:8080/jsp/a.jsp(web應用程序外部訪問)
相對路徑: a.jsp(web應用程序內部訪問)
2) <c:url>
用於構造URL,主要用途是URL重寫
語法: <c:url value="url"
[var="varName"] [scope]>
[<c:param/>]*
</c:url>
var:存放重寫後的URL的屬性名
scope:存放的範圍
一般和a連用
如<a href="varName">test</a>
3) <c:redirect>
把客戶的請求重定向到另一個資源
語法: <c:redirect url="url">
[<c:param/>]*
</c:redirect>
注意:重定向的標籤已經對url重寫過了
在重定向之前這個url先被重寫,重定向的是被重寫後的url。
注意: <c:url>和<c:redirect>也可以使用絕對路徑http://localhost:8080/jsp/a.jsp(不能使用/jsp/a.jsp),但是url不能被重寫,只有在使用相對路徑後url才能被重寫。
4) <c:param>
在<c:import>、<c:url>和<c:redirect>中添加請求的參數
語法1: <c:param name="name" value="value"/>
語法2: <c:param name="name">
parameter value
</c:param>