JSTL(JSP Standard Tag Library,JSP标准标签库),目前最新版本是1.2,包括四个标签库(core、format、xml、sql),这一篇主要讲解JSTL的核心库即core标签库,核心库标签共有14个,从功能可以分为四大类:逻辑控制、表达式控制、循环判断、URL操作。
一、开发前准备。
1、确保classpath下有standard.jar,jstl.jar。
2、在JSP文件的顶部引入
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
3、已掌握EL表达式的基本语法,若未掌握,可以先看这里 EL表达式详细教程 。
二、核心库标签的分类。
表达式类 :out、set、remove、catch
逻辑控制类:if、choose、when、otherwise
循环判断类:forEach、forTokens
URL操作类 :import、url、redirect、param
三、表达式类标签。
1、out标签(向页面输出值)
语法
名称 | 说明 | EL支持 | 必须 | 默认值 |
---|---|---|---|---|
value | 转出的值 | 是 | 是 | 无 |
escapeXml | 是否转义特殊字符和编译html标签 | 否 | 否 | true |
default | 默认输出的值 | 否 | 否 | 无 |
2、set标签(给变量赋值)
语法1:设置值到scope范围的变量中
语法2:设置值到JavaBean或Map的属性中
名称 | 说明 | EL支持 | 必须 | 默认值 |
value | 要被存储的值 | 是 | 否 | 无 |
var | 存储值的名称 | 否 | 否 | 无 |
scope | 存储值的范围 | 否 | 否 | page |
target | JavaBean或者java.util.Map的名称 | 是 | 否 | 无 |
property | target对象的属性 | 是 | 否 | 无 |
说明:target非空时,property不能为空,且target和var同时存在时只有一个生效。
${item1}
2 ${item2}
2 ${item3}
${item4}
${user.name}
${map.key}
3、remove标签(与set相反,删除变量)
语法:
名称 | 说明 | EL支持 | 必须 | 默认值 |
---|---|---|---|---|
var | 要删除的变量名 | 否 | 是 | 无 |
scope | 要删除变量的范围 | 否 | 是 | 全部 |
${item} -
${item}
${item2} -
${item2}
4、catch标签(捕捉异常,保存异常信息)
语法:
异常部分
名称 | 说明 | EL支持 | 必须 | 默认值 |
---|---|---|---|---|
var | 异常信息存储的变量名 | 否 | 否 | 无 |
<% int i = 1/0; %>
${ex}
四、逻辑控制类标签。
1、if标签(单一的if判断,没有else)
语法:
条件成立时的输出内容
名称 | 说明 | EL支持 | 必须 | 默认值 |
---|---|---|---|---|
test | 判断条件 | 是 | 是 | 无 |
var | 判断结果存储的变量名 | 否 | 否 | 无 |
scope | 变量的存储范围 | 否 | 否 | page |
我是张三
贼九也是张三
var1:${var1} -- var2:${var2}
2、choose、when、otherwise标签(嵌套使用相当于if-elseif-else)
语法:
前面的条件都不成立但此条件成立时输出
前面的条件都不成立但此条件成立时输出
......
前面的条件都不成立时才输出
名称 | 说明 | EL支持 | 必须 | 默认值 |
---|---|---|---|---|
test | 判断条件 | 支持 | 是 | 无 |
差
刚好
很好
没考
五、循环判断类标签。
1、forEach标签(循环遍历)
语法1:遍历集合,类似(String s : new String[]{"a","b"})
输出内容
语法2:循环指定次数,类似(int i=0;i<5;i++)
输出内容
forEach参数说明
名称 | 说明 | EL支持 | 必须 | 默认值 |
---|---|---|---|---|
items | 遍历的集合对象 | 是 | 否 | 无 |
var | 每次遍历的对象 | 否 | 否 | 无 |
varStatus | 遍历的相关信息 | 否 | 否 | 无 |
begin | 开始的位置(正数) | 是 | 否 | 0 |
end | 结束的位置(正数) | 是 | 否 | 集合长度 |
step | 遍历的步长(正数) | 是 | 否 | 1 |
名称 | 类型 | 说明 |
---|---|---|
index | number | 遍历对象的索引,从0开始 |
count | number | 总共循环的次数,从1开始 |
first | boolean | 本次循环遍历的是否是集合的第一个元素 |
end | boolean | 本次循环遍历的是否是集合的最后一个元素 |
第${ii.count}次迭代,索引:${ii.index},值是:${i},是否是第1个:${ii.first},是否是最后 一个:${ii.last}
遍历List
<%
List list = new ArrayList();
list.add("A");
list.add("B");
list.add("C");
list.add("D");
list.add("E");
list.add("F");
request.setAttribute("list",list);
%>
第${ll.count}次迭代,索引:${ll.index},值是:${l},是否是第1个:${ll.first},是否是最后 一个:${ll.last}
遍历Map
<%
Map map = new HashMap();
map.put("key1", "value1");
map.put("key2", "value2");
map.put("key3", "value3");
request.setAttribute("map",map);
%>
key:${m.key},value:${m.value}
遍历Set
<%
Set set = new HashSet();
set.add("大");
set.add("坏");
set.add("蛋");
request.setAttribute("set",set);
%>
${s}
2、forTokens标签(字符串拆分,相当于String的split方法)
语法:
输出内容
参数说明
名称 | 说明 | EL支持 | 必须 | 默认值 |
---|---|---|---|---|
items | 要被拆分的字符串的 | 是 | 是 | 无 |
delims | 用来拆分的字符串 | 否 | 是 | 无 |
var | 保存每次拆分的字符串 | 否 | 否 | 无 |
varStatus | 第次拆分的相关信息 | 否 | 否 | 无 |
begin | 起始位置 | 是 | 否 | 0 |
end | 终止位置 | 是 | 否 | 被拆分后的长度 |
step | 步长 | 是 | 否 | 1 |
${i}
五、URL操作类标签。
1、import标签(把其他资源文件引用到本页面,类似jsp:include,区别在于可以引用任意地方的资源,不限于本项目)
语法:
...
名称 | 说明 | EL支持 | 必须 | 默认值 |
---|---|---|---|---|
url | 要引入资源的URL | 是 | 是 | 无 |
context | URL为相对路径时的根目录 | 否 | 否 | 当前项目目录 |
var | 资源文件内容保存对象的名字 | 否 | 否 | 无 |
scope | 保存范围 | 否 | 否 | page |
charEncoding | 文件编码 | 否 | 否 | 无 |
varReader | 保存导入内容的Java.io.Reader对象 | 否 | 否 | 无 |
说明:
1、引入的资源文件不限于jsp、html也可是txt等。
2、url可以是绝对路径,也可是相对路径。
3、此操作容易出异常,建议放在
${varUrl}
2、url标签(在JSP页面中构造一个URL地址,实现URL重写)
语法:param是给url传递参数
...
名称 | 说明 | EL支持 | 必须 | 默认值 |
---|---|---|---|---|
value | 要构造的URL,绝对或相对路径 | 是 | 是 | 无 |
var | 构造好的URL保存的对象名称 | 否 | 否 | 无 |
context | URL为相对路径时的根目录 | 否 | 否 | 当前项目目录 |
scope | 保存对象的存储范围 | 否 | 否 | page |
c:param | 向URL传递参数 | 是 | 否 | 无 |
${urlName}
3、redirect标签(重定向到指定URL)
语法:
...
名称 | 说明 | EL支持 | 必须 | 默认值 |
---|---|---|---|---|
url | 要重定向的URL地址 | 是 | 是 | 无 |
context | URL为相对路径时的根目录 | 否 | 否 | 当前项目目录 |
param | 向URL传递参数 | 是 | 否 | 无 |
4、param标签(与import、url、redirect联合使用)
与import、url、redirect联合使用,用来传递参数。
JSTL核心库标签的用法基本上都写到了,若各位发现有误的地方,请在评论中评出,多谢!format、xml、sql这三个标签库的讲解也会在接下来的几篇博客中给出。本文的代码下载请点这里