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=""/>