JSTL概述
JSTL英文全称是“JSP Standard Tag Library”,即JSP标准标签库之意。
JSTL是由JCP(Java Commnunity Process)指定的标准规范,是一组形如html的标签,使得程序员即使不需要学习Java也可以编写动态Web页。自2002年中期发布后,它已成为JSP平台的一个标准组成部分。
JSTL提供了诸如循环、条件、数据库访问、XML处理、国际化等开发上的工具和流程。
目前最新的版本为1.2,是一个正在不断开发和完善的开放源代码的JSP标签库,它支持多种标签。
JSTL分成了5大类,如下表所示:
功能范围 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标签库(XML) http://java.sun.com/jsp/jstl/xml x
Functions标签库(Functions) http://java.sun.com/jsp/jstl/functions fn
Core标签库
核心标签库主要包括通用标签、条件标签、迭代标签和与URL相关的标签。
在使用Core标签库的JSP文件的开始部分,添加代码: <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
通用标签
<c:out>标签
用于将表达式的结果输出到当前的JspWriter对象中。其功能类似于JSP的表达式<%= %>,或者EL表达式${}。
语法 <c:out value=“value” [default=“default value”] [escapeXml=“true|false”] /> <c:out value=“value” [escapeXml=“true|false”] > default value </c:out>
<c:set>标签
<c:set>标签用于设置JSP页面的各种域范围中的变量,或者设置java.util.Map对象或JavaBean对象的属性。
语法
<c:set value=“value” var=“name” [scope=“范围”]/>将value的值保存到名为name的变量中,同时name变量保存到选定的作用范围中。例如, <c:set value=“sunwk” name=“username” scope=“session”/>
<c:set var=“name” [scope=“范围”] > value </c:set> 将标签体中的内容保存到名为name的变量中,同时name变量保存到选定的作用范围中。例如, <c:set var=“username” scope=“session”> sunwk </c:set>
<c:set value=“value” target=“target” property=“propertyName” />将value的值保存到target对象的propertyName属性中。
<c:set target=“target” property=“propertyName”> value </c:set> 将标签体的内容保存到target对象的propertyName属性中。
例:
<c:out value="${psw }" escapeXml="${user!=null }" >cccccccccccccc</c:out>
<c:remove>标签
<c:remove>标签用于移除JSP页面中指定域范围中的变量。
语法 <c:remove var=“name” [scope=“范围”]/>
<c:catch>标签
<c:catch>标签用于捕获嵌套在标签体内的内容抛出的异常对象,并将异常信息保存到变量中。
语法 <c:catch [var=“name”]> body content </c:catch> 将可能发生异常的代码放到该标签中,如果发生异常,异常信息保存到name变量中。
例:
<c:set var="user" value="Tom" scope="page" />
<c:out value="${user }"></c:out>
<%
Map map = new HashMap();
request.setAttribute("map",map);
%>
<c:set property="city" value="baoding" target="${map }"/>
<br/>
<c:out value="${map.city }"></c:out>
<br/>
<%
Person p = new Person();
request.setAttribute("person",p);
%>
<c:set property="name" value="Susan" target="${person }" />
<c:out value="${person.name }" />
<%
session.setAttribute("date","2011");
%>
${date}
<c:remove var="date" scope="session"/>
<c:out value="${date }">date被删除了</c:out>
<c:catch var="myexception">
<%int i= 3/0; %>
</c:catch>
输出异常
<c:out value="${myexception }"></c:out>
<br/>
异常:
<c:out value="${myexception.message }" /><br/>
堆栈轨迹
<c:out value="${myexception.stackTrace }" /><br/>
条件标签
<c:if>标签
<c:if>标签用来做条件判断,功能类似于JSP中的<%if(boolean){}%>。
<c:choose>、<c:when>、<c:otherwise>标签
<c:choose>标签用于提供条件选择的上下文,它必须与<c:when>和<c:otherwise>标签一起使用。
<c:when>作为<c:choose>的子标签,<c:when>有一个test属性,该属性的值为布尔型,如果test的值为true,则执行<c:when>标签体的内容。
<c:otherwise>标签没有属性,它必须作为<c:choose>标签的最后分支出现。
例:
<c:if test="${date == null }" var="result" scope="page">
${result }表达式成立
</c:if>
迭代标签
<c:forEach>标签
<c:forEach>标签用于对包含了多个对象的集合进行迭代,重复执行它的标签体,或者重复迭代固定的次数。
注意:
items属性并不是一定要有的属性,但是当没有使用items属性时,就一定要使用begin和end属性。
varStatus:用来保存现有遍历计数相关的信息。例如,如果varStatus=“i”,那么会将相应信息放到名称为i的变量中,i变量有四个属性值,index、count、first和last。
<c:forEach items=“${names}” var=“name” varStatus=“i”>
${name}<br>
index:${i.index} <br> count:${i.count} <br>
first:${i.first} <br> last:${i.last}<br>
</c:forEach>
例:
<c:forEach var="i" begin="1" end="9" varStatus="status">
<tr class="${status.count%2==0?'odd':'even'}">
<c:forEach var="j" begin="1" end="${i}" varStatus="status">
<td>
<c:out value="${j}*${i}=${i*j}"></c:out>
</td>
</c:forEach>
</tr>
</c:forEach>
<c:forTokens>标签
<c:forTokens>标签用来浏览一字符串中所有的成员,其成员是由定义符号(Delimiters)所分隔的。
<c:forTokens items=“a:b:c:d” delims=“:” var=“token”>
<c:out value=“${token}” /> <br>
</c:forTokens>
例:
<c:forTokens items="abc efg,xy|333" delims=" ,y|" var="item">
<c:out value="${item }"/><br/>
</c:forTokens>