1. Jstl标签库分为5类
Jstl核心标签库,数据库标签库,i18n格式化标签库,xml标签库和jstl函数标签库。
2. Jstl核心标签库
在jsp页面中要使用到核心标签库,必须使用<%@taglib%>指令,指定核心标签库。代码如下:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
1) <c:set>标签
定义变量的标签,能够将变量存储在jsp范围中或者javabean属性中。其语法格式分为如下5种。
① 指定变量名及变量值,不指定scope
<c:set var="username" value="dinghuan"></c:set>
② 将value的值储存到范围为scope的变量中
<c:set var="username" value="dinghuan" scope="page|request|session|application"></c:set>
③ 将本体内容的数据储存到范围为scope的变量中
<c:set var="username" scope="page|request|session|application">
本体内容
</c:set>
④ 将value值储存到target对象的属性中
<c:set value="dinghuan" target="user" property="name"></c:set>
⑤ 将本体内容的数据储存到target对象的属性中
<c:set target="user" property="name">
本体内容
</c:set>
2) <c:out>标签
用来显示数据的内容,类似于<%=%>但是功能要更加强大。
① 通过value属性指定需要显示的值
<c:out value="dinghuan"/>
② 通过escapeXml属性设置是否将value中的内容按照原样输出。因为<c:out>默认会将<,>,',",&转换成<,>,',",&。如果不想转换,只需设定escapeXml属性为"false"。
<c:out value="dinghuan" escapeXml="true|false"/>
③ 通过default属性来指定默认值。如果value的值为null时,则显示default的值。
<c:out value="dinghuan" default="linling"/>
④ 通过本体内容来指定默认值。如果value的值为null时,则显示default的值。
<c:out value="dinghuan">
本体内容
</c:out>
3) <c:remove>标签
用来移除指定范围的变量。
Var属性指定待删除变量的名称,scope属性是可选的,用来指定删除变量的范围,缺省为page。
<c:remove var="number" scope="session"/>
4) <c:if>标签
用来执行流程控制,其功能和java语言中的if完全相同。有两种语法格式。一种没有本体内容,一种有本体内容。
① 没有本体内容的格式如下
<c:if test="testCondition" var="varName" scope="page|request|session|application"/>
其中test属性是必须填写的,表示进行判断的表达式。属性var定义变量,该变量存放判断后的结果。Scope表示var定义变量储存的范围。
② 有本体内容的格式如下
<c:if test="testCondition" var="varName" scope="page|request|session|application">
本体内容
</c:if>
其中test属性是必须填写的,当test中表达式的结果为true时,则会执行本体内容。
5) <c:choose><c:when><c:otherwise>标签
<c:if>标签只能判断一个表达式,而且无法指定如果表达式不成立执行语句。Jstl同样提供了类似于if...else...的语句<c:choose>标签。<c:choose>本身只能当有<c:when>和<c:otherwise>的时候的标签。其中可以有一个或多个<c:when>标签,有零个或多个<c:otherwise>标签。其语法格式如下。
<c:choose>
...
<c:when test="testCondition">
</c:when>
...
<c:other>
</c:other>
</c:choose>
6) <c:forEach>标签
一种用来遍历集合对象的成员,一种用来使语句循环执行指定次数。
① 遍历集合对象的成员,语法格式如下。
<c:forEach [var="varname"] items="collection" [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
本体内容
</c:forEach>
其中"var"用来存放现在指到的成员。"items"值迭代的集合对象。"varStatus"用来存放现在指到的相关成员的信息。"begin"表示开始位置(默认为0)。"end"表示结束位置。"step"表示步长(默认为1)。
② 指定语句执行次数,其语法格式如下。
<c:forEach [var="varname"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
本体内容
</c:forEach>
注:varStatus属性
current: 当前这次迭代的(集合中的)项
index : 当前这次迭代从 0 开始的迭代索引
count : 当前这次迭代从 1 开始的迭代计数
first : 用来表明当前这轮迭代是否为第一次迭代的标志
last : 用来表明当前这轮迭代是否为最后一次迭代的标志
begin : 返回begin属性值
end : 返回end属性值
step : 返回step属性值
例:
<c:foreach items="{personList}" var="person" varStatus="varStatus">
<tr bgcolor="${varStatus.index % 2 == 1 ? '#EFEFEF' : 'FFFFFF'}">
<td>${varStatus.current.id}</td>
<td>${varStatus.current.name}</td>
<td>${varStatus.current.age}</td>
</tr>
</c:foreach>
7. <c:forTokens>标签
用来根据指定分隔符分割字符串。其语法格式如下。
<c:forEach [var="varname"] items="collection" delims="delimiters" [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
本体内容
</c:forEach>
其中"var","varStatus","begin","end","step"属性和<c:forEach>标签中用法一样。"items"属性表示被分割的字符串,"delims"属性指定分隔符。
<c:forTokens>不仅可以分割仅有一个分隔符的字符串。也可以通过设定多个分隔符来分割有多个分隔符就可以了。
8. <c:import>标签
可以把其他静态或动态的文件包含到本身的jsp页面中。它和jsp动作指令的<jsp:include>最大的差别在于:<jsp:include>只能包含和自己在同一web application下的文件;而<c:import>除了能够包含和自己的同一web application的文件中。也可以包含不同web application或其他网站的文件。
<c:import url="url" [context="context"]
[var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"]>
内容
</c:import>
或者
<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,用于读取资源。 |
9. <c:param>标签
用来传递参数,包含两个属性name和value。语法格式如下。
<c:param name="参数名" value="参数值">