一、概述
JSP 标准标记库( Standard Tag Library , JSTL) 是一组以标准化格式实现许多通用的 Web 站点功能的定制标记。为弥补html标签的不足,规范自定义标签的使用而诞生的。
可以嵌入在jsp页面中使用标签的形式完成业务逻辑等功能,JSTL出现的目的同EL一样也是要代替JSP页面中的脚本代码。JSTL标准标准标签库有5个子库,但随着发展,目前常使用的是它的核心库Core
标签库 |
标签库的URI |
前缀 |
Core |
http://java.sun.com/jsp/jstl/core |
c |
I18N |
http://java.sun.com/jsp/jstl/fmt |
fmt |
SQL |
http://java.sun.com/jsp/jstl/sql |
sql |
XML |
http://java.sun.com/jsp/jstl/xml |
x |
Functions |
http://java.sun.com/jsp/jstl/functions |
fn |
二、核心标签库引入
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
三、核心标签库13个标签
1.流程控制标签(if|choose|when|otherwise)
(1)if 等同于 java 中的 if 语句
<c:if test="条件">满足条件执行的JSP代码</c:if>
(2)choose 和 when 类似于 java 中的 switch 和 case
<c:choose>
<c:when test="条件1">处理1</c:when>
<c:when test="条件2">处理2</c:when>
</c:choose>
(3) otherwise 等同于 java switch 中的 default
当choose 中的 when 没有满足条件的时候 会执行 otherwise 中的内容
<c:choose>
<c:otherwise>处理</c:otherwise>
</c:choose>
2.表达式控制标签(set|out|remove|catch)
(1)set 等同于JSP中的 session的setAttribute() 方法
<c:set var="名字" value="值"/>
<c:set var="名字">值</c:set>
(2) out 等同于 JSP中的 <%= %>
<c:out value="需要输出的值">
<c:set var="test" value="这是一个测试">
<c:out value="${test}">
(3)remove 等同于 session中的removeAttrbute()方法
<c:remove var="名字"/>
(4)catch类似于 java 中的 try
<c:catch var="名字">JSP代码</c:catch>
<c:catch var="testException">
<% int i = 5/0; %>
</c:catch>
<c:if test="${testException != null}">
上面的代码有错误发生
</c:if>
3.循环标签(forEach|forTokens)
(1)forEach 类似于Java中的 for 循环
设置一个开始数字 begin,设置一个结束数字end,然后每次循环都会将值赋值给 var,另外还有个 setp参数里面可以设置值每次增加几个数
<c:forEach var="名字(i)" begin="开始数字(1)" end="结束数字(5)">
${i}
</c:forEach>
<!--输出结果是1 2 3 4 5-->
名称 |
EL |
类型 |
是否必须 |
默认值 |
var |
N |
String |
是 |
无 |
items |
Y |
Arrays Collection Iterator Enumeration Map String []args |
是 |
无 |
begin |
Y |
int |
否 |
0 |
end |
Y |
int |
否 |
集合中最后一个元素 |
step |
Y |
int |
否 |
1 |
varStatus |
N |
String |
否 |
无 |
其中varStatus有4个状态属性,如下:
属性名 |
类型 |
说明 |
index |
int |
当前循环的索引值 |
count |
int |
循环的次数 |
frist |
boolean |
是否为第一个位置 |
last |
boolean |
是否为第二个位置 |
(2) forTokens 类似于Java中的 foreach 循环
在items中放一个集合,然后 delims设置以什么分割,然后将分割后循环的值赋值给 var,如果 items中存放的是一个集合 那么可以不用写delims,这样每循环一次,就会取出集合中的一个放在 var中
<c:forTokens items="a,b,c,d,e" delims="," var="name">
${name}
</c:forTokens>
<!--输出结果 a b c d e-->
4.URL操作标签(import|url|redirect|param)
(1)import 把其他静态或动态文件包含到本JSP页面
同<jsp:include>的区别为:只能包含同一个web应用中的文件。而<c:import>可以包含其他web应用中的文件,甚至是网络上的资源。
<!--将 百度 的源代码返回到 codeMark 变量中-->
<c:import var="codeMark" url="http://www.baidu.com" />
名称 |
说明 |
EL |
类型 |
必须 |
默认值 |
url |
被导入资源的URL路径 |
Y |
String |
是 |
无 |
context |
相同服务器下其他的web工程,必须以" " "开头 |
Y |
String |
否 |
无 |
var |
以String类型存入被包含文件的内容。 |
N |
String |
否 |
无 |
Scope |
var变量的JSP范围 |
N |
String |
否 |
page |
charEncoding |
被导入文件的编码格式 |
Y |
String |
否 |
无 |
varReader |
以Reader类型存储被包含文件内容 |
N |
String |
否 |
无 |
(2)redirect 类似于service中的重定向
<!--重定向百度页面-->
<c:redirect url="http://www.baidu.com"/>