标准标签库JSTL的全名为:Java Server Pages Standard Tag Library.html
JSTL主要提供了5大类标签库:java
1. 核心标签库: 为平常任务提供通用支持,如显示和设置变量,重复使用一组项目,测试条件以及其余操做(如导入和重定向web页面等).web
2. 国际化(I18N)标签库: 支持多种语言的引用程序.sql
3. SQL标签库: 对访问和修改数据库提供标准化支持.数据库
4. XML标签库: 对XML文件处理和操做提供支持,包括XML节点的解析,迭代,基于XML数据的条件评估以及可扩展样式语言转换(Extensible Style Language Transformations , XSLT)的执行.数组
5. 函数标签库: 经过在EL表达式中调用函数标签库中的函数来实现特定的操做,例如: ${fn:contains(sring,substring)},其功能是判断string字符串中是否包含substring字符串.浏览器
JSTL标签库使用方法:服务器
标签库 URI 前缀 使用模式session
核心标签库 http://java.sun.com/jstl/core c <c:tagname…>app
国际化标签(I18N) http://java.sun.com/jstl/fmt fmt <fmt:tagname…>
SQL标签库 http://java.sun.com/jstl/sql sql <sql:tagname…>
XML标签库 http://java.sun.com/jstl/xml x <x:tagname…>
函数标签库 http://java.sun.com/jstl/functions fn <fn:tagname…>
核心标签库
核心标签库包括:out , set , remove , catch , if , choose , when 和 URL 等.
表达式操做标签: 包括:out , set , remove , catch.
out标签:
核心标签库中最为基本的标签就是<c:out>,他能够在页面中显示一个字符串或者一个EL表达式的值,其功能与JSP中的<%= 表达式%>相似
使用格式以下:
<c: out value=”object” [escapeXml=”true|false”] />
这个标签还能够有一个体,以下:
<c: out value=”object” [escapeXml=”true|false”] >defalut value</c:out>
这表示当value属性指定的object值为null时,就会显示体中指定的值,也就是default value的值,体中也能够是jsp代码.
<c:out>中各属性的说明以下:
1. value : 能够指定一个字符串做为输出内容,也能够指定为EL表达式,例如:${3+5}.
2. escapeXml : 类型为boolean , 肯定 , < , > , & , ‘ , “ 等字符在结构的字符串中是否被转换成字符串实体代码,默认值是true(就是是否按html中的样式进行输出,设置true就是按照字符串原样进行输出,false就是按照html标识符进行输出)
3. default value : 能够是字符串,也能够是一个EL表达式或者jsp表达式,若是属性(value)指定的表达式或者对象为null,那么将输出这个defalut value部分的值.
set标签:
set标签用来在某个范围(request,session或者application)内设置值,或者设置某个对象的属性值.
Set标签使用格式以下:
1. 使用value 属性在一个特定的范围内指定某个变量的值,其使用格式以下:
<c:set var=”varName” value=”varValue” [scope=”page|request|session|application”]/>
2. 当使用value属性在一个特定范围内指定某各变量的值时,也能够包括一个体,他的做用与out标签体的做用同样,即value指定的值为null时,默认使用体中指定的值,使用的格式以下:
<c:set var=”varName” value=”varValue” [scope=”page|request|session|application”]>
default value
</c:set>
3. 设置某一个特定对象属性的使用格式以下:
<c:set property=”propertyName” target=”target” value=”value”/>
4. 在设置某个特定对象的一个属性时,也可使用一个体,而且指定默认的值,使用格式以下:
<c:set property=”propertyName” target=”target” value=”value”>
default value
</c:set>
该标签中的各属性说明以下:
1. value : 该属性指定变量或者对象中某个属性的值,而且能够是一个表达式.
2. var : 变量名称,value属性指定的值就保存在这个变量中.
3. scope : 设定变量的有效范围,若是不设置,默认为page.
4. target : 设置属性的一个对象,它必须是JavaBean 或者java.util.Map对象.
5. property : 设置对象中的一个属性.
remove标签
remove标签通常和set标签配套使用,二者是相对应的,remove标签用于删除某个变量或者属性,使用格式以下:
<c:remove var=”varName” [scope=”page|request|session|application”] />
Remove标签中使用的各属性说明以下:
1. scope : 设定这个须要删除的变量的所在范围.
2. var : 须要删除的变量或者对象属性的名称.
若是没有scope属性,即采用默认值,就至关于调用PageContext.removeAttribute(varName)方法,若是指定了这个变量所在的范围,那么系统会调用PageContext.removeAttribute(varName,scope)方法.
catch标签
catch标签的功能和java中的try{…}catch{…}语句的功能很类似,它用于捕获嵌入到其中间语句抛出的异常,这个标签的使用格式以下:
<c:catch var=”varName”>
相关操做语句
</c:catch> --若是操做语句中出现异常,则catch会将异常保存在 varName变量中.
流程控制标签: 包括: if , choose , when , otherwise 等.
if标签
这个标签做用与java中的if语句做用相同,用于判断条件语句,主要的使用格式以下
1. 在<c:if> 体中不包括体的使用格式:
<c:if test=”checkCondition” var=”varName” scope=”page|request|session|application”/>
2. 当<c:if> 体中包括体时,使用格式以下:
<c:if test=”checkCondition” var=”varName” scope=”page|request|session|application”>
body content
</c:if>
标签中使用的属性说明:
test : 判断条件的表达式,返回类型为true 或者 false;(也就是if的条件)
var : 这个变量用于保存test条件表达式判断所返回的true或者false值
(if条件执行后所获得的boolean值将要保存在var变量中).
scope : 指定var变量所在的有效范围.
choose , when , otherwise 标签
这些标签至关于java中的 switch , case , default 条件,使用实例以下:
<c:set var=”num” scope=”page” value=”admin”/>
<c:choose>
<c:when test=”${num==’guest’}”>
<c:out value=”guest”/>
</c:when>
<c:when test=”${num==’admin’}”>
<c:out value=”admin”/>
</c:when>
<c:otherwise>
<c:out value=”other”/>
</c:otherwise>
</c:choose>
运行jsp页面后,输出 admin
forEach迭代标签
该标签用来对一个collection集合中的一系列对象进行迭代输出,而且能够指定迭代次数,通常的使用格式以下:
<c:forEach items=”collection” var=”varName” [varstatue=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>
Body content
</c:forEach>
这个标签使用的属性描述以下:
1. var : 也就是保存在collection集合类中的对象名称.
2. items : 将要迭代的集合类名.
3. varStatus : 存储迭代的状态信息,能够访问到迭代自身的信息.
4. begin : 若是指定了begin值,就表示从items[begin]开始迭代;若是没有指定begin值,则从集合的第一个值开始迭代.
5. end : 表示迭代到集合的end位时结束,若是没有指定end值,则表示一直迭代到集合的最后一位.
6. step : 指定迭代的步长.
例:
<%
String Items[] =new String[5];
Items[0]=”核心标签库”;
Items[1]=”国际化标签库”;
Items[2]=”SQL标签库”;
Items[3]=”XML标签库”;
Items[4]=”函数标签库”;
Request.setAttribute(“ItemName”,Items);
%>
<B><c:out value=”不指定begin和end的迭代:”/><B><br>
<c:forEach var=”ItemName” items=”${Items}”>
<c:out value=”${ItemName}” /><br>
</c:forEach>
<B><c:out value=”指定begin和end的迭代:”/><B><br>
<c:forEach var=”ItemName” items=”${Items}” begin=”1” end=”3” step=”1”>
<c:out value=”${ItemName}” /><br>
</c:forEach>
<B><c:out value=”输出整个迭代的信息:”/><B><br>
<c:forEach var=”ItemName” items=”${Items}” begin=”3” end=”4” step=”1” varStatus=”s”>
<c:out value=”${ItemName}” />的四种属性:<br>
所在位置即索引: <c:out value=”${s.index}” /> <br>
总共已迭代的次数: <c:out value=”${s.count}”/><br>
是否为第一个位置: <c:out value=”${s.first}” /><br>
是否为最后一个位置: <c:out value=”${s.last}”/>
</c:forEach>
代码说明: s.index 用来获取计数器的值, s.count用来获取这是第几回循环, s.first 用来获取是不是循环开始的第一次 , s.last 用来获取是不是循环的最后一次 , first 和last 都返回boolean值.
forTokens 标签
这个标签的做用和Java中的StringTokenizer类的做用很是类似,经过items属性来指定一个特定的字符串,而后经过delims属性指定一种分隔符(能够同时指定多个),经过指定的分隔符把items属性指定的字符串进行分组,与forEach标签同样,forTokens标签也能够指定begin和end以及step属性值.
使用格式以下:
<c:forTokens items=”stringOfTokens” delims=”delimiters” var=”varName” [varStatus=”varStatusName”] [begin=”begin”] [end=”end”] [step=”step”]>
Body content
</c:forTokens>
标签中的各个属性描述以下:
1. var : 进行迭代的参数名称.
2. items : 指定的进行标签化的字符串.
3. varSatus : 每次迭代的状态信息.
4. delims : 使用这个属性指定的分隔符来分隔items指定的字符串.
5. begin : 开始迭代的位置.
6. end : 迭代结束的位置.
7. step : 迭代的步长.
例:
<c:out value=”forTokens标签实例”/>
<h4>使用” | ” 做为分隔符</h4>
<c:forTokens var=”token” items=”bleu,rouge|vert,jaune|blanc,rouge” delims=”|”>
<c:out value=”${token}”/>
</c:forTokens>
<h4>使用” | , ”做为分隔符</h4>
<c:forTokens var=”token” items=”bleu,rouge|vert,jaune|blanc,rouge” delims=”|,”>
<c:out value=”${token}”/>
</c:forTokens>
代码说明: delims=”|,” , 即便用”|”和”,”同时做为分隔符进行使用.若是须要更多的分隔符就是使用“|,./” 在引号内输出.
URL相关的标签:
URL相关的标签主要用来将其余文件包含进来,或者提供页面之间的重定位以及URL地址的生成,参数的输出等.通常包括以下几个标签.
<c:import>标签: 与传统JSP页面重的<jsp:include>标签相似.
<c:redirect>标签: 进行页面的重定位.
<c:url> : 主要用来重写URL地址.
<c:param> : 通常param标签会与其余标签一块儿配套使用,用于参数值的传递.
<c:import> 标签:
该标签用于把其余今天文件包含到该文件当中,它与传统的<jsp:include>相相似,不一样的是<jsp:include>标签只能用来包括该应用中的其余文件,而<c:import>还能够包含外部站点中的静态文件,因此它的功能更增强大.使用格式以下:
<c:import url=”url” [context=”context”] [var=”varName”] [scope=”page|request|session|application”] [varReader=”varReader”] [charEncodion=”charEncoding”]>
Body content
</c:import>
标签中的属性描述以下:
url: 待引用静态文件的URL地址.
context: 当采用相对路径访问一个外部静态文件时,这里的context指定这个外部文件的名称.
var: 当使用字符串输出时,把输出的内容存储在这个var指定的变量中.
scope: 指定var参数变量的有效范围.
varReader: 这个属性指定的参数变量类型是Reader,能够用于读取文件的内容.
charEncoding: 引入文件所采用的字符编码.
Import标签便可以采用相对路径也能够采用绝对路径来引用本地点中的任何静态文件,还可使用绝对路径引用外部站点中的静态文, 甚至能够是ftp站点中的文件,例如:<c:import var=”myurl” url=”http://www.163.com” />就是引用http://www.163.com 站点的主页面.
能够把引用文件中的内容赋值给var属性指定的变量,而后进行读取,也能够赋值给varReader指定的Reader类型的变量,而后进行相应的读取.
有时引入的文件在本地显示会出现乱码,这时能够经过charEncoding来指定这些内容所采用的字符集编码.
<c:redirect>和<c:param>标签:
Redirect标签用来进行页面之间的重定向,它与传统JSP程序重的<jsp:redirect>标签功能相相似,param标签是与redirect一块儿使用的,它用来进行参数值的传递,redirect标签的使用格式以下:
<c:redirect url=”url” [context=”context”]/>
在redirect标签中指定param参数的使用格式以下:
<c:redirect url=”url” []context=”context”>
<c:param name=”paramName” value=”value”/>
</c:redirect>
例: [经过建立c_redirect1.jsp 和 c_redirect2.jsp 两个文件说明]
c_redirect1.jsp文件内容以下:
<c:redirect url=”c_redirect2.jsp” >
<c:param name=”userName” value=”admin”/>
</c:redirect>
c_redirect2.jsp 文件内容以下:
<body>
userName=<c:out value=”${param.userName}”>
</body>
c_redirect1.jsp页面文件内容不会显示,由于直接重定向到c_redirect2.jsp,重定向c_redirect2.jsp后,页面中输出 userName=admin
<c:url>标签:
这个标签主要用来重写url地址,使用格式以下:
<c:url value=”value” [context=”context”] [var=”varName”] [scope=”page|request|session|application”] />
当进行参数传递时,使用格式以下:
<c:url value=”value” [context=”context”] [var=”varName”] [scope=”page|request|session|application”] >
<c:param name=”paramName” value=”value” />
</c:url>
标签中使用的属性描述以下:
value: 将要处理的URL地址.
context: 当使用相对路径方法指定外部文件时,这个属性指定的是外在文件的名称.
var: 给这个URL地址起一个标识.
Scope: 规定这个var属性所指定变量的有效范围.
建立一个c_url.jsp,其源代码以下:
<%@ taglib prefix=”c” uri=”http://java.sun.com/jsp/jstl/core” %>
<c:url var=”url” value=”c_url2.jsp” scope=”session” >
<c:param name=”userName” value=”admin”/>
<c:param name=”password” value=”123456”/>
</c:url>
<c:out value=”${url}”/>
<a herf=’<c:out value=”${url}”/>’>Link to other page</a>
代码说明: url标签能够指定一个变量(var属性指定)来把url地址保存,而且能够指定这个变量的有效范围为session ,因此当须要用到这个url地址时,就可使用session.getAttribute(varName)方法来获取这个地址,因此通常须要重复使用同一个url地址才会使用<c:url>标签的功能.
国际化( I18N )标签库
国际化标签包括:
<fmt:setLocale>: 用于设置当前本地化环境,为对应的java类javax.servlet.jsp.jstl.fmt.locale配置参数值,这个指定的参数由jsp运行时维护,用于肯定各个jstl标签使用的本地化环境.
<fmt:bundle>: 指定消息资源使用的文件.
<fmt:message>: 显示消失资源文件中指定key的消息,支持带参数的消息.
<fmt:param>: 给带参数的消息设置参数值.
<fmt:setBundle>: 设置消息资源文件.
设置本地化环境标签<fmt:setLocale>
HTML请求到达服务器时,浏览器提供的HTTP首部能够指出用户的首选本地化环境(多是多个本地化环境的列表).这个列表放在Accept-Language HTTP首部中,jsp容器会访问这个首部信息,若是没有使用标签<fmt:setLocale>明确地指出引用本地化环境,JSTL标签就会使用这个列表中的首选本地化环境.
<fmt:setLocale>标签专门用于设置当前本地化环境,基本使用格式以下:
<fmt:setLocale value=”…locale value…” [variant=”…variant value…”] [scope=”page|request|session|application”] />
<fmt:setLocale>标签的属性描述以下:
value: 这个属性是必须设置的,它用来设置本地环境名,例如en_US 或者zh_HK.
variant: 这个属性是可选的,并且不多使用.
scope: 指定value设置的本地化环境名的有效范围,默认为page,即本页面,若是把scope设置为session,则表示同一个用户发出的全部请求都具备相同的本地化环境.
执行信息资源标签<fmt:bundle>
一旦已经设置了web引用的本地化环境后,就可使用<fmt:bundle>标签了,其体重能够包括一些调用本地化文本的<fmt:message>标签,使用格式以下:
<fmt:bundle basename=”…the bundle’s base name…” [prefix=”…prefix name…”]>
<fmt:message key=”…key name…”/>
</fmt:bundle>
属性描述以下:
Basename: 资源文件(这里使用文件,而不是类)的基名,例如,某资源文件Res_zh_CN.property,则基名为Res.
prefix: 这个设置是可选的,若是指定这个属性,就会为标签体中嵌套的<fmt:message>标签附加一个前缀.
当<fmt:bundle>标签中嵌套<fmt:message>标签时,这时<fmt:message>标签默认使用<fmt:bundle>标签中的basename所指定的资源文件.
获取资源属性值标签<fmt:message>:
该标签用于显示本地化的文本,它经过key属性来取得资源文件中相应的消息<fmt:message>标签的通常使用格式以下:
<fmt:message key=”…name of property…” [bundle=”…resourceBundle…”][var=”…varible name…”] [scope=”…scope of var…”]/>
这个标签从资源文件重获取到一个消息,生成相应的一个本地化文本串,该便去重的属性描述以下:
Key : 用于查找资源文件重相应的关键字名,它对应着一条特定的消息.
bundle: 若是设置了这个属性,就会使用这个属性指定的资源文件,不然若嵌套在<fmt:bundle>标签重,就会直接使用<fmt:bundle>标签重basename属性指定的资源文件.
Var : 若是指定这个属性,则把取出的消息字符串存储在这个变量中.
Scope: 这个属性指定了var设置变量的有效范围,默认为page,然而也能够设置为session.
设置资源文件标签<fmt:setBundle>
该标签用于设置一个资源文件,并给定一个标记,以即可以经过<fmt:message>标准中指定bundle属性值来取得这个资源文件中的消息,使用格式以下:
<fmt:setBundle basename=”…the bundle’s base name…” var=”…var name…” [scope=”page|request|session|application”]/>
标签中的属性描述以下:
basename : 该属性与<fmt:message>标签中的basename属性相似.
Var : 给指定的资源文件取一个变量名,以便<fmt:message>标签能够经过这个变量名来读取资源文件中的消息
Scope: 设置var属性指定的变量的有效范围.
获取参数值标签<fmt:param>:
该标签通常与<fmt:message>标签配套使用,用来在获取的消息中插入一个值.例如:资源文件中的一条消息以下:
密码错误=”{0}的密码错误”
<fmt:message>标签首先使用key=”密码错误”这个关键字找到以上这条消息,而后在<fmt:message>标签中使用<fmt:param>标签赋一个值来替代{0}部分.
<fmt:param>标签的使用格式以下:
<fmt:message ……>
<fmt:param value=”value”/>
</fmt:message>
其中value属性的值即为要的替代{0}部分的值.
函数(function)标签库:
函数标签库中的标签基本分红两种:
1. 长度度量函数,例如:fn.length(). [ fn.length(“”) 就为要输出的格式表达式,结果输出0 ]
2. 字符串操做函数.
各种函数标签的功能:
1. fn:contains(string,substring): 若是参数string中包含substring,则返回true.
2. fn:containsIgnoreCase(string,substring): 若是参数string中包含substring,则返回true(忽略大小写).
3. fn:endsWith(string,suffix): 若是参数string以参数suffix结尾,则返回true.
4. fn:escapeXml(string): 将由特殊意义的xml(和html)转换成对应的XML character entity code并返回.
5. fn:indexOf(string,substring): 返回参数substring在string中第一次出现的位置.
6. fn:join(array,separator): 将一个给定的数组array用给定的间隔符separator串在一块儿,组成一个新的字符串并返回.
7. fn:length(item): 返回参数item中包含元素的数量,参数item的类型是数组,collection或者string,若是是string则返回string的字符数.
8. fn:replace(string,before,after): 返回一个String对象,用参数after字符串替换参数string中全部出现before字符串的地方,并返回替换后的结果.
9. fn:split(string,separator): 返回一个数组,以参数separator为分隔符分隔参数string,分隔后的每一部分就是数组的一个元素.
10. fn:startsWith(string,prefix): 若是参数string以参数prefix开头,则返回true.
11. fn:substring(string,begin,end): 返回参数string的部分字符串,从参数begin开始到参数end结束,其中包括end位置的字符.
12. fn:substringAfter(string,substring): 返回参数substring在参数string中后面的那一部分字符串.
13. fn:substringBefore(string,substring): 返回参数substring在参数string中前面的那一部分字符串.
14. fn:toLowerCase(string): 将参数string的全部字符变为小写,并返回.
15. fn:toUpperCase(string): 将参数string的全部字符变成大写,并返回.
16. fn:trim(string): 将参数string的头尾空格所有去除,并返回.
<logic:notEmpty> 标签其自己具备多种功能:
q 一是判断是否为 null 。
q 二是当它为 String 类型的变量时,判断字符串长度是否为 0 。
q 三是当它为集合类型的变量时,利用集合类的 isEmpty 方法能够判断是不是一个空的集合。
本示例既然要在替换后与替换前的工做一致,就应该对集合作两个判断:
q 一是该集合不为 null 。
q 二是该集合中的对象数量不为 0 。
“ !=null ”的 EL 表达式实现了集合实例不为 null 的判断; fn:length() 函数实现了集合内对象数量不为 0 的判断,两个判断用“ && ”链接起来就实现了 <logic:notEmpty> 标签对于集合判断的工做。