JSP标准标签库(JSP Standard Tag Library,JSTL)是实现Web应用程序中常见的通用功能的定制标签库集,程序员使用JSTL标签来避免在JSP页面中使用脚本。
JSTL英文全称是“JSP Standard Tag Library”,即JSP标准标签库之意。JSTL是由JCP(Java Commnunity Process)指定的标准规范,是一组形如html的标签,使得程序员即使不需要学习Java也可以编写动态Web页。自2002年中期发布后,它已成为JSP平台的一个标准组成部分。
JSTL提供了诸如循环、条件、数据库访问、XML处理、国际化等开发上的工具和流程。
学习JSTL需要先下载所需要的JAR包 jstl.jar、standard.jar。
下面对JSTL的各个标签库进行简单的介绍:
(1)核心标签库中包含了实现WEB应用中的通用操作的标签。例如,用于输出一个变量内容的<c:out>标签、用于条件判断的<c:if>标签、用于迭代循环的<c:forEach>标签。
(2)国际化/格式化标签库中包含实现WEB应用程序的国际化的标签。例如,设置JSP页面的本地信息、设置JSP页面的时区、绑定资源文件,使本地敏感的数据(例如数值、日期等)按照JSP页面中设置的本地格式显示。
(3)数据库标签库中包含用于访问数据库和对数据库中的数据进行操作的标签。例如,从数据源中获得数据库连接、从数据库表中检索数据等。由于在软件分层的开发模型中,JSP页面仅用作表现层,我们一般不在JSP页面中直接操作数据库,而是在业务逻辑层或数据访问层操作数据库,所以,JSTL中提供的这套数据库标签库没有多大的实用价值。
(4)XML标签库中包含对XML文档中的数据进行操作的标签。例如,解析XML文档、输出XML文档中的内容,以及迭代处理XML文档中的元素。因为XML广泛应用于WEB开发,对XML文档的处理非常重要,XML标签库使处理XML文档变得简单方便,这也是JSTL的一个重要特征。
(5)JSTL中提供的一套EL自定义函数包含了JSP页面制作者经常要用到的字符串操作。例如,提取字符串中的子字符串、获取字符串的长度和处理字符串中的空格等。
二、核心标签库
1、通用标签
<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:out value="${psw }" escapeXml="${user!=null }" >ccc</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: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 }" />
<c:remove>标签
<c:remove>标签用于移除JSP页面中指定域范围中的变量。
语法:
<c:remove var=“name” [scope=“范围”]/>
实例:
<%
session.setAttribute("date","2011");
%>
${date}
<c:remove var="date" scope="session"/>
<c:out value="${date }">date被删除了</c:out>
<c:catch>标签
<c:catch>标签用于捕获嵌套在标签体内的内容抛出的异常对象,并将异常信息保存到变量中。
语法:
<c:catch [var=“name”]>
body content
</c:catch>
将可能发生异常的代码放到该标签中,如果发生异常,异常信息保存到name变量中。
实例:
<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/>
2、条件标签
<c:if>标签
<c:if test="${date == null }" var="result" scope="page">
${result }表达式成立
</c:if>
<c:choose>、<c:when>、<c:otherwise>标签
1.<c:choose>标签用于提供条件选择的上下文,它必须与<c:when>和<c:otherwise>标签一起使用。
2.<c:when>作为<c:choose>的子标签,<c:when>有一个test属性,该属性的值为布尔型,如果test的值为true,则执行<c:when>标签体的内容。
3.<c:otherwise>标签没有属性,它必须作为<c:choose>标签的最后分支出现。
3、迭代标签
<c:forEach>
语法:
<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>
实例:
<%
List list = new ArrayList();
list.add("aaa");
list.add("bbb");
list.add("fff");
list.add("ggg");
list.add("ttt");
list.add("uuu");
list.add("qqq");
list.add("rrr");
list.add("yyy");
request.setAttribute("list",list);
%>
<c:forEach items="${list }" var="curElement" begin="2" end="6" step="2">
<c:out value="${curElement}"></c:out>
</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="123456789" delims="137" var="token">
<c:out value="${token}"></c:out><br>
</c:forTokens>