JSTL即JSP标准标签库标准,当前标准的版本是1.1。JSTL是JSP标签库的一种应用。
官方网址:
http://java.sun.com/products/jsp/jstl/
JSTL标记库由以下标记组成:
core:核心标签,流程控制, 处理作用域变量, 变量的显示, 异常的处理, url的处理;
formatting:日期, 时间, 数字等的有关i18n的格式化处理;
xml:解析xml和通过xsl转换文档格式的处理;
sql:SQL数据库操作的处理。
比较常用的是core和formatting标签。xml标签用于特定场景的数据显示,sql标签用于敏捷开发(j2ee开发为了分工和关注分离,往往通过dao在java代码中封装sql操作)
安装JSTL
复制以下jar文件到WEB-INF/lib:
jstl.jar
standard.jar
core标签
在需要核心标签支持的JSP页面中加入:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
设置和显示变量
国家:<c:out value="${address.state}" default="不详"/><br /><c:set target="${address}" property="state" value="中国"/>国家:<c:out value="${address.state}" default="不详"/><br />
out可以设置默认值,这是EL无法做到的。
创建变量(上面是赋值javabean属性):
<c:set var="test" value="变量测试" scope="session"/>${test }
条件流程
类似java的if语句:
<c:if test="true"> 包含在<c:if>中的内容.<br/></c:if>
test属性中的是结果为bool型的表达式。
分支流程
类似java的if/else(虽然表面上看起来更像switch/case):
<c:choose> <c:when test="${address.city==’北京’}"> 地址.城市:北京 </c:when> <c:when test="${address.city==’上海’}"> 地址.城市:上海 </c:when> <c:otherwise> 地址.城市:其他城市 </c:otherwise> </c:choose>
循环流程
简单的循环, 类似for循环:
<c:forEach var="i" begin="0" step="1" end="9"> 循环${i}次<br/> </c:forEach>
类似iterator的用法:
<%List list=new ArrayList();list.add("中国");list.add("美国");list.add("日本"); request.setAttribute("countryInfos",list);%><p />国家列表:<br /> <c:forEach items="${countryInfos}" var="country">${country }<br /> </c:forEach>
处理Java异常
<c:catch var="e"> <% if (true){ throw new Exception("测试异常的消息"); } %> </c:catch>打印异常的消息:${e.message} <br>
处理URL
在需要url重写或者url中包含特殊字符时,需要url标签:
定义url
<c:url value="" var="localUrl"> <c:param name="persent" value="70%" /></c:url>
在html链接中使用url类型变量:
<a href="${localUrl}">本页面URL</a><br />
格式化标签
在需要格式化标记支持的JSP页面中加入:
<%@ taglib prefix="fmt"
uri="http://java.sun.com/jsp/jstl/fmt" %>
格式化数字
<c:set var="aNumber" value="100.1257000003"></c:set>显示为金额: <fmt:formatNumber type="currency" value="${aNumber}" /><br />显示为百分数: <fmt:formatNumber type="percent" value="${aNumber}"/><br />显示为指定格式: <fmt:formatNumber value="${aNumber}" pattern=".###"/><br />
常用格式:
type="currency", 使用本地货币;
type="percent", 使用百分数格式;
pattern=".###", 自定义格式, 小数点后保留3位。
格式化日期
将字符串解析为日期对象:
<fmt:parseDate var="aDate" pattern="yyyy-MM-dd" value="1999-1-1"/>
将日期对象格式化输出:
<fmt:formatDate value="${aDate}" pattern="yyyy年MM月dd日"/><br />
国际化消息
配置web.xml文件, 加入:
<context-param> <param-name> javax.servlet.jsp.jstl.fmt.localizationContext </param-name> <param-value>ApplicationResources</param-value> </context-param>
在classpath根目录下编写ApplicationResources.properties:
userName=User Name
在JSP页面中使用:
<fmt:message key="userName" />