一. JSP 标准标签库(JSTL)
根据JSTL标签所提供的功能,可以将其分为5个类别。
核心标签
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
格式化标签
<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt"%>
SQL 标签
<%@ taglib prefix="sql" uri="http://java.sun.com/jsp/jstl/sql"%>
XML 标签
<%@ taglib prefix="x" uri="http://java.sun.com/jsp/jstl/xml"%>
JSTL 函数
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions"%>
二. JSTL 库安装
<dependency> <groupId>javax.servlet</groupId> <artifactId>jstl</artifactId> <version>1.2</version> </dependency>
三.核心标签
标签 | 描述 |
---|---|
<c:out > | 用于在JSP中显示数据,就像<%= ... > |
<c:set > | 用于保存数据 |
<c:remove > | 用于删除数据 |
<c:catch> | 用来处理产生错误的异常状况,并且将错误信息储存起来 |
<c:if> | 与我们在一般程序中用的if一样 |
<c:choose> | 本身只当做<c:when>和<c:otherwise>的父标签 |
<c:when> | <c:choose>的子标签,用来判断条件是否成立 |
<c:otherwise > | <c:choose>的子标签,接在<c:when>标签后,当<c:when>标签判断为false时被执行 |
<c:import> | 检索一个绝对或相对 URL,然后将其内容暴露给页面 |
<c:forEach > | 基础迭代标签,接受多种集合类型 |
<c:forTokens> | 根据指定的分隔符来分隔内容并迭代输出 |
<c:param> | 用来给包含或重定向的页面传递参数 |
<c:redirect > | 重定向至一个新的URL. |
<c:url> | 使用可选的查询参数来创造一个URL |
<c:if> 标签
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
test | 条件 | 是 | 无 |
var | 用于存储条件结果的变量 | 否 | 无 |
scope | var属性的作用域 | 否 | page |
<c:set var="salary" scope="session" value="${2000*2}"/> <c:if test="${salary > 2000}"> <p>My salary is: <c:out value="${salary}"/><p> </c:if> <c:catch var ="catchException"> <% int x = 5/0;%> </c:catch> <c:if test = "${catchException != null}"> <p>The exception is : ${catchException} ${catchException.message}<br /> </c:if>
<c:forEach>, <c:forTokens> 标签
属性 | 描述 | 是否必要 | 默认值 |
---|---|---|---|
items | 要被循环的信息 | 否 | 无 |
begin | 开始的元素(0=第一个元素,1=第二个元素) | 否 | 0 |
end | 最后一个元素(0=第一个元素,1=第二个元素) | 否 | Last element |
step | 每一次迭代的步长 | 否 | 1 |
var | 代表当前条目的变量名称 | 否 | 无 |
varStatus | 代表循环状态的变量名称 | 否 | 无 |
<c:forTokens>标签与<c:forEach>标签有相似的属性,不过<c:forTokens>还有另一个分隔符属性:delims
<c:forEach items="${data}" var="item"> ${item.id} : ${item.loginName}</br> </c:forEach> <c:forTokens items="Zara,nuha,roshy" delims="," var="name"> <c:out value="${name}" /> </c:forTokens>
<c:choose>, <c:when>, <c:otherwise> 标签
<c:choose>标签没有属性。
<c:when>标签只有一个属性,条件:test
<c:otherwise>标签没有属性。
<c:choose> <c:when test="${salary <= 0}"> Salary is very low to survive. </c:when> <c:when test="${salary > 1000}"> Salary is very good. </c:when> <c:otherwise> No comment sir... </c:otherwise> </c:choose>
四. 格式化标签
JSTL格式化标签用来格式化并输出文本、日期、时间、数字。引用格式化标签库的语法如下
标签 | 描述 |
---|---|
<fmt:formatNumber> | 使用指定的格式或精度格式化数字 |
<fmt:parseNumber> | 解析一个代表着数字,货币或百分比的字符串 |
<fmt:formatDate> | 使用指定的风格或模式格式化日期和时间 |
<fmt:parseDate> | 解析一个代表着日期或时间的字符串 |
<fmt:bundle> | 绑定资源 |
<fmt:setLocale> | 指定地区 |
<fmt:setBundle> | 绑定资源 |
<fmt:timeZone> | 指定时区 |
<fmt:setTimeZone> | 指定时区 |
<fmt:message> | 显示资源配置文件信息 |
<fmt:requestEncoding> | 设置request的字符编码 |
<fmt:formatDate> 和 <fmt:parseDate>标签
<fmt:formatDate pattern="yyyy-MM-dd" value="${now}" /> <fmt:parseDate value="${now}" var="parsedEmpDate" pattern="dd-MM-yyyy" /> <c:out value="${parsedEmpDate}" />
五. JSTL函数
函数 | 描述 |
---|---|
fn:contains() | 测试输入的字符串是否包含指定的子串 |
fn:containsIgnoreCase() | 测试输入的字符串是否包含指定的子串,大小写不敏感 |
fn:endsWith() | 测试输入的字符串是否以指定的后缀结尾 |
fn:escapeXml() | 跳过可以作为XML标记的字符 |
fn:indexOf() | 返回指定字符串在输入字符串中出现的位置 |
fn:join() | 将数组中的元素合成一个字符串然后输出 |
fn:length() | 返回字符串长度 |
fn:replace() | 将输入字符串中指定的位置替换为指定的字符串然后返回 |
fn:split() | 将字符串用指定的分隔符分隔然后组成一个子字符串数组并返回 |
fn:startsWith() | 测试输入字符串是否以指定的前缀开始 |
fn:substring() | 返回字符串的子集 |
fn:substringAfter() | 返回字符串在指定子串之后的子集 |
fn:substringBefore() | 返回字符串在指定子串之前的子集 |
fn:toLowerCase() | 将字符串中的字符转为小写 |
fn:toUpperCase() | 将字符串中的字符转为大写 |
fn:trim() | 移除首位的空白符 |
fn:contains()函数
<c:set var="theString" value="I am a test String" />
<c:if test="${fn:contains(theString, 'test')}">
<p>Found test string    ${pageContext.session } <p>
</c:if>