在<JSTL(一)---简介>中,我对JSTL进行了简单的介绍,今天就进行深入的学习一下,再次要介绍的就是关于JSTL的核心标签库,为什么叫做核心标签库呢,我对此的理解就是这些标签库使用的频率比较高.
一.宏观把控
做一件事情的时候,我们常常会说:先宏观把控好了,细节都不是问题了.那么我们就从宏观来看看JSTL的核心标签库,如下图所示:
看着这些单词,是不是有一种似曾相识的感觉呢.
二.细节处理
温馨提示:
使用标签时,一定要在jsp文件头加入以下代码:<%@taglib prefix="c"uri="http://java.sun.com/jsp/jstl/core" %>
1.与表达式相关的核心标签库
- <c:out>:输出表达式的结构,类似于alert().system.out.println();
格式:
<c:out value="表达式"[escapeXml="true|false"] [default="默认值"]/>
- <c:set>:设定指定范围内的一个变量和对象的值.类似于=,
格式1:
<c:set value="要设置的值"var="变量名" />
格式2:
<c:set var="变量名">要设置的值 </c:set>
格式3:
<c:set value="要设置的值" target="对象名称" property="对象的属性名称"/>
格式4:
<c:set target="对象名称" property="对象的属性名称">
要设置的值
</c:set>
- <c:remove> :删除某范围内的一个变量. 类似于remove,delete
格式:
<c:remove var="变量名" />
例如:
<body>
<c:set var="bookname" value="《java web 极限开发》"/>
变量bookname的值位:<c:out value="${bookname}"/><br/>
变量bookname的值位:<c:out value="${bookname}" escapeXml="false"/><br/>
<c:removevar="bookname"/>
变量bookname的值为:<c:outvalue="${bookname}"/><br/>
<c:catch var="errorStr">
<%=3/0%>
<c:out value="这是输出的内容"/>
</c:catch>
捕获到异常:<c:out value="${errorStr }"/>
</body>
效果图:
2.流程控制核心标签
- <c:if>:类似于java,C# 中的if判断语句
格式1:
<c:if test="条件表达式" var="变量名"/>
格式2:
<c:if test="条件表达式"> 表达式成立后执行的代码</c:if>
- <c:choose>,<c:when>,<c:otherwise>:类似于java,C#中的switch语句.
格式:
<c: choose>
<c:when test="条件表达式1">
条件表示成立后执行的语句.
</c:when>
<c:otherwise>
以上条件表达式都不成立后执行的语句
</c:otherwise>
</c:choose>
温馨提示: <c:when>标签和<c:otherwise>标签必须嵌套在<c:choose>标签中使用,且在同一个<c:choose>标签中的所有的<c:when>标签必须出现在<c:otherwise>标签之前.
3.迭代核心标签
- <c:forEach>:要么通过集合对象来决定执行循环体中嵌套的语句的次数,要么执行固定的次数.
格式:
<c:forEachitems=”data” var=”name” begin=”start” end=”finsh” step=”step”varStatus=”statusName”>
......//标签主体
</c:forEach><span style="font-family: Calibri; font-size: 14pt; "> </span>
- <c:forTokens>:处理由某一符号分隔的字符串,从其中拆分出子字符串.
格式:
<c:forTokensitems=”String” delims=”char”>
.....//标签主体
</c:forTokens>
例如:
<body>
<%//-------------设置一个数组的初始值-----------
String name[] =new String[4];
name[0]="阿涛";
name[1]="弯弯";
name[2]="东哥";
name[3]="西瓜";
request.setAttribute("name",name);
%>
-------------用forEach输出数组元素值及迭代过程中的相关属性---------------<br></br>
<c:forEach items="${name}" var="currentName" varStatus="currentVarStaus">
当前元素值为:<c:out value="${ currentName}" /><br/>
当前元素索引号为:<c:out value="${currentVarStaus.index}"/><br/>
当前共计迭代<c:outvalue="${currentVarStaus.count}"/>次;<br/>
<c:if test="${currentVarStaus.first}">当前是第一次迭代操作</c:if><br/>
<c:iftest="${currentVarStaus.last }">当前是最后一次迭代操作</c:if><br/>
</c:forEach>
-------------------用forTokens分拆字符串------------------------<br />
<%//---------------------设置一个字符串的初始值--------------
String namestr=new String("姓名=唐欢|年龄23岁|性别=女");
request.setAttribute("nameStr",namestr);
%>
字符串为:<c:out value="${nameStr }"/><br/>
<!--------用"|"作分隔符 -->
用|作分隔符</br>
<c:forTokensitems="${nameStr }" var="currentName" varStatus="currentVarStatus" delims="|">
当前元素值位:<c:out value="${currentName}"/>;<br/>
当前元素索引号为:<c:out value="${currentVarStatus.index}"/><br/>
当前共计迭代<c:out value="${currentVarStatus.count}"/>次;<br/>
<c:if test="${currentVarStatus.first}">当前是第一次迭代操作</c:if><br/>
<c:iftest="${currentVarStatus.last}">当前是最后一次迭代操作</c:if></br>
</c:forTokens>
</body>
效果图:
4.URL相关的核心标签
- <c:import>:将其它文件包含到当前jsp文件中,其它文件可以是动态文件也可以是静态文件.
格式:
<c:importurl=”url” [context=”context”] [var=”name”]>
score=”[page | request | session |application]” [charEncoding=”encoding”]
......//标签主体
</c:import>
<c:import url=”url” [context=”context”]varReader=”name”
[charEncoding=”encoding”]><span style="font-family: Calibri; font-size: 14pt; "> </span>
- <c:url>:生成URL
格式:
<c:url value="生成的URL">.
例如:
<body>
-----------------使用url标签生成一个URL-------------------------<br/>
<c:urlvalue="test.jsp" scope="page" var="testURL">
<c:param name="baidu"value="百度搜索"/>
</c:url>
生成的URL为:<c:outvalue="${testURL}"/>
</body>
效果图:
- <c:redirect>:把客户端发来的请求重定向到另一个页面
格式1:
<c:redirecturl=”url” [context=”context”]>
......<c:param> //在标签主体中使用<c:param>标签传递其他的参数信息
</c:redirect>
格式2:
<c:redirecturl=”url” [context=”context”] />