jstl -- c标签
原文地址:(http://yangtonggan.blog.hexun.com/17423100_d.html)
前言
从JSP 1.1规范开始,JSP就支持在JSP中使用自定义标签了,自定义标签的广泛使用造成了程序员重复定义,这样就促成了JSTL(JavaServer Pages Standard Tag Library)的诞生。作者:杨通杆(http://hexun.com/yangtonggan/default.html)?JSTL简介
JSTL是一个不断完善的开放源代码的JSP标签库,是由apache的jakarta小组来维护的。JSTL只能运行在支持JSP1.2和Servlet2.3规范的容器上,如tomcat 4.x。但是在即将推出的JSP 2.0中是作为标准支持的。
JSTL目前的最新版本为1.02,最终发布版为1.0。JSTL包含两个部分:标签库和EL(Expression Language表达式语言)语言。标签库目前支持四种标签: 标签URI前缀示例Corehttp://java.sun.com/jstl/corec<c:tagname ...>XML processinghttp://java.sun.com/jstl/xmlx<x:tagname ...>I18N capable formattinghttp://java.sun.com/jstl/fmtfmt<fmt:tagname ...>Database access (SQL)http://java.sun.com/jstl/sqlsql<sql:tagname ...>
Core支持JSP中的一些基本的操作;
XML processing支持XML文档的处理;
I18N capable formatting支持对JSP页面的国际化;
Database access (SQL)支持JSP对数据库的操作。
让我先给你介绍c标签吧.?
1. <c:out>
库 :Core(核心库)
?
URI : http://java.sun.com/jsp/jstl/core
?
前缀 : c?
?
描述 :<c:out> 标签是一个最常用的标签,用于在 ? JSP ? 中显示数据。 它的作用是用来替代通过 JSP 内 ? 置对象 out 或者 <%=%> 标签来输出对象的值。
?
语法 :?
没有Body时的语法?
<c:out?value=”value”?[escapeXml=”{true|false}”]?[default=”defaultValue”]/>?
有Body时的语法?
<c:out?value=”value”?[escapeXml=”{true|false}”]>?
这里是Body部分?
</c:out>??
?
属性 :
属性名
描述
类型
是否接受动态值
是否支持 EL
是否
必须
默认值
说明
value?
需要显示的值
Object?
Y
Y
Y
无
用来定义需要求解的表达式。
escapeXml
是否转换特殊字符
boolean
Y
Y
N
true
用于指定在使用 <c:out> 标记输出诸如“ < ”、“ > ”、“ ’ ”、“ ” ”和“ & ”之类的字符(在 ?HTML? 和 ?XML? 中具有特殊意义)时是否应该进行转义。如果将 ?escapeXml? 设置为 true ,则会自动的进行编码处理。
default
缺省值
Object
Y
Y
N
无
当求解后的表达式为 null 或者 String 为空时将打印这个缺省值。
?
Null和错误说明
假若value为null,会显示default的值;假若没有设定default的值,则会显示一个空的字符串。
?
实例 :
------------------------------------------------------------------
Example1
<c:out?value="${sessionScope.anyValue}"?default="no?value"?escapeXml="false"/>
该示例将从Session查找名为“anyValue”的参数,并显示在页面,若没有找到则显示“no?value”。
------------------------------------------------------------------
Example2
您的用户名是:?<c:out?value=”${user.username}”?default=”guest”/>?
?
显示用户的用户名,如为空则显示guest
<c:out?value="${sessionScope.username}"/>?
?
指定从session中获取username的值显示;
<c:out?value="${username}"?/>?
?
显示username的值,默认是从request(page)中取,如果request中没有名为username的对象则从session中取,session中没有则从application(servletContext)中取,如果没有取到任何值则不显示
------------------------------------------------------------------
?
2. ?<c:set>
库 :Core(核心库)
?
URI : http://java.sun.com/jsp/jstl/core
?
前缀 : c?
?
描述 : <c:set>标签用于为变量或JavaBean中的变量属性赋值的工作。这个标签用于在某个范围(page、request、session、application等)中使用某个名字设定特定的值,或者设定某个已经存在的javabean对象的属性。他类似于<%request.setAttrbute("name","value");%> ?
?
语法 :?
语法1:?没有body
将value的值存储至范围为scope的varName变量之中
<c:set?value="value"?var="varName"?[scope="{page|request|session|application}"]/>
语法2:?有body
将body内容存储至范围为scope的varName变量之中
<c:set?value="value"?[scope="{page|request|session|application}"]>
?body.....
</c:set>
语法3:?将value的值存储至target对象属性中
<c:set?value="value"?target="target"?property="propertyNmae"/>
语法4:?将body内容的数据存储至target对象属性中
<c:set?target="target"?property="propertyNmae">
?body....
</c:set>
语法3和语法4会产生异常错误,有以下两种情况:
?.target?为null
?.target?不是java.util.Map或JavaBean对象
假若value为null时:将由存储变量改为移除变量
?.语法1:?由var和scope所定义的变量,将被移除
???.若scope已指定时,则PageContext.removeAttribute(varName,scope);
???.若scope未指定时,则PageContext.removeAttribute(varName);
?.语法3:?
???.假若target为Map时,则Map.remove(property);
???.假若target为JavaBean时,propertye指定的属性为null
注意:?var和scope这两个属性不能使用表达式来表示,我们不能写成?scope="${ourScope}"或var="${a}"
?
?
属性 :
属性名
描述
类型
是否接受动态值
是否支持 EL
是否
必须
默认值
说明
value
要被存储的值?
Object
true
Y
否
无
?
被计算的表达式
var
变量名
String
false
N
否
无
?
被导出的保存了value属性计算结果的范围变量的名称
scope
范围
String
true
N
否
page
var的JSP范围
target
目标?对象
String
true
Y
否
无
?
要设置属性的对象。必须是JavaBean对象或java.util.Map对象
property
指定target对象属性
Object?
true
Y
否
无
?
要设置的target对象的属性的名称
?
实例 :
------------------------------------------------------------------
Example1
<c:set?value="this?is?andy"?var="oneString"/>
该示例将为名为“oneString”的变量赋值为“this?is?andy”,其作用范围为page。
------------------------------------------------------------------
Example2
<c:set?target="${cust.address}"?property="city"?value="$"/>?
将对象cust.address的city属性值保存到变量city中。
------------------------------------------------------------------
Example3
设置不同的属性,并且指定它们的范围:
<c:set?value="10000"?var="maxUser"?scope="application"/>
<c:set?value="20"?var="maxIdelTime"?scope="session"/>
<c:set?value="next.jsp"?var="nextPage"?scope="page"/>
------------------------------------------------------------------
Example4
<c:set?var="bid"?value="${param.bookId}"/>?
<jsp:setProperty?name="bookDB"?property="bookId"???value="${bid}"?/>
------------------------------------------------------------------
Example5
<%?Foo?foo?=?new?Foo();?pageContext.setAttribute("foo",?foo);?%>
<c:out?value="${foo.date}"/><br>?<c:set?target="${foo}"?property="day"?value="1"/>?
<c:out?value="${foo.date}"/>?
------------------------------------------------------------------
?
?
3. ??<c:remove>
库 :Core(核心库)
?
URI : http://java.sun.com/jsp/jstl/core
?
前缀 : c?
?
描述 : <c:remove>标签用于删除存在于scope中的变量。 类似于 <%session.removeAttribute(“name”)%>? 、
<%request.removeAttribute(“name”)%>...
语法 :?
<c:remove?var="varName"?[scope="{page|request|session|application}"]/>
?
属性 :
属性名
描述
类型
是否接受动态值
是否支持 EL
是否
必须
默认值
说明
var
变量名
String
N
N
是
无
欲移除变量的名称
scope
范围
String
N
N
否
page
var变量的JSP范围;?若没有指定,默认为全部查找
?
------------------------------------------------------------------
实例 :
Example1
<c:remove?var="sampleValue"?scope="session"/>
${sessionScope.sampleValue}
------------------------------------------------------------------
Example2
<c:remove?var="username"?scope="session"/>
将username变量从session范围移除。若我们不设定scope,则<c:remove>会移除所有范围名称为username
的数据。
------------------------------------------------------------------
4. <c:catch>
?
库 :Core(核心库)
?
URI : http://java.sun.com/jsp/jstl/core
?
前缀 : c?
?
描述 : <c:catch>动作用于捕获JSP元素在其体中抛出的异常,从而提供细粒度的错误控制, ? 此异常也可以保存为一个页面作用域变量。当错误发生<c:catch>和</c:catch>之间时,只有<c:catch>和</c:catch>之间的程序会被中止忽略,但整个网页不会被中止。 它包含一个var属性,是一个描述异常的变量,该变量可选。若没有var属性的定义,那么仅仅捕捉异常而不做任何事情,若定义了var属性,则可以利用var所定义的异常变量进行判断转发到其他页面或提示报错信息。
?
语法 :?
<c:catch?[var="var"]>?
//可能发生错误的部分
JSP?elements?
</c:catch>?
?
属性 : ????
?
属性名
描述
类型
是否接受动态值
是否支持 EL
是否
必须
默认值
说明
var?
变量名
String?
N
N
N
无
用来存储错误信息的变量
?
实例 :
------------------------------------------------------------------
Example1
<c:catch?var="importException">?
<fmt:parseDate?value="${param.empDate}"?dateStyle="short"?/>?
</c:catch>?
<c:if?test="${importException?!=?null}">?
<jsp:forward?page="input.jsp">?
<jsp:param?name="msg"?value="Invalid?date?format"?/>?
</jsp:forward>?
</c:if>?
------------------------------------------------------------------
Example2
<c:catch?var="err">
?????????${param.sampleSingleValue[9]?==?3}
</c:catch>?
${err}
当“${param.sampleSingleValue[9]?==?3}”表达式有异常时,可以从var属性“err”得到异常的内容,通常判断“err”是否为null来决定错误信息的提示。
------------------------------------------------------------------
5. <c:if>
库 :Core(核心库)
?
URI : http://java.sun.com/jsp/jstl/core
?
前缀 : c?
?
描述 : <c:if>动作仅当所指定的表达式计算为true时才计算其体。计算结果也可以保存为一个作用域Boolean变量。?
?
语法 :
语法1:没有体?
<c:if?test=" booleanExpression? "?
?var=" var? "?[scope=" page ? |request|session|application"]/>?
语法2:有体?
<c:if?test=" booleanExpression ">
? JSP?elements
</c:if>
?
?
?
?
?
?
?
?
属性 :
属性名
描述
类型
是否接受动态值
是否支持 EL
是否
必须
默认值
说明
test?
测试表达式?
boolean?
Y?
?
Y
是
无
如果表达式的结果为true则执行body,false则相反
var?
变量名
String?
N
N
否
无
用来存储test运算后的结果,即true或false??????????????????????????
scope?
变量作用域
String?
N
N
否
page
var变量的JSP范围
?
?
实例 :
<c:if?test="${empty?param.empDate}">?
<jsp:forward?page="input.jsp">?
<jsp:param?name="msg"?value="Missing?the?Employment?Date"?/>?
</jsp:forward>
?</c:if>
?
?
6. <c:choose>
库 :Core(核心库)
?
URI : http://java.sun.com/jsp/jstl/core
?
前缀 : c?
?
描述 : <c:choose>动作用于控制嵌套<c:when>和<c:otherwise>动作的处理,它只允许第一个测试表达式计算为true的<c:when>动作得到处理;如果所有<c:when>动作的测试表达式都计算为false,则会处理一个<c:otherwise>动作。<c:choose>标签没有属性,可以被认为是父标签,<c:when>、<c:otherwise>将作为其子标签来使用。
?
语法 :
<c:choose>
body(<when>和<otherwise>)
</c:choose>
限制:
<c:choose>的本地内容只能有:
?.空白
?.1或多个<c:when>
?.0或多个<c:otherwise>
?
属性 :
无
实例 :
----------------------------------------------------------------
Example1
<c:choose>?
<c:when?test="${product.onSale}">?
${product.salesPrice}?On?sale!?
</c:when>?
<c:otherwise>?
${product.price}?
</c:otherwise>?
</c:choose>?
---------------------------------------------------------------
Example2
<c:choose>
?<c:when?test="${condition1}">
??condition1?为?true
?</c:when>
?<c:when?test="${condition2}">
??condition2?为?true
?</c:when>
?<c:otherwise>
??condition1和conditon2都为false
?</<c:otherwise?>
说明:
在同一个<c:choose>中,假如所有的<c:when>的test都不为true时,则执行<c:otherwise>的本体内容。
在同一个<c:choose>中,假若有好几个<c:when>都会true时,只能有一个<c:when>成立。
</c:choose>
----------------------------------------------------------------
?
?
7. <c:when>
库 :Core(核心库)
?
URI : http://java.sun.com/jsp/jstl/core
?
前缀 : c?
?
描述 :<c:when>标签等价于“if”语句,它包含一个test属性,该属性表示需要判断的条件。
?
语法 :
<c:when?test="testCondition">
Body?content
</c:when>
属性 :
属性名
描述
类型
是否接受动态值
是否支持 EL
是否
必须
默认值
说明
test
测试表达式
boolean
Y
Y
是
无
如果表达式的结果为true则执行body,false则相反 ?
?
实例 :
?
8. <c:otherwise>
库 :Core(核心库)
?
URI : http://java.sun.com/jsp/jstl/core
?
前缀 : c?
?
描述 :<c:otherwise>标签没有属性,它等价于“else”语句。
?
语法 :
<c:otherwise>
conditional?block
</c:otherwise>
?
属性 :
无
实例 :
?
<c:choose>、<c:when>、<c:otherwise>标签 综合实例
<c:choose>
?????????<c:when?test="${paramValues.sampleValue[2]?==?11}">
???????????????????not?12?not?13,it?is?11
?????????</c:when>
?????????<c:when?test="${paramValues.sampleValue[2]?==?12}">
???????????????????not?11?not?13,it?is?12
?????????</c:when>
?????????<c:when?test="${paramValues.sampleValue[2]?==?13}">
???????????????????not?11?not?12,it?is?13
?????????</c:when>
?????????<c:otherwise>
???????????????????not?11?、12、13
?????????</c:otherwise>
</c:choose>
?
9. <c:forEach>
库 :Core(核心库)
?
URI : http://java.sun.com/jsp/jstl/core
?
前缀 : c?
?
描述 : <c:forEach>动作将其体反复计算固定次数,或者针对一个集合中的每个元素分别计算一次体。当前元素(如果未指定集合则为当前索引)和迭代状态可以通过嵌套变量提供给体中的动作元素。?
此动作接受属性表中所列的类型集合。当前元素的类型即为底层集合的类型,仅有两个例外。对于一个基本类型的数组,当前元素将作为相应包装类(Integer、Float等等)的一个实例提供。对于一个java.util.Map,当前元素则作为一个java.util.Map.Entry提供。
?
语法 :
语法1:基于集合元素进行迭代 ?
<c:forEach?items="collection"?[var="var"]?[varStatus="varStatus"]?
[begin="startIndex"]?[end="stopIndex"]?[step="increment"]>?
JSP?elements?
</c:forEach>?
语法2:迭代固定次数?
<c:forEach?[var="var"]?[varStatus="varStatus"]?
begin="startIndex"?end="stopIndex"?[step="increment"]>?
JSP?elements?
</c:forEach>?
?
?
?
?
?
?
?
?
?
?
?
?
属性 :
?
属性名
描述
类型
是否接受动态值
是否支持 EL
是否
必须
默认值
说明
begin?
开始位置
int?
Y
Y
否
0
结合集合使用时的开始索引,从0计起。对于集合来说默认为0?
end?
结束位置
int?
Y
Y
否
最后一个成员
结合集合使用时的结束索引(元素引要小于等于此结束索引),从0计起。默认为集合的最后一个元素。如果end小于begin,则根本不计算体集合,迭代即要针对此集合进行。
items?
被迭代的集合对象
Collection,?
Iterator,?Enumeration,?
Map,?
数组
Y
Y
否
无
?
集合,迭代即要针对此集合进行。
step?
步长
int?
Y
Y
?
1
每次迭代时索引的递增值。默认为1。
var
当前项目
String?
N
N
否
无
保存当前元素的嵌套变量的名字。
varStatus?
循环状态
String?
N
N
否
无
保存LoopTagStatus对象的嵌套变量的名字。
?
Null?和?错误处理
.假若items为null时,则表示为一空的集合对象
.假若begin大于或等于items时,则迭代不运算
注意:
varName的范围只存在<c:forEach>的本体中,如果超出了本题,则不能取得varName的值。如:
<c:forEach?items="${atts}"?var="item">
</c:forEach>
${item}</br>
${item}则不会显示item的内容。<c:forEach>除了支持数组之外,还有标准的J2SE的结合类型,例如:
ArrayList,List,LinkedList,Vector,Stack和Set等等;另外包括java.util.Map类的对象,例如:
HashMap,Hashtable,Properties,Provider和Attributes。
另外<c:forEach>还提供了varStatus属性,主要用来存放现在指到成员的相关信息。例如:我们写成
varStatus="s",那么就会把信息存放到名称为s的属性当中。varStatus属性还提供另外四个属性:index,
count,fist和last,它们个自的意义如下:
?
属性???????????????????类型??????????????????????????????????意义
??index??????????????????number????????????????????现在指到成员的索引
??count??????????????????number????????????????????总共指到成员的总和
??first???????????????????boolean????????????????????现在指到成员是否为第一个
??last????????????????????boolean???????????????????现在指到成员是否为最后一个
?
?
实例 :
----------------------------------------------------------------
Example1
< %@page ?contentType="text/html;charset=gb2312"%>
< %@taglib ?prefix="c"?uri=" http://java.sun.com/jsp/jstl/core"% >
<%
?String?atts[]?=?new?String[5];
?atts[0]="hello";
?atts[1]="this";
?atts[2]="is";
?atts[3]="a";
?atts[4]="girl";
?request.setAttritue("atts",atts);
%>
<c:forEach?items="${atts}"?var="item"?varStatus="s">
<h2><c:out?value="${item}"/>的四种属性></h2>
?index:?${s.index}</br>
?count:?${s.count}</br>
?first:?${s.first}</br>
?last:?${s.last}</br>?
</c:forEach>
----------------------------------------------------------------
Example2
综合实例
< select > ??? ? ?
?? < c:forEach? items = " ${model.options} " ? var = "forum" >
? ??? < c:choose >
???? ??? < c:when? test = " ${forum.id?==?model.forumId} " >
???? ????? < option? value = " ${forum.id} " ? elected > ${forum.name} </ option >
???? ???? </ c:when >
???? ? < c:otherwise >
???? ? ?? < option? value = " ${forum.id} " > ${forum.name} </ option >
???? ? </ c:otherwise >
???? </ c:choose >
?? </ c:forEach > ?
</ select >
?
Example3
奇偶行样式
<c:forEach?items="${model.page.list}"?var="observer"?varStatus="loop">?
??< tr?style="text-align: left;">????<td>迭代observer</td>
????<td>迭代observer</td>
????...
??</tr>
</c:forEach>
?
Example4
分页条1
< c:set? var = "page"? value = " ${model.page} " ></ c:set >
< table? width = "800"? align = "center"? cellpadding = "0"? cellspacing = "0" > ?
?? < tr? class = "even" >
???? < td? height = "20"? align = "center"? colspan = "3"? valign = "top" > ?????????????? ?
???? ? < a? href = "javascript:page(1)"? class = "gr_pages" > 首页 </ a > ? ?
? ? < c:if? test = " ${page.currentPage?>?1} " >
? ? ? < a? href = " javascript:page( < c:out ? value = " ${page.currentPage?-1?} " ? /> ) " ? class = "gr_pages" > 上页 </ a >
? ? </ c:if > ? ? ? ? ? ?????? ?
? ? < c:if? test = " ${page.currentPage?<?page.totalPage} " >
? ? < a? ? href = " javascript:page( < c:out ? value = " ${page.currentPage?+1?} " ? /> ) " ? class = "gr_pages" > 下页 </ a >
? ? </ c:if > ?
? ? < a? href = " javascript:page( < c:out ? value = " ${page.totalPage} " ? default = "1" ? /> ) " ? class = "gr_pages" > 末页 </ a >
? ? 当前第 < c:out? value = " ${page.currentPage} " ? /> / < c:out? value = " ${page.totalPage} " ? /> 页?????
???? </ td >
?? </ tr >
</ table >
?
Example5
分页条2
< div? align = "center" >< span? class = "all_font12" > ? < a
? ? ? href = " jsp/vote/voteAreaService.do?method=listVote¤tPage=1&subareaCode= ${param.subareaCode} " ? class = "gr_pages" > ?首页? </ a > ? ? < c:if
? ? ? test = " ${page.currentPage?>?1?} " >
? ? ? < a
? ? ? ? href = " jsp/vote/voteAreaService.do?method=listVote¤tPage= ${page.currentPage?-?1} &subareaCode= ${param.subareaCode} "
? ? ? ? class = "gr_pages" > ?前页? </ a > ?
? ? ? ?? </ c:if > ? < a
? ? ? href = " jsp/vote/voteAreaService.do?method=listVote¤tPage= ${page.currentPage} &subareaCode= ${param.subareaCode} " >
? ? ? < c:out? value = " ${page.currentPage} " ? /></ a > ? ?
? ? ? < c:if
? ? ? test = " ${page.currentPage?+?1?<=?page.totalPage} " >
? ? ? < a
? ? ? ? href = " jsp/vote/voteAreaService.do?method=listVote¤tPage= ${page.currentPage?+?1} &subareaCode= ${param.subareaCode} " >< c:out
? ? ? ? value = " ${page.currentPage?+?1} " ? /></ a > ?
? ? ? ?? </ c:if > ? < c:if? test = " ${page.currentPage?+?2?<=?page.totalPage} " >
? ? ? < a
? ? ? ? href = " jsp/vote/voteAreaService.do?method=listVote¤tPage= ${page.currentPage?+?2} &subareaCode= ${param.subareaCode} " >< c:out
? ? ? ? value = " ${page.currentPage?+?2} " ? /></ a > ?
? ? ? ?? </ c:if > ? < c:if? test = " ${page.currentPage?+?3?<=?page.totalPage} " >
? ? ? < a
? ? ? ? href = " jsp/vote/voteAreaService.do?method=listVote¤tPage= ${page.currentPage?+?3} &subareaCode= ${param.subareaCode} " >< c:out
? ? ? ? value = " ${page.currentPage?+?3} " ? /></ a > ?
? ? ? ?? </ c:if > ? < c:if? test = " ${page.currentPage?<page.totalPage} " >
? ? ? < a
? ? ? ? href = " jsp/vote/voteAreaService.do?method=listVote¤tPage= ${page.currentPage?+?1} &subareaCode= ${param.subareaCode} "
? ? ? ? class = "gr_pages" > 后页 </ a > ?
? ? ? ?? </ c:if > ? < a
? ? ? href = " jsp/vote/voteAreaService.do?method=listVote¤tPage= ${page.totalPage} &subareaCode= ${param.subareaCode} "
? ? ? class = "gr_pages" > 末页 </ a > ? < a > 当前第 < c:out
? ? ? value = " ${page.currentPage} " ? /> / < c:out
? ? ? value = " ${page.totalPage} " ? /> 页 </ a ></ span ></ div >
?
Example6
综合实例
<%@??page??import="java.util.Map"??%>?
<%@??page??import="java.util.HashMap"??%>?
<%@??taglib??prefix="c"??uri="http://java.sun.com/jsp/jstl/core"??%>?
?
<%?
??Map??map??=??new??HashMap();?
??map.put("a",??"12345");?
??map.put("b",??"abcde");?
??out.println(map.get("a"));?
??request.setAttribute("map",map);?
%>?
<!--? 完全迭代? -->
<c:forEach??items="${map}"??var="mymap"??>?
????<c:out??value="${mymap.key}"??/>?
????<c:out??value="${mymap.value}"??/>?
</c:forEach>?
<!--?根据map的key来找到特定的值?-->
<c:forEach????items="${map}"????var="mymap">??
??????<c:if????test="${mymap.key=='a'}">??
??????????<c:out????value="${mymap.value}"/>??
??????</c:if>??
</c:forEach>?????
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
10. <c:forTokens>
库 :Core(核心库)
?
URI : http://java.sun.com/jsp/jstl/core
?
前缀 : c?
?
描述 : 标签可以根据某个分隔符分隔指定字符串,相当于?java.util.StringTokenizer ?类。
?
语法 :
<c:forTokens?items="stringFoTokens"?delims="delimmmmiters"?[var="varName"]
????????????[varStatus="varStatusName"]?[begin="begin"]?[end="end"]?[step="step"]>
?...body内容....
</c:forTokens>
?
属性 :
?
属性名
描述
类型
是否接受动态值
是否支持 EL
是否
必须
默认值
说明
var
变量名
String?
false
Y
否
无
用来存放现在指到的成员
items
被迭代的字符串
String?
true
Y
是
无
被迭代的字符串
?
delims
分隔符
String?
true
N
是
无
定义用来分割字符串的字符
varStatus
循环状态变量
String?
false
N
?
否
?
无
用来存放现在指到的相关成员信息
begin
开始条件
int
true
Y
否
0
开始的位置
end
?
结束条件
int
true
Y
否
最后一个成员
?
结束的位置
step
步长
int
true
Y
否
1
?
每次迭代步长
?
限制:
.假若有begin属性时,begin必须大于等于0
.假若有end属性时,必须大于begin
.假若有step属性时,step必须大于等于1
Null?和?错误处理
.假如itmes为null时,则表示为有空的集合对象
.假若begin大于等于items的大小时,则迭代不运算
?
实例 :
?
<c:forToken?items="A,B,C,D,E,F,G"?delims=","?var="item>
${item}
</c:forToken>
items属性也可以用EL,例如:
<%
?String?phonenumber="123-456-7899";
?request.setAttribute("userPhone",phonenumber);
%>
<c:forTokens?items="${userPhone}"?delims="-"?var="item">
${item}
</c:forTokens>
?
11. <c:import>
库 :Core(核心库)
?
URI : http://java.sun.com/jsp/jstl/core
?
前缀 : c?
?
描述 : 标签允许包含另一个?JSP ?页面到本页面来。jsp有两种内置机制可以将来自不同?URL?的内容合并到一个?JSP?页面:include?伪指令和?<jsp:include>?操作。不过,不管是哪种机制,要包含的内容都必须属于与页面本身相同的?Web?应用程序(或?servlet?上下文)。两个标记之间的主要区别在于:?include?伪指令在页面编译期间合并被包含的内容,而?<jsp:include>?操作却在请求处理?JSP?页面时进行。?
core?库的?<c:import>和?<jsp:include>?一样,?<c:import>?也是一种请求时操作,它的基本任务就是将其它一些?Web?资源的内容插入?JSP?页面中。?通过?url?属性指定将要导入内容的?URL,这个属性是?<c:import>?的唯一一个必选属性。这里允许使用相对?URL,并且根据当前页面的?URL?来解析这个相对?URL。但是,如果?url?属性的值以斜杠开始,那么它就被解释成本地?JSP?容器内的绝对?URL。如果没有为?context?属性指定值,那么就认为这样的绝对?URL?引用当前?servlet?上下文内的资源。如果通过?context?属性显式地指定了上下文,那么就根据指定的?servlet?上下文解析绝对(本地)URL。?但?<c:import>?操作并不仅仅限于访问本地内容。也可以将包含协议和主机名的完整?URI?指定为?url?属性的值。实际上,协议甚至不仅局限于?HTTP。?<c:import>?的?url?属性值可以使用?java.net.URL?类所支持的任何协议。
?
语法 :
语法1:资源的内容使用String对象向外暴露?
<c:import?url="url"?[context="context"]?
[var="varName"]?[scope="{page|request|session|application}"]?[charEncoding="charEncoding"]>?
内容?
</c:import>?
语法2:资源的内容使用Reader对象向外暴露。?
<c:import?url="url"?[context="context"]?
varReader="varReaderName"?[charEncoding="charEncoding"]>?
内容?
</c:import>?
?
属性 :
属性名
描述
类型
是否接受动态值
是否支持 EL
是否
必须
默认值
说明
url
统一资源定位器
String
true
Y
是
无
待导入资源的URL,可以是相对路径和绝对路径,并且可以导入其他主机资源?
context?
上下文
String
true
Y
否
无
当使用相对路径访问外部context资源时,context指定了这个资源的名字。
var??
变量
String
false
N
否
无
参数的名字。
scope?
范围
String
false
N
否
page
var参数的作用范围。
cahrEncoding
字符编码
String
true
Y?
否
无
输入资源的字符编码。
varReader
资源 阅读器
String
false
N
否
无
?这个参数的类型是Reader,用于读取资源。
?
说明?
<c:import>中必须要有?url?属性,它是用来设定被包含网页的地址。它可以为绝对地址或是相对地址.?
<c:import>也支持FTP协议,假设现在有一个?FTP站台,地址为?ftp.javaworld.com.tw,它里面有一个文件data.txt,那么可以写成如下方式将其内容显示出来:?
<c:import?url="ftp://ftp.cse.yzu.edu.tw/data.txt"?/>?
另外,可以在<c:import>的本体内容中使用<c:param>,它的功用主要是:可以将参数传递给被包含的文件,它有两个属性name和value.如:?
<c:import?url="http://java.sun.com"?>?
<c:param?name="test"?value="1234"?/>?
</c:import>?
这样的做法等于是包含一个文件,并且所指定的网址会变成如下:?
http://java.sun.com?test=1234?
?
实例 :
----------------------------------------------------------------
Example1
<c:catch?var="exception">
??<c:import?url="ftp://ftp.example.com/package/README"/>
</c:catch>
<c:if?test="${not?empty?exception}">
??Sorry,?the?remote?content?is?not?currently?available.
</c:if>
<c:import>?操作用来包含通过?FTP?协议访问的文档内容。此外,还使用了?<c:catch>?操作,以便在本地处理?FTP?文件传送期间可能发生的任何错误。错误处理是这样实现的:使用?<c:catch>?的?var?属性为异常指定一个限定了作用域的变量,然后使用?<c:if>?检查其值。如果产生了异常,那么就会对那个限定了作用域的变量进行赋值:如清单?18?中的?EL?表达式所显示的那样,该变量的值将?不会为空。由于?FTP?文档的检索将会失败,因此会显示有关这种情况的错误消息。<c:import>?操作的最后两个(可选的)属性是?var?和?scope?。?var?属性会导致从指定?URL?获取的内容(作为?String?值)被存储在一个限定了作用域的变量中,而不是包含在当前?JSP?页面中。?scope?属性控制该变量的作用域,缺省情况下是页面作用域。如同我们在今后的文章中将要看到的那样,JSTL?xml?库中的标记利用了?<c:import>?这种能力,即将整个文档存储在一个限定了作用域的变量中。?
?
还要注意的是,可以使用(可选的)嵌套的?<c:param>?标记来为正在导入的?URL?指定请求参数。与在?<c:url>?中嵌套?<c:param>?标记一样,必要时也要对参数名称和参数值进行?URL?编码。
----------------------------------------------------------------
Example2
<c:import?url="/MyHtml.html"?var="thisPage"?/> ?
<c:import?url="/MyHtml.html"?context=”/sample2”?var="thisPage"/> ?
<c:import?url="www.sample.com/MyHtml.html"?var="thisPage"/> ?
该示例演示了三种不同的导入方法,第一种是在同一?Context?下的导入,第二种是在不同的?Context?下导入,第三种是导入任意一个?URL?。
---------------------------------------------------------------
?
12. <c:url>
库 :Core(核心库)
?
URI : http://java.sun.com/jsp/jstl/core
?
前缀 : c?
?
描述 : 主要用来产生一个URL。
?
语法 :
语法1:没有本体内容?
<c:url?value="value"?[context="context"]?[var="varName"]?
[scope="{page|request|session|application}"]?/>?
语法2:本体内容代表查询字符串(Query?String)参数?
<c:url?value="value"?[context="context"]?[var="varName"]?
[scope="{page|request|session|application}"]?>?
<c:param>?标签?
</c:url>?
?
属性 :
属性名
描述
类型
是否接受动态值
是否支持 EL
是否
必须
默认值
说明
value?
?
String?
true
Y
是
无
执行的URL?
context?
?
String?
true
Y
否
无
相同Container下,其他web站台必须以“/”开头
var?
?
String?
false
N?
否
无
储存被包含文件的内容(以String?类型存入)?
scope?
?
String?
false
N?
否
page
var变量的JSP范围
?
?
实例 :
<c:url?value="http://www.javafan.net?"?>?
<c:param?name="param"?value="value"/>?
</c:url>?
上面执行结果将会产生一个网址为http://www.javafan.net?param=value,我们更可以搭配?HTML?的<a>使用,如下:?
<a?href="?
<c:url?value="http://www.javafan.net?"?>?
<c:param?name="param"?value="value"/>?
</c:url>">Java爱好者</a>?
如果<c:url>有?var属性时,则网址会被存到?varName中,而不会直接输出网址。?
?
13. <c:redirect>
库 :Core(核心库)
?
URI : http://java.sun.com/jsp/jstl/core
?
前缀 : c?
?
描述 : 可以将客户端的请求从一个?JSP?网页导向到其他文件。
?
语法 :
语法1:没有本体内容?
<c:redirect?url="url"?[context="context"]?/>?
语法2:本体内容代表查询字符串(Query?String)参数?
<c:redirect?url="url"?[context="context"]?>?
<c:param>?
</c:redirect?>?
?
属性 :
属性名
描述
类型
是否接受动态值
是否支持 EL
是否
必须
默认值
说明
url
统一资源定位器
String?
?
true
Y
是
无
导向的目标地址,它可以是相对或绝对地址。
?
context?
上下文
String?
true
Y
否
无
相同Container下,其他web站台必须以“/”开头
?
实例 :
<c:redirect>?的功能不止可以导向网页,同样它还可以传递参数给目标文件。如:?
<c:redirect?url="http://java.sun.com">?
<c:param?name="param"?value="value"/>?
</c:redirect>?
?
14. <c:param>
库 :Core(核心库)
?
URI : http://java.sun.com/jsp/jstl/core
?
前缀 : c?
?
描述 :用于传递参数,用来为包含或重定向的页面传递参数。
?
语法 :
?
属性 :
属性名
描述
类型
是否接受动态值
是否支持 EL
是否
必须
默认值
说明
name
参数名
String?
?
true
Y
是
无
传递的参数名
?
value
参数值
String?
true
Y
否
无
传递的参数值(可选)
?
?
实例 :
<c:redirect?url="/MyHtml.jsp">
<c:param?name="userName"?value=”RW”?/>
</c:redirect>
该示例将为重定向的“MyHtml.jsp”传递指定参数“userName=’RW’”。