四、JSTL标签库
1、JSTL简介
JSTL(Java Server Pages Standard Tag Library)
JSTL标准当初由Sun指定,由Apache的Jakarta小组负责实现
当前JSTL版本是1.2
JSTL是为了简化JSP页面设计
JSTL将一些常用的功能使用Java类来实现,通过标签在JSP页面使用。这个类的实现,要提供tld的描述文件
使用taglib指令
格式:<%@ taglib prefix="prefix_name" uri="uri_path" | tagdir="tag_dir" %>
JSTL组成
功能范围 | 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 | http://java.sun.com/jsp/jstl/xml | x |
Functions | http://java.sun.com/jsp/jstl/functions | fn |
Core、I18N是最常用的一组标签。SQL标签在使用MVC模式开发时不再使用,XML、Functions使用不多。下面主要学习Core和I18N
2、JSTL常用标签
Core标签库
通用标签
1)out标签(用来将值输出到页面)
格式1:<c:out value="value" [escapeXml="{true|false}"] [default="defaultValue"]/>
格式2:<c:out value="value" [escapeXml="{true|false}"]>default value</c:out>
escapeXml:是否需要对xml中特殊符号进行转义
2)set标签(设置保存值)
格式1:<c:set value="value" var="varName" [scope="{page|request|session|application}"]/>
格式2:<c:set var="varName" [scope="{page|request|session|application}"]>body content</c:set>
格式3:<c:set value="value" target="targetObj" property="propertyName"/>
格式4:<c:set target="targetObj" property="propertyName">body content</c:set>
var:变量名
value:变量值
可以将值保存到哪个目标对象的属性里
3)remove标签(移除变量,所有作用域对象)
格式:<c:remove var="varName" [scope="{page|request|session|application}"]/>
4)catch标签(没有var只是简单的处理而不保存)
格式:<c:catch [var="varName"]>处理代码</c:catch>
例子:建立动态网站项目JSTL
新建index.jsp
<%@ page language="java" contentType="text/html; charset=UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>JSTL标签库</title>
</head>
<body>
<c:set value="${'<strong>test</strong>'}" var="test"/>
pageScope.test:<c:out value="${pageScope.test }"/><br/>
pageScope.test:<c:out value="${pageScope.test }" escapeXml="false"/><br/>
requestScope.test:<c:out value="${requestScope.test }"/><br/>
</body>
</html>
执行结果:
条件标签
1)if标签
格式1:<c:if test="testCondition" var="varName" [scope="{page|request|session|application}"]/>
格式2:<c:if test="testCondition" [var="varName"] [scope="{page|request|session|application}"]>body content</c:if>
test:里面写条件
2)choose标签
格式:<c:choose>
{
<c:when test="testCondition">
body content
</c:when>
}+
{
<c:otherwise>
block
</c:otherwise>
}?
</c:choose>
说明:相当于switch case语句
迭代标签
1)forEach(items:Collection、Iterator、Enumeration、Map)
格式:<c:forEach [var="varName"] items="collection"
[varStatus="varStatusName"] [begin="begin"] [end="end"]
[step="step"]>
body content
</c:forEach>
items:指定迭代的内容
varStatus:这个循环的循环状态
step:步长
2)forTokens:标签通过指定分隔符将字符串分隔为一个数组然后迭代它们
格式:<c:forTokens items="stringOfTokens" delims="delimiters"
[var="varName"] [varStatus="varStatusName"]
[begin="begin"] [end="end"] [step="step"]>
body content
</c:forTokens>
items:指定的一个字符串
delims:切分的字符,得到一个字符串数据,进行循环
导入及重定向标签
1)import(作用类似include动作,但可导入其它web内容)
格式:<c:import url="url" [context="context"] [var="varName"]
[scope="{page|request|session|application}"]
[charEncoding="charEncoding"]
{<c:param name="name" value="value"/>}*
</c:import>
url:链接地址,完整的url
context:上下文的名字
var:导入内容的名字
c:param:给页面传递的参数,可以有,可以没有,可以有一条,可以有多条
2)url(使用URL重写规则构建一个新的URL)
格式:<c:url value="value" [context="context"] [var="varName"]
[scope="{page|request|session|application}"]/>
value:新的url
3)redirect(重定向)
格式:<c:redirect url="value" [context="context"]>
{<c:param name="name" value="value"/>}*
</c:redirect>
url:指定重定向的页面
3、I18N标签库(国际化)
1)setLocale标签(设置区域)
格式:<fmt:setLocale value="locale" [variant="{WIN|MAX|POSIX}"]
[scope="{page|request|session|application}"]/>
value:zh_CN、zh_TW
variant:指定操作系统
2)setBundle(指定国际化对应的properties文件)
格式:<fmt:setBundle basename="basename" [var="varName"]
[scope="{page|request|session|application}"]/>
3)message(用来输出信息)
格式:<fmt:message key="msgKey" [bundle="resourceBundle"]
[var="varName"] [scope="{page|requeat|session|application}"]>
{<fmt:param>body context</fmt:param>}?
</fmt:message>
4)formatNumber标签
格式:<fmt:formatNumber value="numericValue"
[type=="{number|currency|percent}] [pattern="customPattern"]
[currencyCode="currencyCode"] [currencySymbol="currencySymbol"]
[groupingUsed="true|false"] [maxIntegerDigits="maxIntegerDigits"]
[minIntegerDigits="minIntegerDigits"]
[maxFractionDigits="maxFractionDigits"]
[minFractionDigits="minFractionDigits"]
[scope="{page|request|session|application}"]/>
type:类型,可以是数字、货币、百分比
pattern:指定具体的格式
currencyCode:货币代码
currencySymbol:货币符号
maxIntegerDigits、minIntegerDigits:整型的大小限制
maxFractionDigits、minFractionDigits:分数的大小限制
5)formatDate标签
格式:<fmt:formatDate value="date" [type="{time|date|both}"]
[dateStyle="{default|short|medium|long|full}"]
[timeStyle="{defualt|short|medium|long|full}"]
[pattern="customPattern"] [var="varName"]
[scope="{page|request|session|application}"]/>
value:要格式化的日期的对象
type:类型
dateStyle:对于日期的格式
timeStyle:对于时间的格式
var:格式化之后对象属性的名称