JSTL是由JCP(Java Community Process)所制定的標準規范,它主要提供給Java Web開發人員一個標準通用的標簽函數庫。
l JSTL所提供的標簽函數庫主要分為五大類:
Ø 核心標簽庫 (Core tag library)
Ø I18N格式標簽庫 (I18N-capable formatting tag library)
Ø SQL標簽庫 (SQL tag library)
Ø XML標簽庫 (XML tag library)
Ø 函數標簽庫 (Functions tag library)
JSTL
|
前置名稱
|
URI
|
范例
|
核心標簽庫
|
c
|
http://java.sun.com/jsp/jstl/core
|
<c:out>
|
I18N格式標簽庫
|
fmt
|
http://java.sun.com/jsp/jstl/fmt
|
<fmt:formatDate>
|
SQL標簽庫
|
sql
|
http://java.sun.com/jsp/jstl/sql
|
<sql:query>
|
XML標簽庫
|
xml
|
http://java.sun.com/jsp/jstl/xml
|
<x:forBach>
|
函數標簽庫
|
fn
|
http://java.sun.com/jsp/jstl/functions
|
<fn:split>
|
l 使用標準的uri和prefix
Ø 把tld文件放在WEB-INF或其子目錄下面
Ø 在WEB-INF/web.xml中定義taglib元素,指定自定義的uri及其對應的tld文件位置
<taglib>
<taglib-uri>/jstl/core</taglib-uri>
<taglib-location>/WEB-INF/c.tld</taglib-location>
</taglib>
Ø 在JSP里使用自定義的uri
<%@ taglib uri="/jstl/core" prefix="c" %>
以下主要說明了core標簽庫:
分類
|
功能分類
|
標簽名稱
|
core
|
表達式操作
|
out
set
remove
|
流程控制
|
if
choose
when
otherwise
|
迭代操作
|
forEach
forTokens
|
URL操作
|
redirect
|
應用時需要在JSP頁面導入標簽庫:<%@ taglib uri="/jstl/core" prefix="c" %>
<c:out/>
屬性:
名稱
|
說明
|
EL
|
類型
|
必須
|
默認值
|
value
|
需要顯示出來的值
|
Y
|
Object
|
是
|
無
|
default
|
如果value的值為null,則顯示default的值
|
Y
|
Object
|
否
|
無
|
escapeXml
|
是否轉換特殊字符,如:< 轉換成 <
|
Y
|
boolean
|
否
|
true
|
<c:set />
說明:主要用來將變量儲存至JSP范圍中或是JavaBean的屬性中
屬性:
名稱
|
說明
|
EL
|
類型
|
必須
|
默認值
|
value
|
要被儲存的值
|
Y
|
Object
|
否
|
無
|
var
|
欲存入的變量名稱
|
N
|
String
|
否
|
無
|
scope
|
var變量的JSP范圍
|
N
|
String
|
否
|
page
|
target
|
為一JavaBean或java.util.Map對象
|
Y
|
Object
|
否
|
無
|
property
|
指定target對象的屬性
|
Y
|
String
|
否
|
無
|
<c:remove />
說明:主要用來移除變量
屬性:
名稱
|
說明
|
EL
|
類型
|
必須
|
默認值
|
var
|
欲移除的變量名稱
|
N
|
String
|
是
|
無
|
scope
|
var變量的JSP范圍
|
N
|
String
|
否
|
page
|
<c:if />
屬性
名稱
|
說明
|
EL
|
類型
|
必須
|
默認值
|
test
|
如果表達式的結果為true,
則執行本體內容,false則相反
|
Y
|
boolean
|
是
|
無
|
var
|
用來儲存test運算后的結果,即true或false
|
N
|
String
|
否
|
無
|
scope
|
var變量的JSP范圍
|
N
|
String
|
否
|
page
|
<c:choose /><c:when /><c:otherwise />
說明:用途就和我們一般在程序中用的when一樣
<c:choose>
:
<c:when>
</c:when>
:
<c:otherwise>
</c:otherwise>
:
</c:choose>
屬性:
名稱
|
說明
|
EL
|
類型
|
必須
|
默認值
|
test
|
如果表達式的結果為true,則執行本體內容,false則相反
|
Y
|
boolean
|
是
|
無
|
<c:forEach />
說明:循環控制,它可以將集合(Collection)中的成員循序瀏覽一遍。運作方式為當條件符合時,就會持續重復執行<c:forEach>的本體內容
屬性:
名稱
|
說明
|
EL
|
類型
|
必須
|
默認值
|
var
|
用來存放現在指到的成員
|
N
|
String
|
否
|
無
|
items
|
被迭代的集合對象
|
Y
|
Arrays
Collection
Iterator
Enumeration
Map
String
|
否
|
無
|
varStatus
|
用來存放現在指到的相關成員信息
|
N
|
String
|
否
|
無
|
begin
|
開始的位置
|
Y
|
int
|
否
|
0
|
end
|
結束的位置
|
Y
|
int
|
否
|
最后一個成員
|
step
|
每次迭代的間隔數
|
Y
|
int
|
否
|
1
|
varStatus屬性的四個值:
屬性
|
類型
|
意義
|
index
|
number
|
現在指到成員的索引
|
count
|
number
|
總共指到成員的總數
|
first
|
boolean
|
現在指到的成員是否為第一個成員
|
last
|
boolean
|
現在指到的成員是否為最后一個成員
|
<c:forTokens />
說明:用來瀏覽一字符串中所有的成員,其成員是由定義符號(delimiters)所分隔的
屬性:
名稱
|
說明
|
EL
|
類型
|
必須
|
默認值
|
var
|
用來存放現在指到的成員
|
N
|
String
|
否
|
無
|
items
|
被迭代的字符串
|
Y
|
String
|
是
|
無
|
delims
|
定義用來分割字符串的字符
|
N
|
String
|
是
|
無
|
varStatus
|
用來存放現在指到的相關成員信息
|
N
|
String
|
否
|
無
|
begin
|
開始的位置
|
Y
|
int
|
否
|
0
|
end
|
結束的位置
|
Y
|
int
|
否
|
最后一個成員
|
step
|
每次迭代的間隔數
|
Y
|
int
|
否
|
1
|
URL 重寫是由 <c:url/>
操作自動執行的
<c:url value="/index.jsp" context="<%= request.getContextPath() %>" scope="request" var="indexUrl">
<c:param name="param1">value1</c:param>
<c:param name="param2">value2</c:param>
</c:url>
url重定向<c:redirect/>
<c:redirect>
<c:param name=""></c:param>
</c:redirect>
格式化標簽
以下四個是相對來說較常用的日期、數字的格式化
<fmt:formatDate value="" scope="" pattern="" var="" timeStyle="" timeZone="" type="" dateStyle=""/>
<fmt:parseDate value="" scope="" pattern="" var="" timeStyle="" timeZone="" dateStyle="" parseLocale="" type="" ></fmt:parseDate>
<fmt:formatNumber value="" scope="" currencyCode="" currencySymbol="" groupingUsed="" maxFractionDigits="" maxIntegerDigits="" minFractionDigits="" minIntegerDigits="" pattern="" type="" var=""></fmt:formatNumber>
<fmt:parseNumber value="" integerOnly="" parseLocale="" pattern="" scope="" type="" var=""></fmt:parseNumber>
以下涉及到地區環境、失去、properties配置文件、設置請求編碼,這些功能不是很常用
<fmt:setLocale value="" scope="" variant=""/>
<fmt:timeZone value=""></fmt:timeZone>
<fmt:setTimeZone value="" scope="" var=""/>
<fmt:bundle basename="" prefix=""></fmt:bundle>
<fmt:setBundle basename="" scope="" var=""/>
<fmt:message bundle="" key="" scope="" var=""></fmt:message>
<fmt:param value=""></fmt:param>
<fmt:requestEncoding value=""/>