JSTL标签详细教程之——核心库

原文 https://blog.csdn.net/xiaoed/article/details/43447567

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标签(向页面输出值)

语法

 

<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"] /></c:out>
名称说明EL支持必须默认值
value转出的值
escapeXml是否转义特殊字符和编译html标签true
default默认输出的值

 

 
  1. <c:out value="普通值"></c:out>

  2. <!-- 普通值 -->

  3. <c:out value="${no}" default="默认值"></c:out>

  4. <!-- 默认值(当value为EL表达式,并且表达式的结果为null时显示默认值) -->

  5. <c:out value="&lt;、&gt;、&#039;、&#034;、&amp;" escapeXml="false"></c:out>

  6. <!-- <、>、'、"、& (false时转义特殊字符) -->

  7. <c:out value="&lt;、&gt;、&#039;、&#034;、&amp;"></c:out>

  8. <!-- &lt;、&gt;、&#039;、&#034;、&amp; (默认不转义) -->

  9. <c:out value="<a href='www.xiaoed.com'>小耳朵的个人博客</a>" escapeXml="false"></c:out>

  10. <!-- 小耳朵的个人博客(false时编译html标签) -->

  11. <c:out value="<a href='www.xiaoed.com'>小耳朵的个人博客</a>"></c:out>

  12. <!-- <a href='www.xiaoed.com'>小耳朵的个人博客</a> -->

2、set标签(给变量赋值)

 

 

语法1:设置值到scope范围的变量中

 

<c:set value="value" var="varName" [scope="{ page|request|session|application }"]/></c:set>

 

语法2:设置值到JavaBean或Map的属性中

 

<c:set value="value" target="target" property="propertyName" /></c:set>

 

名称说明EL支持必须默认值
value要被存储的值
var存储值的名称
scope存储值的范围page
targetJavaBean或者java.util.Map的名称
propertytarget对象的属性

 

说明:target非空时,property不能为空,且target和var同时存在时只有一个生效。

 
  1. <c:set var="item1" value="1"></c:set>${item1}

  2. <!-- 1 -->

  3. <c:set var="item2">2</c:set>${item2}

  4. <!-- 2 -->

  5. <c:set var="item3" value="1">2</c:set>${item3}

  6. <!-- 报错,这两个位置不能同时设置 -->

  7. <c:set var="item4" value="page" scope="page"></c:set>

  8. <c:set var="item4" value="request" scope="request"></c:set>

  9. <c:set var="item4" value="session" scope="session"></c:set>

  10. <c:set var="item4" value="application" scope="application"></c:set>

  11. ${item4}<!-- page -->

  12. <c:set target="${user}" value="userName" property="name"></c:set>${user.name}

  13. <!-- userName -->

  14. <c:set target="${map}" value="value" property="key"></c:set>${map.key}

  15. <!-- value -->

3、remove标签(与set相反,删除变量)

 

语法:

<c:remove var="varName" [scope="{ age|request|session|application }"] />
名称说明EL支持必须默认值
var要删除的变量名
scope要删除变量的范围全部
 
  1. <c:set var="item" value="request" scope="request"></c:set>

  2. <c:set var="item" value="page" scope="page"></c:set>

  3. <c:set var="item" value="session" scope="session"></c:set>

  4. <c:set var="item" value="application" scope="application"></c:set>${item} -

  5. <c:remove var="item" />${item}

  6. <!-- page - (默认删除全部的) -->

  7. <c:set var="item2" value="request" scope="request"></c:set>

  8. <c:set var="item2" value="page" scope="page"></c:set>

  9. <c:set var="item2" value="session" scope="session"></c:set>

  10. <c:set var="item2" value="application" scope="application"></c:set>${item2} -

  11. <c:remove var="item2" scope="page"/>${item2}

  12. <!-- page - request (只删除page范围内的)-->

4、catch标签(捕捉异常,保存异常信息)

 

 

语法:

<c:catch [var="varName"] > 异常部分 </c:catch>

 

名称说明EL支持必须默认值
var异常信息存储的变量名
 
  1. <c:catch var="ex">

  2. <% int i = 1/0; %>

  3. </c:catch>

  4. ${ex}<!-- java.lang.ArithmeticException: / by zero -->

 

四、逻辑控制类标签。

1、if标签(单一的if判断,没有else)

语法:

 

<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>条件成立时的输出内容</c:if>
名称说明EL支持必须默认值
test判断条件
var判断结果存储的变量名
scope变量的存储范围page
 
  1. <c:set var="name" value="张三"></c:set>

  2. <c:if test="${name=='张三'}" var="var1" scope="page">我是张三</c:if>

  3. <c:if test="${name=='贼九'}" var="var2">贼九也是张三</c:if>

  4. var1:${var1} -- var2:${var2}

  5. <!-- 我是张三 var1:true -- var2:false -->

 

2、choose、when、otherwise标签(嵌套使用相当于if-elseif-else)

语法:

 
  1. <c:choose>

  2. <c:when test="">

  3. 前面的条件都不成立但此条件成立时输出

  4. </c:when>

  5. <c:when test="">

  6. 前面的条件都不成立但此条件成立时输出

  7. </c:when>

  8. ......

  9. <c:otherwise>

  10. 前面的条件都不成立时才输出

  11. </c:otherwise>

  12. </c:choose>

名称说明EL支持必须 默认值
test判断条件支持
 
  1. <c:set var="score" value="60"></c:set>

  2. <c:choose>

  3. <c:when test="${score<60}">

  4. </c:when>

  5. <c:when test="${score==60}">

  6. 刚好

  7. </c:when>

  8. <c:when test="${score>=60}">

  9. 很好

  10. </c:when>

  11. <c:otherwise>

  12. 没考

  13. </c:otherwise>

  14. </c:choose>

  15. <!-- 刚好 -->

 

 

五、循环判断类标签。

1、forEach标签(循环遍历)

语法1:遍历集合,类似(String s : new String[]{"a","b"})

 

 
  1. <c:forEach items="collection" [var="varName"] [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>

  2. 输出内容

  3. </c:forEach>

 

语法2:循环指定次数,类似(int i=0;i<5;i++)

 

 
  1. <c:forEach [var="varName"] [varStatus="varStatusName"] begin="begin" end="end" [step="step"]>

  2. 输出内容

  3. </c:forEach>

forEach参数说明

 

 

名称说明EL支持必须默认值
items遍历的集合对象
var每次遍历的对象
varStatus遍历的相关信息
begin开始的位置(正数)0
end结束的位置(正数)集合长度
step遍历的步长(正数)1

varStatus属性说明

 

名称类型说明
indexnumber遍历对象的索引,从0开始
countnumber总共循环的次数,从1开始
firstboolean本次循环遍历的是否是集合的第一个元素
endboolean本次循环遍历的是否是集合的最后一个元素

循环指定次数

 

 
  1. <c:forEach var="i" varStatus="ii" begin="0" end="10" step="3">

  2. 第${ii.count}次迭代,索引:${ii.index},值是:${i},是否是第1个:${ii.first},是否是最后 一个:${ii.last}<br>

  3. </c:forEach>

  4. <!--

  5. 第1次迭代,索引:0,值是:0,是否是第1个:true,是否是最后 一个:false

  6. 第2次迭代,索引:3,值是:3,是否是第1个:false,是否是最后 一个:false

  7. 第3次迭代,索引:6,值是:6,是否是第1个:false,是否是最后 一个:false

  8. 第4次迭代,索引:9,值是:9,是否是第1个:false,是否是最后 一个:true

  9. -->

遍历List

 

 

 
  1. <%

  2. List<String> list = new ArrayList<String>();

  3. list.add("A");

  4. list.add("B");

  5. list.add("C");

  6. list.add("D");

  7. list.add("E");

  8. list.add("F");

  9. request.setAttribute("list",list);

  10. %>

  11. <c:forEach items="${list}" var="l" varStatus="ll" begin="1" end="5" step="2">

  12. 第${ll.count}次迭代,索引:${ll.index},值是:${l},是否是第1个:${ll.first},是否是最后 一个:${ll.last}<br>

  13. </c:forEach>

  14. <!--

  15. 第1次迭代,索引:1,值是:B,是否是第1个:true,是否是最后 一个:false

  16. 第2次迭代,索引:3,值是:D,是否是第1个:false,是否是最后 一个:false

  17. 第3次迭代,索引:5,值是:F,是否是第1个:false,是否是最后 一个:true

  18. -->

遍历Map

 

 

 
  1. <%

  2. Map<String,String> map = new HashMap<String,String>();

  3. map.put("key1", "value1");

  4. map.put("key2", "value2");

  5. map.put("key3", "value3");

  6. request.setAttribute("map",map);

  7. %>

  8. <c:forEach items="${map}" var="m">

  9. key:${m.key},value:${m.value}<br>

  10. </c:forEach>

  11. <!--

  12. key:key3,value:value3

  13. key:key2,value:value2

  14. key:key1,value:value1

  15. -->

 

遍历Set

 

 
  1. <%

  2. Set<String> set = new HashSet<String>();

  3. set.add("大");

  4. set.add("坏");

  5. set.add("蛋");

  6. request.setAttribute("set",set);

  7. %>

  8. <c:forEach items="${set}" var="s">

  9. ${s}

  10. </c:forEach>

  11. <!-- 坏 蛋 大 -->

2、forTokens标签(字符串拆分,相当于String的split方法)

语法:

 
  1. <c:forTokens items="str" delims="selStr" [var="varName"]

  2. [varStatus="varStatusName"] [begin="begin"] [end="end"] [step="step"]>

  3. 输出内容

  4. </c:forTokens>

参数说明

 

 

名称说明EL支持必须默认值
items要被拆分的字符串的
delims用来拆分的字符串
var保存每次拆分的字符串
varStatus第次拆分的相关信息
begin起始位置0
end终止位置被拆分后的长度
step步长1

注:var、varStatus、begin、end、step和forEach的参数作用相同

 

 
  1. <c:forTokens items="你,是,我,的,小,苹,果" delims="," var="i" varStatus="ii">

  2. ${i}

  3. </c:forTokens>

  4. <!-- 你 是 我 的 小 苹 果 -->

 

 

五、URL操作类标签。

1、import标签(把其他资源文件引用到本页面,类似jsp:include,区别在于可以引用任意地方的资源,不限于本项目)

语法:

 
  1. <c:import url="url" [context="context"] [var="varName"] [scope="{page|request|session|application}"] [charEncoding="charEncoding"] [varReader="varReaderName"]>

  2. <span style="white-space:pre"> <c:param>...</span>

  3. </c:import>

名称说明EL支持必须默认值
url要引入资源的URL
contextURL为相对路径时的根目录当前项目目录
var资源文件内容保存对象的名字
scope保存范围page
charEncoding文件编码
varReader保存导入内容的Java.io.Reader对象

说明:

1、引入的资源文件不限于jsp、html也可是txt等。

2、url可以是绝对路径,也可是相对路径。

3、此操作容易出异常,建议放在<c:catch></c:catch>中捕获。

 

 
  1. <c:import url="www.xiaoed.com"></c:import>

  2. <!-- 输出页面内容(黑色) -->

  3. <c:import url="www.xiaoed.com" var="varUrl" scope="page"></c:import>

  4. <!-- 没有输出 -->

  5. <c:import url="www.xiaoed.com" var="varUrl"></c:import>

  6. <a style="color: red;">${varUrl}</a>

  7. <!-- 输出页面内容(红色) -->

  8. <c:import url="/imp.txt" charEncoding="UTF-8" context="/jstl"></c:import>

  9. <!-- 我是Txt(黑色) -->

 

2、url标签(在JSP页面中构造一个URL地址,实现URL重写)

语法:param是给url传递参数

 

 
  1. <c:url value="value" [context="context"] var =“varName" [scope="page|request|session|application"]>

  2. <c:param>...

  3. </c:url>

名称说明EL支持必须默认值
value要构造的URL,绝对或相对路径
var构造好的URL保存的对象名称
contextURL为相对路径时的根目录当前项目目录
scope保存对象的存储范围page
c:param向URL传递参数
 
  1. <c:url value="www.xiaoed.com"></c:url>

  2. <!-- www.xiaoed.com -->

  3. <c:url value="www.xiaoed.com" var="urlName"></c:url>

  4. <!-- 没有输出 -->

  5. <c:url value="www.xiaoed.com" var="urlName" scope="page"></c:url>

  6. <a style="color: green;">${urlName}</a>

  7. <!-- www.xiaoed.com(绿色) -->

  8. <c:url value="/index.jsp" context="/jstl"></c:url>

  9. <!-- /jstl/index.jsp -->

  10. <c:url value="www.xiaoed.com">

  11. <c:param name="n1" value="v1"></c:param>

  12. <c:param name="n2" value="v2"></c:param>

  13. </c:url>

  14. <!-- www.xiaoed.com?n1=v1&n2=v2 -->

3、redirect标签(重定向到指定URL)

 

语法:

 
  1. <c:redirect url=”url”[context=”context”]>

  2. <c:param>...

  3. </c:redirect>

名称说明EL支持必须默认值
url要重定向的URL地址
contextURL为相对路径时的根目录当前项目目录
param向URL传递参数
 
  1. <c:redirect url="/imp.jsp" context="/jstl">

  2. <c:param name="name" value="value"></c:param>

  3. </c:redirect>

  4. <!-- 跳转页面的URL http://localhost:8080/jstl/imp.jsp?name=value -->

4、param标签(与import、url、redirect联合使用)
语法:

 

 

<c:param name="name" value="value"></c:param>

与import、url、redirect联合使用,用来传递参数。

 

 

JSTL核心库标签的用法基本上都写到了,若各位发现有误的地方,请在评论中评出,多谢!format、xml、sql这三个标签库的讲解也会在接下来的几篇博客中给出。本文的代码下载请点这里

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值