JSLT标签库,是日常开发经常使用的,也是众多标签中性能最好的。把常用的内容,放在这里备份一份,随用随查。尽量做到不用查,就可以随手就可以写出来。这算是Java程序员的基本功吧,一定要扎实。
JSTL全名为JavaServer Pages Standard Tag Library,目前最新的版本为 1.2.5 版。JSTL是由JCP(Java Community Process)所制定的标准规范,它主要提供给Java Web开发人员一个标准通用的标签函数库。
Web程序员能够利用JSTL和EL来开发Web程序,取代传统直接在页面上嵌入Java程序(Scripting)的做法,以提高程序的阅读性、维护性和方便性。
JSTL 1.2.5 必须在支持 Servlet 2.5, JavaServer Pages 2.1 以上版本的JavaWeb容器才可使用。
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
=========================================================================
1、在 WEB-INF/lib 下加入如下jar包:
taglibs-standard-compat-1.2.5.jar
taglibs-standard-impl-1.2.5.jar
taglibs-standard-jstlel-1.2.5.jar
taglibs-standard-spec-1.2.5.jar
2、在jsp文件的顶部加入以下内容:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/sql" prefix="sql"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/xml" prefix="xml"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn"%>
==========================================================================
一、<c:> 核心标签库
==========================================================================
JSTL 核心标签库(C标签)标签共有13个,功能上分为4类:
1.表达式控制标签:out、set、remove、catch
2.流程控制标签:if、choose、when、otherwise
3.循环标签:forEach、forTokens
4.URL操作标签:import、url、redirect
1、<c:forEach> 标签:
为循环控制,它可以将集合(Collection)中的成员循序浏览一遍。
格式:
<!-- 语法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>
属性:
名称 | 说明 | 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 |
<c:forEach> 标签的 属性 : varStatus属性: 它的提供另外四个属性:index,count,fist和last,它们个自的意义如下:
Java代码
属性 类型 意义
index number 现在指到成员的索引
count number 总共指到成员的总和
first boolean 现在指到成员是否为第一个
last boolean 现在指到成员是否为最后一个
示例:
<c:forEach> 遍历 List列表:对于一个基本类型的数组,当前元素将作为相应包装类(Integer、Float等等)的一个实例提供。
<c:forEach items="${domainList }" var="item">
<tr>
<td align="center" valign="middle">${item["domain"]==null?" ":item["domain"]}</td>
<td align="center" valign="middle">
<fmt:formatDate value="${item['bind_date']}" pattern="yyyy-MM-dd HH:mm:ss" />
</td>
<td align="center" valign="middle">
<c:if test="${item['domain']!=null}">
<a href="javascript:;" id="${item['domain']}" class="del"> </a>
</c:if>
</td>
</tr>
</c:forEach>
<c:forEach> 遍历Map:对于一个java.util.Map,当前元素则作为一个java.util.Map.Entry提供。
<c:if test="${!empty permissionMap}">
<c:forEach items="${permissionMap}" var="item">
<tr>
<td>${item.value.id}</td>
<td>${item.value.urlOnClass}</td>
<td>${item.value.urlOnMethod}</td>
</tr>
</c:forEach>
</c:if>
2、<c:forTokens> 标签:
用来浏览一字符串中所有的成员,其成员是由定义符号(delimiters)所分隔的。
<c:forTokens> 标签的语法 说明 :
<c:forTokens items="strOfTokens" delims="delimiters" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>
<!-- 本体内容 -->
</c:forTokens>
<c:forTokens> 标签的 属性说明 :
名称 | 说明 | EL | 类型 | 必须 | 默认值 |
var | 用来存放现在指到的成员 | N | String | 否 | 无 |
items | 被迭代的字符串 | Y | String | 是 | 无 |
delims | 定义用来分割字符串的字符 | N | String | 是 | 无 |
varStatus | 用来存放现在指到的相关成员信息 | N | String | 否 | 无 |
begin | 开始的位置 | Y | int | 否 | 0 |
end | 结束的位置 | Y | int | 否 | 最后一个 |
step | 每次迭代的间隔数 | Y | int | 否 | 1 |
3、<c:out> 标签:
主要用来显示数据的内容
<c:out> 标签的语法 说明 :
<!-- 语法1:没有本体(body)内容 -->
<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] />
<!-- 语法2:有本体内容 -->
<c:out value="value" [escapeXml="{true|false}"]>
default value
</c:out>
一般来说,<c:out>默认会将<、>、’、” 和 & 转换为 <、>、'、" 和&。假若不想转换时,只需要设定<c:out>的escapeXml属性为fasle就可以了。
4、<c:set> 标签:
主要用来将变量储存至JSP范围中或是JavaBean的属性中。
<c:set> 标签的语法 说明 :
<!-- 语法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> 标签的 属性说明 :
名称 | 说明 | EL | 类型 | 必须 | 默认值 |
value | 要被储存的值 | Y | Object | 否 | 无 |
var | 准备存入的变量名称 | N | String | 否 | 无 |
scope | var变量的JSP范围 | N | String | 否 | page |
target | 为一JavaBean或java.util.Map对象 | Y | Object | 否 | 无 |
property | 指定target对象的属性 | Y | String | 否 | 无 |
5、<c:remove> 标签:
主要用来移除变量。
<c:remove> 标签的语法 说明 :
<c:remove var="varName" [scope="{ age|request|session|application }"] />
6、<c:catch> 标签:
主要用来处理产生错误的异常状况,并且将错误信息储存起来。
<c:catch> 标签的语法 说明 :
Html代码
<c:catch [var="varName"] >
… 欲抓取错误的部分
</c:catch>
7、<c:if> 标签:
用途就和我们一般在程序中用的if一样。
<c: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>
示例:
<c:if test="${not empty item.publish_time}">
<!-- 内容 -->
</c:if>
<c:if test="${item['domain']!=null}">
<!-- 内容 -->
</c:if>
<c:if test="${!empty permissionMap}">
<!-- 内容 -->
</c:if>
8、<c:choose> <c:when> <c:otherwise>标签:
<c:choose when otherwise> 标签的语法 说明 :
<c:set var="score">85</c:set>
<c:choose>
<c:when test="${score>=90}">
<!-- 你的成绩为优秀! -->
</c:when>
<c:when test="${score>=70&&score<90}">
<!-- 您的成绩为良好! -->
</c:when>
<c:when test="${score>60&&score<70}">
<!-- 您的成绩为及格 -->
</c:when>
<c:otherwise>
<!-- 对不起,您没有通过考试!-->
</c:otherwise>
</c:choose>
9、<c:import> 标签:
<c:import>标签提供了所有<jsp:include>行为标签所具有的功能,同时也允许包含绝对URL。
举例来说,使用<c:import>标签可以包含一个FTP服务器中不同的网页内容。
格式:
<c:import url="string"
var="string"
scope="string"
varReader="string"
context="string"
charEncoding="string" />
属性:
属性 | 描述 | 是否必要 | 默认值 |
url | 待导入资源的URL,可以是相对路径和绝对路径,并且可以导入其他主机资源 | 是 | 无 |
context | 当使用相对路径访问外部context资源时,context指定了这个资源的名字。 | 否 | 当前应用程序 |
charEncoding | 所引入的数据的字符编码集 | 否 | ISO-8859-1 |
var | 用于存储所引入的文本的变量 | 否 | 无 |
scope | var属性的作用域 | 否 | page |
varReader | 可选的用于提供java.io.Reader对象的变量 | 否 | 无 |
示例:
<c:import url="file:///D:/Temp/test1.json" charEncoding="utf-8"></c:import>
<c:import url="temp.jsp"></c:import>
<c:import url="http://www.mchweb.net"></c:import>
10、<c:redirect> 标签:
<c:redirect>标签通过自动重写URL来将浏览器重定向至一个新的URL,它提供内容相关的URL,并且支持c:param标签。
格式:
<c:redirect url="<string>" context="<string>"/>
属性:
属性 | 描述 | 是否必要 | 默认值 |
url | 目标URL | 是 | 无 |
context | 紧接着一个本地网络应用程序的名称 | 否 | 当前应用程序 |
示例:
<c:redirect url="http://www.mchweb.net"></c:redirect>
11、<c:url> 标签:
<c:url>标签将URL格式化为一个字符串,然后存储在一个变量中。
这个标签在需要的时候会自动重写URL。
var属性用于存储格式化后的URL。
<c:url>标签只是用于调用response.encodeURL()方法的一种可选的方法。它真正的优势在于提供了合适的URL编码,包括<c:param>中指定的参数。
格式:
<c:url var="<string>"
scope="<string>"
value="<string>"
context="<string>"/>
属性:
属性 | 描述 | 是否必要 | 默认值 |
value | 基础URL | 是 | 无 |
context | 本地网络应用程序的名称 | 否 | 当前应用程序 |
var | 代表URL的变量名 | 否 | Print to page |
scope | var属性的作用域 | 否 | Page |
示例:
<c:url value="/temp.jsp"></c:url>