JSTL 全名为Java Server Pages Standard Tag Library(JSP Standard Tag Library),它的中文名称为JSP 标准标签函数库。
Web 程序开发人员能够利用JSTL和EL来开发Web 程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序可读性、维护性和方便性。
JSTL是一个标准的已制定好的标签库,可以应用于各种领域,如:基本输入输出、流程控制、循环、XML文件剖析、数据库查询及国际化和文字格式标准化的应用等。JSTL所提供的标签函数库主要分为五大类:
(1)核心标签库 (Core tag library)
(2)I18N 格式标签库 (I18N-capable formatting tag library)
(3)SQL 标签库 (SQL tag library)
(4)XML 标签库 (XML tag library)
(5)函数标签库 (Functions tag library)
若要在JSP 网页中使用JSTL ,一定要先做下面这行声明:
< %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
核心标签库 (Core tag library)
Core 标签库,又被称为核心标签库,该标签库的工作是对于 JSP 页面一般处理的封装。在该标签库中的标签一共有 14 个,被分为了四类,分别是:
通用核心标签: <c:out> 、 <c:set> 、 <c:remove> 、 <c:catch> 。
条件控制标签: <c:if> 、 <c:choose> 、 <c:when> 、 <c:otherwise> 。
循环控制标签: <c:forEach> 、 <c:forTokens> 。
URL 相关标签: <c:import> 、 <c:url> 、 <c:redirect> 、 <c:param> 。
<c:out>
<c:out>主要用来显示数据的内容,就像是 <%= scripting-language %> 一样,例如:Hello ! <c:out value="${username}" />
语法
语法1:没有本体(body)内容
<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />
语法2:有本体内容
<c:out value="value" [escapeXml="{true|false}"]>
注意
表格中的EL字段,表示此属性的值是否可以为EL 表达式,例如:Y表示 attribute = "${表达式}"为符合语法的,N 则反之。
Null 和错误处理
· 假若 value为null,会显示default 的值;假若没有设定default的值,则会显示一个空
的字符串。
说明
一般来说,<c:out>默认会将 <、>、’、” 和 & 转换为 <、>、'、" 和 &。
假若不想转换时,只需要设定<c:out>的escapeXml 属性为fasle 就可以了。
范例
<c:out value="Hello JSP 2.0 !! " />
<c:out value="${ 3 + 5 }" />
<c:out value="${ param.data }" default="No Data" />
<c:out value="<p>有特殊字符</p>" />
<c:out value="<p>有特殊字符</p>" escapeXml="false" />
1.在网页上显示 Hello JSP 2.0 !! ;
2.在网页上显示 8;
3.在网页上显示由窗体传送过来的data 参数之值,假若没有data 参数,或data 参数的值为null 时,则网页上会显示No Data;
4.在网页上显示“<p>有特殊字符</p>”;
5.在网页上显示“有特殊字符”。
<c:set>
<c:set>主要用来将变量储存至JSP范围中或是JavaBean的属性中。
语法
语法1:将 value 的值储存至范围为scope 的 varName 变量之中
<c:set value="value" var="varName" [scope="{ page|request|session|application }"]/>
语法2:将本体内容的数据储存至范围为scope 的 varName 变量之中
<c:set var="varName" [scope="{ page|request|session|application }"]>
… 本体内容
</c:set>
语法3:将 value 的值储存至 target 对象的属性中
< c:set value="value" target="target" property="propertyName" />
语法4:
将本体内容的数据储存至 target 对象的属性中
<c:set target="target" property="propertyName">
… 本体内容
</c:set>
范例
<c:set var="number" scope="request" value="${1 + 1}" />
<c:set var="number" scope="session" />
${3 + 5}
</c:set>
<c:set var="number" scope="request" value="${ param.number }" />
<c:set target="User" property="name" value="${ param.Username}" />
1.将2 存入Request 范围的number 变量中;
2.将8 存入Session 范围的number 变量中;<c:set>是把本体(body)运算后的结果来当做value的值。
3.假若 ${param.number}为null 时,则移除Request 范围的number 变量;若${param.number}不为null 时,则将 ${param.number}的值存入Request 范围的number 变量中;
4.假若 ${param.Username}为null 时,则设定User(JavaBean)的name 属性为null;若不为
null 时,则将 ${param.Username}的值存入User(JavaBean)的name 属性(setter 机制)。
注意
上述范例的3.中,假若 ${param.number}为null时,则表示移除Request范围的number变量。
<c:remove>
<c:remove>主要用来移除变量。
语法
<c:remove var="varName" [scope="{ page|request|session|application }"] />
page
说明
<c:remove>必须要有var 属性,即要被移除的属性名称,scope 则可有可无,例如:
<c:remove var="number" scope="session" />
将number 变量从Session 范围中移除。若我们不设定scope,则<c:remove>将会从Page、
Request、Session 及Application 中顺序寻找是否存在名称为number 的数据,若能找到时,则将它移除掉,反之则不会做任何的事情。
注意:当不指定scope时,回remove掉从 page到application的var指定的变量
<c:catch>
<c:catch>主要用来处理产生错误的异常状况,并且将错误信息储存起来。
语法
<c:catch [var="varName"] >
… 欲抓取错误的部分
</c:catch>
说明
<c:catch>主要将可能发生错误的部分放在<c:catch>和</c:catch>之间。如果真的发生错
误,可以将错误信息储存至varName 变量中,例如:
<c:catch var="message">
: //可能发生错误的部分
</c:catch>
另外,当错误发生在<c:catch>和</c:catch>之间时,则只有<c:catch>和</c:catch>之间的程序
会被中止忽略,但整个网页不会被中止。
<c:if>
<c:if>的用途就和我们一般在程序中用的if 一样。
语法
语法1:没有本体内容(body)
<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]/>
语法2:有本体内容
<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>
具体内容
</c:if>
page
<c:choose>
<c:choose>本身只当做 <c:when> 和 <c:otherwise> 的父标签。
语法
<c:choose>
本体内容( <when> 和 <otherwise> )
</c:choose>
限制
<c:choose>的本体内容只能有:
·空白
·1 或多个 <c:when>
·0 或多个 <c:otherwise>
说明
若使用<c:when>和<c:otherwise>来做流程控制时,两者都必须为<c:choose>的子标签.
<c:when>
<c:when>的用途就和我们一般在程序中用的when 一样。
语法
<c:when test="testCondition" >
本体内容
</c:when>
☆ <c:when>必须在<c:choose>和</c:choose>之间
☆ 在同一个<c:choose>中时,<c:when>必须在<c:otherwise>之前
说明
<c:when>必须有test 属性,当test中的表达式结果为true时,则会执行本体内容;如果为
false时,则不会执行。
<c:otherwise>
在同一个 <c:choose> 中,当所有 <c:when> 的条件都没有成立时,则执行<c:otherwise> 的
本体内容。
语法
<c:otherwise>
本体内容
</c:otherwise>
<c:forEach>
<c:forEach> 为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当
条件符合时,就会持续重复执行<c:forEach>的本体内容。
语法1:迭代一集合对象之所有成员
<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"][end="end"] [step="step"]>
本体内容
< /c:forEach>
语法2:迭代指定的次数
<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end"
[step="step"]>
本体内容
</c:forEach>
限制
·假若有begin 属性时,begin 必须大于等于 0
·假若有end 属性时,必须大于begin
·假若有step 属性时,step 必须大于等于0
Null 和错误处理
·假若items 为null 时,则表示为一空的集合对象
·假若begin 大于或等于items 时,则迭代不运算
Code
<%@ page contentType="text/html;charset=GB2312 " %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>CH7 - Core_forEach.jsp</title>
</head>
<body>
<h2><c:out value="< c:forEach> 的用法" /></h2>
<%
String atts[] = new String [5];
atts[0]="hello";
atts[1]="this";
atts[2]="is";
atts[3]="a";
atts[4]="pen";
request.setAttribute("atts", atts);
%>
<c:forEach items="${atts}" var="item" >
${item}</br>
</c:forEach>
</body>
</html>
<c:forEach>除了支持数组之外,还有标准J2SE 的集合类型,例如:ArrayList、List、
LinkedList、Vector、Stack和Set 等等;另外还包括java.util.Map 类的对象.
<c:forEach>并不只是用来浏览集合对象而已,读者可以从语法2中发现,items并不存在
,但是当没有使用items 属性时,就一定要使用begin 和end 这两个属性。
Code
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>CH7 - Core_forEach2.jsp</title>
</head>
<body>
<h2><c:out value="< c:forEach> 循环" /></h2>
<c:forEach begin="1" end="10" var="item" >
${item}</br>
</c:forEach>
</body>
</html>
上述范例中,我们并没有执行浏览集合对象,只是设定begin 和end 属性的值,这样它就
变成一个普通的循环。此范例是将循环设定为:从1 开始跑到10,总共会重复循环10 次,并
且将数字放到item 的属性当中.
begin主要用来设定在集合对象中开始的位置(注意:第一个位置为0);end 用来设定结束的位置;而step 则是用来设定现在指到的成员和下一个将被指到成员之间的间隔.
另外,<c:forEach>还提供varStatus 属性,主要用来存放现在指到之成员的相关信息。例如: varStatus="s",那么将会把信息存放在名称为s的属性当中。varStatus属性还有另外四个属性:index、count、first 和last,它们各自代表的意义如表:
属性
类型
意义
index
number
现在指到成员的索引
count
number
总共已经指到成员的总数
first
boolean
现在指到的成员是否为第一个成员
last
boolean
现在指到的成员是否为最后一个成员
我们可以使用varStatus 属性取得循环正在浏览之成员的信息,下面为一个简单的范例:
Code
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
</head>
<body>
<h2><c:out value="<c:forEach> varStatus 的四种属性" /></h2>
<%
String atts[] = new String [5];
atts[0]="hello";
atts[1]="this";
atts[2]="is";
atts[3]="a";
atts[4]="pen";
request.setAttribute("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>
</body>
</html>
还有一个例子:
我要获取:http://localhost:8080/t/index.jsp?a=123&b=256& amp;com=297中的参数列表按如下:
键com:297
键b:256
键a:123
可以结合EL表单式实现:
<c:forEach items="${param}" var="b">
键${b.key}:${b.value }<br/>
</c:forEach>
<c:forTokens>
<c:forTokens> 用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。
语法:
<c:forTokens items="stringOfTokens"
delims="delimiters"
[var="varName"]
[varStatus="varStatusName"]
[begin="begin"]
[end="end"]
[step="step"]>
本体内容
</c:forTokens>
var 用来存放现在指到的成员N String 否无
items 被迭代的字符串Y String 是无
delims 定义用来分割字符串的字符N String 是无
varStatus 用来存放现在指到的相关成员信息N String 否无
begin 开始的位置Y int 否0
end 结束的位置Y int 否最后一个成员
step 每次迭代的间隔数Y int 否1
说明
<c:forTokens>的begin、end、step、var 和varStatus 用法都和<c:forEach>一样,因此,笔者在这里就只介绍items 和delims 两个属性:items 的内容必须为字符串;而delims 是用来分割items 中定义的字符串之字符。
范例
下面为一个典型的<c:forTokens>的范例:
<c:forTokens items="A,B,C,D,E" delims="," var="item" >
${item}
</c:forTokens>
上面范例执行后,将会在网页中输出ABCDE。它会把符号“,”当做分割的标记,拆成5 个部分,也就是执行循环5 次,但是并没有将A,B,C,D,E 中的“,”显示出来。items 也可以放入EL 的表达式,如下:
<%
String phoneNumber = "123-456-7899";
request.setAttribute("userPhone", phoneNumber);
%>
<c:forTokens items="${userPhone}" delims="-" var="item" >
${item}
</c:forTokens>
这个范例将会在网页上打印1234567899,也就是把123-456-7899以“-”当做分割标记,将字符串拆为 3 份,每执行一次循环就将浏览的部分放到名称为item 的属性当中。delims 不只指定一种字符来分割字符串,它还可以一次设定多个分割字符串用的字符。如下面这个范例:
<c:forTokens items="A,B;C-D,E" delims=",;-" var="item" >
${item}
</c:forTokens>
此范例会在网页输出ABCDE,也就是说,delims 可以一次设定所有想当做分割字符串用的字符。其实用<c:forEach>也能做到分割字符串,写法如下:
<c:forEach items="A,B,C,D,E" var="item" >
${item}
</c:forEach>
上述范例同样也会在网页输出ABCDE。<c:forEach>并没有delims这个属性,因此<c:forEach>无法设定分割字符串用的字符,而<c:forEach>分割字符串用的字符只有“,”,这和使用<c:forTokens>,delims 属性设为“,”的结果相同。所以如果使用<c:forTokens>来分割字符串,功能和弹性上会比使用<c:forEach> 来得较大。
Web 程序开发人员能够利用JSTL和EL来开发Web 程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序可读性、维护性和方便性。
JSTL是一个标准的已制定好的标签库,可以应用于各种领域,如:基本输入输出、流程控制、循环、XML文件剖析、数据库查询及国际化和文字格式标准化的应用等。JSTL所提供的标签函数库主要分为五大类:
(1)核心标签库 (Core tag library)
(2)I18N 格式标签库 (I18N-capable formatting tag library)
(3)SQL 标签库 (SQL tag library)
(4)XML 标签库 (XML tag library)
(5)函数标签库 (Functions tag library)
若要在JSP 网页中使用JSTL ,一定要先做下面这行声明:
< %@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
核心标签库 (Core tag library)
Core 标签库,又被称为核心标签库,该标签库的工作是对于 JSP 页面一般处理的封装。在该标签库中的标签一共有 14 个,被分为了四类,分别是:
通用核心标签: <c:out> 、 <c:set> 、 <c:remove> 、 <c:catch> 。
条件控制标签: <c:if> 、 <c:choose> 、 <c:when> 、 <c:otherwise> 。
循环控制标签: <c:forEach> 、 <c:forTokens> 。
URL 相关标签: <c:import> 、 <c:url> 、 <c:redirect> 、 <c:param> 。
<c:out>
<c:out>主要用来显示数据的内容,就像是 <%= scripting-language %> 一样,例如:Hello ! <c:out value="${username}" />
语法
语法1:没有本体(body)内容
<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />
语法2:有本体内容
<c:out value="value" [escapeXml="{true|false}"]>
注意
表格中的EL字段,表示此属性的值是否可以为EL 表达式,例如:Y表示 attribute = "${表达式}"为符合语法的,N 则反之。
Null 和错误处理
· 假若 value为null,会显示default 的值;假若没有设定default的值,则会显示一个空
的字符串。
说明
一般来说,<c:out>默认会将 <、>、’、” 和 & 转换为 <、>、'、" 和 &。
假若不想转换时,只需要设定<c:out>的escapeXml 属性为fasle 就可以了。
范例
<c:out value="Hello JSP 2.0 !! " />
<c:out value="${ 3 + 5 }" />
<c:out value="${ param.data }" default="No Data" />
<c:out value="<p>有特殊字符</p>" />
<c:out value="<p>有特殊字符</p>" escapeXml="false" />
1.在网页上显示 Hello JSP 2.0 !! ;
2.在网页上显示 8;
3.在网页上显示由窗体传送过来的data 参数之值,假若没有data 参数,或data 参数的值为null 时,则网页上会显示No Data;
4.在网页上显示“<p>有特殊字符</p>”;
5.在网页上显示“有特殊字符”。
<c:set>
<c:set>主要用来将变量储存至JSP范围中或是JavaBean的属性中。
语法
语法1:将 value 的值储存至范围为scope 的 varName 变量之中
<c:set value="value" var="varName" [scope="{ page|request|session|application }"]/>
语法2:将本体内容的数据储存至范围为scope 的 varName 变量之中
<c:set var="varName" [scope="{ page|request|session|application }"]>
… 本体内容
</c:set>
语法3:将 value 的值储存至 target 对象的属性中
< c:set value="value" target="target" property="propertyName" />
语法4:
将本体内容的数据储存至 target 对象的属性中
<c:set target="target" property="propertyName">
… 本体内容
</c:set>
范例
<c:set var="number" scope="request" value="${1 + 1}" />
<c:set var="number" scope="session" />
${3 + 5}
</c:set>
<c:set var="number" scope="request" value="${ param.number }" />
<c:set target="User" property="name" value="${ param.Username}" />
1.将2 存入Request 范围的number 变量中;
2.将8 存入Session 范围的number 变量中;<c:set>是把本体(body)运算后的结果来当做value的值。
3.假若 ${param.number}为null 时,则移除Request 范围的number 变量;若${param.number}不为null 时,则将 ${param.number}的值存入Request 范围的number 变量中;
4.假若 ${param.Username}为null 时,则设定User(JavaBean)的name 属性为null;若不为
null 时,则将 ${param.Username}的值存入User(JavaBean)的name 属性(setter 机制)。
注意
上述范例的3.中,假若 ${param.number}为null时,则表示移除Request范围的number变量。
<c:remove>
<c:remove>主要用来移除变量。
语法
<c:remove var="varName" [scope="{ page|request|session|application }"] />
page
说明
<c:remove>必须要有var 属性,即要被移除的属性名称,scope 则可有可无,例如:
<c:remove var="number" scope="session" />
将number 变量从Session 范围中移除。若我们不设定scope,则<c:remove>将会从Page、
Request、Session 及Application 中顺序寻找是否存在名称为number 的数据,若能找到时,则将它移除掉,反之则不会做任何的事情。
注意:当不指定scope时,回remove掉从 page到application的var指定的变量
<c:catch>
<c:catch>主要用来处理产生错误的异常状况,并且将错误信息储存起来。
语法
<c:catch [var="varName"] >
… 欲抓取错误的部分
</c:catch>
说明
<c:catch>主要将可能发生错误的部分放在<c:catch>和</c:catch>之间。如果真的发生错
误,可以将错误信息储存至varName 变量中,例如:
<c:catch var="message">
: //可能发生错误的部分
</c:catch>
另外,当错误发生在<c:catch>和</c:catch>之间时,则只有<c:catch>和</c:catch>之间的程序
会被中止忽略,但整个网页不会被中止。
<c:if>
<c:if>的用途就和我们一般在程序中用的if 一样。
语法
语法1:没有本体内容(body)
<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]/>
语法2:有本体内容
<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>
具体内容
</c:if>
page
<c:choose>
<c:choose>本身只当做 <c:when> 和 <c:otherwise> 的父标签。
语法
<c:choose>
本体内容( <when> 和 <otherwise> )
</c:choose>
限制
<c:choose>的本体内容只能有:
·空白
·1 或多个 <c:when>
·0 或多个 <c:otherwise>
说明
若使用<c:when>和<c:otherwise>来做流程控制时,两者都必须为<c:choose>的子标签.
<c:when>
<c:when>的用途就和我们一般在程序中用的when 一样。
语法
<c:when test="testCondition" >
本体内容
</c:when>
☆ <c:when>必须在<c:choose>和</c:choose>之间
☆ 在同一个<c:choose>中时,<c:when>必须在<c:otherwise>之前
说明
<c:when>必须有test 属性,当test中的表达式结果为true时,则会执行本体内容;如果为
false时,则不会执行。
<c:otherwise>
在同一个 <c:choose> 中,当所有 <c:when> 的条件都没有成立时,则执行<c:otherwise> 的
本体内容。
语法
<c:otherwise>
本体内容
</c:otherwise>
<c:forEach>
<c:forEach> 为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。运作方式为当
条件符合时,就会持续重复执行<c:forEach>的本体内容。
语法1:迭代一集合对象之所有成员
<c:forEach [var="varName"] items="collection" [varStatus="varStatusName"] [begin="begin"][end="end"] [step="step"]>
本体内容
< /c:forEach>
语法2:迭代指定的次数
<c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end"
[step="step"]>
本体内容
</c:forEach>
限制
·假若有begin 属性时,begin 必须大于等于 0
·假若有end 属性时,必须大于begin
·假若有step 属性时,step 必须大于等于0
Null 和错误处理
·假若items 为null 时,则表示为一空的集合对象
·假若begin 大于或等于items 时,则迭代不运算
Code
<%@ page contentType="text/html;charset=GB2312 " %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>CH7 - Core_forEach.jsp</title>
</head>
<body>
<h2><c:out value="< c:forEach> 的用法" /></h2>
<%
String atts[] = new String [5];
atts[0]="hello";
atts[1]="this";
atts[2]="is";
atts[3]="a";
atts[4]="pen";
request.setAttribute("atts", atts);
%>
<c:forEach items="${atts}" var="item" >
${item}</br>
</c:forEach>
</body>
</html>
<c:forEach>除了支持数组之外,还有标准J2SE 的集合类型,例如:ArrayList、List、
LinkedList、Vector、Stack和Set 等等;另外还包括java.util.Map 类的对象.
<c:forEach>并不只是用来浏览集合对象而已,读者可以从语法2中发现,items并不存在
,但是当没有使用items 属性时,就一定要使用begin 和end 这两个属性。
Code
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>CH7 - Core_forEach2.jsp</title>
</head>
<body>
<h2><c:out value="< c:forEach> 循环" /></h2>
<c:forEach begin="1" end="10" var="item" >
${item}</br>
</c:forEach>
</body>
</html>
上述范例中,我们并没有执行浏览集合对象,只是设定begin 和end 属性的值,这样它就
变成一个普通的循环。此范例是将循环设定为:从1 开始跑到10,总共会重复循环10 次,并
且将数字放到item 的属性当中.
begin主要用来设定在集合对象中开始的位置(注意:第一个位置为0);end 用来设定结束的位置;而step 则是用来设定现在指到的成员和下一个将被指到成员之间的间隔.
另外,<c:forEach>还提供varStatus 属性,主要用来存放现在指到之成员的相关信息。例如: varStatus="s",那么将会把信息存放在名称为s的属性当中。varStatus属性还有另外四个属性:index、count、first 和last,它们各自代表的意义如表:
属性
类型
意义
index
number
现在指到成员的索引
count
number
总共已经指到成员的总数
first
boolean
现在指到的成员是否为第一个成员
last
boolean
现在指到的成员是否为最后一个成员
我们可以使用varStatus 属性取得循环正在浏览之成员的信息,下面为一个简单的范例:
Code
<%@ page contentType="text/html;charset=GB2312" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
</head>
<body>
<h2><c:out value="<c:forEach> varStatus 的四种属性" /></h2>
<%
String atts[] = new String [5];
atts[0]="hello";
atts[1]="this";
atts[2]="is";
atts[3]="a";
atts[4]="pen";
request.setAttribute("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>
</body>
</html>
还有一个例子:
我要获取:http://localhost:8080/t/index.jsp?a=123&b=256& amp;com=297中的参数列表按如下:
键com:297
键b:256
键a:123
可以结合EL表单式实现:
<c:forEach items="${param}" var="b">
键${b.key}:${b.value }<br/>
</c:forEach>
<c:forTokens>
<c:forTokens> 用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。
语法:
<c:forTokens items="stringOfTokens"
delims="delimiters"
[var="varName"]
[varStatus="varStatusName"]
[begin="begin"]
[end="end"]
[step="step"]>
本体内容
</c:forTokens>
var 用来存放现在指到的成员N String 否无
items 被迭代的字符串Y String 是无
delims 定义用来分割字符串的字符N String 是无
varStatus 用来存放现在指到的相关成员信息N String 否无
begin 开始的位置Y int 否0
end 结束的位置Y int 否最后一个成员
step 每次迭代的间隔数Y int 否1
说明
<c:forTokens>的begin、end、step、var 和varStatus 用法都和<c:forEach>一样,因此,笔者在这里就只介绍items 和delims 两个属性:items 的内容必须为字符串;而delims 是用来分割items 中定义的字符串之字符。
范例
下面为一个典型的<c:forTokens>的范例:
<c:forTokens items="A,B,C,D,E" delims="," var="item" >
${item}
</c:forTokens>
上面范例执行后,将会在网页中输出ABCDE。它会把符号“,”当做分割的标记,拆成5 个部分,也就是执行循环5 次,但是并没有将A,B,C,D,E 中的“,”显示出来。items 也可以放入EL 的表达式,如下:
<%
String phoneNumber = "123-456-7899";
request.setAttribute("userPhone", phoneNumber);
%>
<c:forTokens items="${userPhone}" delims="-" var="item" >
${item}
</c:forTokens>
这个范例将会在网页上打印1234567899,也就是把123-456-7899以“-”当做分割标记,将字符串拆为 3 份,每执行一次循环就将浏览的部分放到名称为item 的属性当中。delims 不只指定一种字符来分割字符串,它还可以一次设定多个分割字符串用的字符。如下面这个范例:
<c:forTokens items="A,B;C-D,E" delims=",;-" var="item" >
${item}
</c:forTokens>
此范例会在网页输出ABCDE,也就是说,delims 可以一次设定所有想当做分割字符串用的字符。其实用<c:forEach>也能做到分割字符串,写法如下:
<c:forEach items="A,B,C,D,E" var="item" >
${item}
</c:forEach>
上述范例同样也会在网页输出ABCDE。<c:forEach>并没有delims这个属性,因此<c:forEach>无法设定分割字符串用的字符,而<c:forEach>分割字符串用的字符只有“,”,这和使用<c:forTokens>,delims 属性设为“,”的结果相同。所以如果使用<c:forTokens>来分割字符串,功能和弹性上会比使用<c:forEach> 来得较大。
相关推荐
**JSTL(JavaServer Pages Standard Tag Library)** 是一个标准的标签库,用于简化JavaServer Pages(JSP)开发。它提供了许多预定义的标签,使得开发者可以更方便地处理常见任务,如控制流、迭代、XML处理等,而...
1. **jstl-api-1.2.jar**:这是JSTL的API接口定义,包含了所有JSTL标签库的接口和抽象类。开发人员在编写JSP页面时需要导入这个包,以便使用JSTL提供的各种标签。这个包不包含实际的实现,而是为编译时类型检查和...
JSTL(JavaServer Pages Standard Tag Library)是Java EE平台的一部分,它提供了一套标准标签库,用于简化JSP页面的开发,减少在页面中使用脚本元素的需要。 JSTL的主要组件包括Core、XML、JDBC、JSTL Functions和...
在Java Web开发中,JSTL(JavaServer Pages Standard Tag Library)是一个标准的标签库,它为编写JSP页面提供了一种更为简洁和结构化的途径。这个压缩包中包含的四个核心组件是JSTL的重要组成部分,它们分别是: 1....
例如,`<c:if>`, `<c:for-each>`, `<fmt:formatDate>`等都是JSTL提供的核心标签,用于条件判断、循环遍历和日期格式化等操作。通过引入`jstl-api-1.2.jar`,开发者可以清楚地知道这些标签的功能和用法,而无需关心其...
JSTL主要包含以下几个核心标签库: 1. **Core Library**(c:):提供了基本的控制流和数据处理功能,如条件语句(if, choose, when, otherwise)、迭代(forEach, forTokens)、URL重写(redirect, url)等。 2. *...
JSTL的核心标签库(core)提供了常见的控制结构,如`<c:if>`和`<c:forEach>`,用于条件判断和循环。JDBC标签库(jdbc)支持数据库操作,如查询和事务管理。XML处理标签库(fmt)则用于XML文档的解析和操作。最后,...
jstl-1.0.2.jar jstl.jar J2EE核心标签库 jstlJ2EE核心标签库jstl.jar
JavaServer Pages Standard Tag Library (JSTL) 是Java Web开发中的一个重要组件,它提供了一组预定义的标签库,使得开发者能够用更简洁、更易读的XML-like语法来实现常见的JSP页面逻辑,比如迭代、条件判断、国际化...
**JSTL 1.1.2 标签库详解** JavaServer Pages Standard Tag Library (JSTL) 是一个用于增强JSP页面功能的开源标签库,它...通过掌握JSTL的核心标签和其与其他技术的协同工作,可以构建出更加高效、清晰的Web应用程序。
JSTL(JavaServer Pages Standard Tag Library)是一个用于增强JSP页面功能的开源标签库,它提供了许多预定义的标签,使得开发者可以更加方便地处理常见任务,如迭代、条件判断、XML处理等,从而降低对Java脚本的...
**JSTL(JavaServer Pages Standard Tag Library)**是Java Web开发中的一种标准标签库,它为JSP页面提供了一套方便使用的标签,用于简化HTML和Java代码的结合,提高开发效率。标题提到的`jstl-1.1.0.jar`和`jstl-...
它由五个核心标签库组成:Core(核心)、XML、Format(格式化)、Function(函数)和I18N(国际化)。这些库提供了处理循环、条件判断、国际化、XML操作等多种功能,使得JSP代码更加简洁,可读性更强。 2. jstl-1.2...
JSTL提供了多种核心标签,涵盖了流程控制、字符串操作、XML处理等功能,极大地提高了Web开发效率。 标题中提到的三个文件`jstl.jar`、`jstl-1.2.jar`和`jstl-api-1.2.jar`在Java Web项目中起着关键作用: 1. **...
在Java Web开发中,JSTL(JavaServer Pages Standard Tag Library)是一个重要的标准标签库,它提供了多种用于处理常见任务的标签,如迭代、条件判断、XML处理、URL操作等。JSTL的核心目标是减少JavaServer Pages...
1. **核心标签库(Core Tags)**:这是JSTL中最基本的部分,提供了一系列用于控制流程、输出数据、URL重写等操作的标签。例如,`<c:if>`和`<c:choose>`用于条件判断,`<c:forEach>`用于循环遍历,`<c:set>`和`...
JSTL是JavaServer Pages标准标签库,它提供了一套用于处理常见JSP任务的标签,如迭代、条件判断、XML处理等,旨在减少在JSP页面中使用Java脚本的量,使页面更加清晰和易于维护。JSTL 1.1.2版本是我们这里讨论的重点...
1. **Core**:核心标签库,提供了基本的控制结构,如条件语句(if/else)、循环(foreach)以及重定向和转发等。 2. **Format**:格式化标签库,用于日期、时间、数字的格式化,以及国际化的支持。 3. **Function*...
在JSTL的实现中,`jstl.jar`包含了JSTL的核心标签库,而`standard.jar`则包含了一些必要的辅助类,如EL(Expression Language)的支持。在使用JSTL时,这两个库通常是需要一起导入的,因为`jstl.jar`中的标签需要...