准备工作
https://jstl.dev.java.net/下载JSTL实现,如:jstl-impl-1.2.jar,必须放在Web应用程序的WEB-INF/lib文件夹中。
核心标签库
要使用jstl标签库,必须在JSP网页上使用taglib指示元素定义前置名称与uri参考。例如,要使用核心标签库,可以如下定义:
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
流程控制标签
1.if:条件判断if,不支持else
<c:if test="${}">
</c:if>
2.若要用else,可用choose ,when, otherwise.当when的测试为true,则不理会otherwise,之后的when也不再测试。
<c:choose>
<c:when test="${xxx}">xxxxx</c:when>
<c:when test="${xxx}">xxxxx</c:when>
... ...
<c:otherwise>xxx</c:otherwise>
</c:choose>
3.循环forEach
<c:forEach var="item" items="${list.items}">
...
</c:forEach>
<c:forEach>标签的items属性可以是数组、collection、Iterator、Enumeration、Map与String,每次会依序从items指定的对象中取出一个元素,并指定给var属性设置的变量,可以用var变量来取得该元素。如果items指定的是Map,则设置给var的对象是Map.Entry,通过${item.key},${item.value}去的键值。
如果是字符串,则必须是个以逗号区隔的值,<c:forEach>会自动以逗号来切割字符串,每个切割出来的字符串指定给var。
错误处理标签
1.如果要在发生异常的网页直接捕捉异常对象,可以使用<c:catch>将可能产生异常的网页段落包起来。
<c:catch var="error">
....
</c:catch>
<c:if test="${error != null}">
...
</c:if>
网页导入
1,转译时直接将另一JSP网页合并至目前网页进行转译,如:
<%@include file="/WEB-INF/jspf/header.jspf"%>
2.通过<jsp:include>标签,可在运行时按条件,动态决定是否包括另一个网页,该网页执行完毕后,再回到目前网页。在包括灵异网页时可以带有参数。如:
<jsp:include page="add.jsp">
<jsp:param name="a" value="1">
<jsp:param name="b" value="2">
</jsp:include>
3.还可以使用<jsp:import>,其用法和include相似,除了可以导入目前web应用程序中的网页之外,开可以导入非目前Web应用程序中的网页。
重定向
<c:redirect url="xxx.jsp">
...
</c:redirect>
输出/打印
<c:out>
<c:out>会自动将角括号、单引号、双引号等字符用替代字符取代。
I18N兼容性标签库
<%@taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
信息标签
<fmt:bundle basename="xxx">
<fmt:message key="xxx">
</fmt:bundle>
日期格式
<fmt:formatDate value="$now" pattern="dd.MM.yy">
<fmt:parseDate value="xxx" />
数字格式
<fmt:formatNumber value="xxx" pattern="#,#00.0#" />
<fmt:parseNumber value="xxx" />
XML标签库
xpath路径
解析标签
<%@taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
要使用xml标签库处理xml文件,首先必须先解析xml文件.
<c:import var="xml" url="xxx.xml" charEncoding="UTF-8" />
<x:parse var="bookmarks" doc="${xml}" />
也可以在<x:parse>的body放置xml进行解析,例如:
<x:parse var="xxx">
....(xml片段)
</x:parse>
流程处理标签
<x:if>在select属性指定选择的元素存在时执行。
<x:if select="xxx">
</x:if>
其他choose,when.otherwise用法与核心标签库用法类似。
循环标签
<x:forEach var="xxx" select="xxx">
</x:forEach>
函数标签库
<%@taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
fn:startWith()
fn:length()
fn:replace()