一、核心标签
核心标签是最常用的JSTL标签。引用核心标签库的语法如下:
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
标签 | 描述 |
<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 |
二、JSTL 核心标签库标签共有13个,功能上分为4类:
1.表达式控制标签:out、set、remove、catch
2.流程控制标签:if、choose、when、otherwise
3.循环标签:forEach、forTokens
4.URL操作标签:import、url、redirect
2.1.1、jstl <c:out>标签
标 记<c:out>显示表达式的结果,类似的方式<%=%>效果,与其不同的是标记<c:out>,可以使用简单的 “.”符号来访问属性。例如,要访问customer.address.street,使用的标签是<c:out value="customer.address.street"/>.
标记<c:out>可自动转义XML标签,以便他们都不会计算为实际的标签。
属性:
标记<c:out>具有以下属性:
属性 | 描述 | 必需 | 默认值 |
value | 输出的信息 | Yes | None |
default | 反馈输出的信息 | No | body |
escapeXml | True,如果标签转义特殊XML字符 | No | true |
例子1:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title><c:out> Tag Example - www.yiibai.com</title>
</head>
<body>
<c:out value="${'<tag> , &'}"/>
</body>
</html>
这将产生以下结果:
<tag> , &
例子2:
<c:out value="<要显示的数据对象(未使用转义字符)>" escapeXml="true" default="默认值"></c:out><br/>
<c:out value="<要显示的数据对象(使用转义字符)>" escapeXml="false" default="默认值"></c:out><br/>
<c:out value="${null}" escapeXml="false">使用的表达式结果为null,则输出该默认值</c:out><br/>
那么网页显示效果为:
2.1.2、jstl <c:set>标签
<c:set>标记是JSTL的setProperty动作的友好版本。标签是有用的,因为它的表达式求值,并使用结果的JavaBean或java.util.Map对象设置一个值。
属性:
<c:set>标记具有以下属性:
属性 | 描述 | 必需 | 默认值 |
value | 信息 | No | body |
target | 变量的名称,其属性应该修改 | No | None |
property | 要修改的属性 | No | None |
var | 变量的名称存储信息 | No | None |
scope | 变量来存储信息的范围 | No | Page |
如果指定目标,属性也必须指定。
例子:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title><c:set> Tag Example - www.yiibai.com</title>
</head>
<body>
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:out value="${salary}"/>
</body>
</html>
这将产生以下结果:
4000
2.1.3、jstl <c:remove>标签
<c:remove>标签删除变量,无论是从指定的范围内或范围内的变量(如果没有指定范围)。这个动作通常是不特别有帮助,但它可以帮助确保一个JSP范围内的资源,它负责清理。
属性:
<c:remove>标签具有以下属性:
属性 | 描述 | 必选 | 默认 |
var | 删除的变量名称 | Yes | None |
scope | 要删除变量的范围 | No | All scopes |
例子:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title><c:remove> Tag Example - www.yiibai.com</title>
</head>
<body>
<c:set var="salary" scope="session" value="${2000*2}"/>
<p>Before Remove Value: <c:out value="${salary}"/></p>
<c:remove var="salary"/>
<p>After Remove Value: <c:out value="${salary}"/></p>
</body>
</html>
这将产生以下结果:
Before Remove Value: 4000
After Remove Value:
2.1.4、jstl <c:catch>标签
用于异常捕获的<c:catch>标签捕获任何Throwable,发生在它的身上,有选择地公开。简单地用于错误处理,更优雅地处理这个问题。
属性:
<c:catch>标签具有以下属性:
属性 | 描述 | 必选 | 默认 |
var | 变量的名称保存在java.lang。如果抛出的Throwable在body元素内。 | No | None |
实例:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title><c:catch> Tag Example - www.yiibai.com</title>
</head>
<body>
<c:catch var ="catchException">
<% int x = 5/0;%>
</c:catch>
<c:if test = "${catchException != null}">
<p>The exception is : ${catchException} <br />
There is an exception: ${catchException.message}</p>
</c:if>
</body>
</html>
这将产生以下结果:
The exception is : java.lang.ArithmaticException: / by zero
There is an exception: / by zero
<c:catch> 标签允许在 JSP 页面中捕捉异常。它包含一个 var 属性,是一个描述异常的变量,改变量可选。若没有 var 属性的定义,那么仅仅捕捉异常而不做任何事情,若定义了 var 属性,则可以利用 var 所定义的异常变量进行判断转发到其他页面或提示报错信息。看一个示例。
- <c:catch var="err">
- ${param.sampleSingleValue[9] == 3}
- </c:catch>
- ${err}
当“ ${param.sampleSingleValue[9] == 3} ”表达式有异常时,可以从 var 属性“ err ”得到异常的内容,通常判断“ err ”是否为 null 来决定错误信息的提示。
2.2.1、jstl <c:if>标签
<c:if>标签计算表达式,只有当表达式的值为true,则显示其主体内容。
属性:
<c:if>标签具有以下属性:
属性 | 描述 | 必需 | 默认 |
test | 条件计算 | Yes | None |
var | 保存判断结果 true 或 false 的变量名,该变量可供之后的工作使用(可选) | No | None |
scope | 变量的作用范围,若没有指定,默认为保存于 page 范围中的变量(可选) | No | page |
例子:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title><c:if> Tag Example - www.yiibai.com</title>
</head>
<body>
<c:set var="salary" scope="session" value="${2000*2}"/>
<c:if test="${salary > 2000}" var="visits">
<p>My salary is: <c:out value="${salary}"/><p>
</c:if>
<br>
${visits} <br>
</body>
</html>
这将产生以下结果:
My salary is: 4000
true
2.2.2、jstl 用于复杂判断的 <c:choose> 、 <c:when> 、 <c:otherwise> 标签
这三个标签用于实现复杂条件判断语句,类似“ if,elseif ”的条件语句。
q <c:choose> 标签没有属性,可以被认为是父标签, <c:when> 、 <c:otherwise> 将作为其子标签来使用。
q <c:when> 标签等价于“ if ”语句,它包含一个 test 属性,该属性表示需要判断的条件。
q <c:otherwise> 标签没有属性,它等价于“ else ”语句。
下面看一个复杂条件语句的示例。
<c:set var="salary" scope="session" value="${2000*2}"/>
<p>Your salary is : <c:out value="${salary}"/></p>
<c:choose>
<c:when test="${salary <= 1000}">
Salary is very low to survive.
</c:when>
<c:when test="${salary > 3000}">
Salary is very good.
</c:when>
<c:otherwise>
No comment sir...
</c:otherwise>
</c:choose>
2.3.1、jstl <c:forEach>标签
<c:forEach>标记有以下属性:
属性 | 描述 |
items | 进行循环的集合(可选) |
begin | 开始条件(可选) |
end | 结束条件(可选) |
step | 循环的步长,默认为 1 (可选) |
var | 做循环的对象变量名,若存在 items 属性,则表示循环集合中对象的变量名(可选) |
varStatus | 显示循环状态的变量(可选) |
下面看一个集合循环的示例。
<c:forEach>例子:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title><c:forEach> Tag Example - www.yiibai.com</title>
</head>
<body>
<c:forEach var="i" begin="1" end="5">
Item <c:out value="${i}"/><p>
</c:forEach>
</body>
</html>
这将产生以下结果:
Item 1
Item 2
Item 3
Item 4
Item 5
例子2:
必须先头部引入
<%@page import="java.util.List"%>
<%@page import="java.util.ArrayList"%>
<h4><c:out value="forEach实例"/></h4>
<hr>
<%
List a=new ArrayList();
a.add("贝贝");
a.add("晶晶");
a.add("欢欢");
a.add("莹莹");
a.add("妮妮");
request.setAttribute("a",a);
%>
<B><c:out value="不指定begin和end的迭代:" /></B><br>
<c:forEach var="fuwa" items="${a}">
<c:out value="${fuwa}"/><br>
</c:forEach>
<B><c:out value="指定begin和end的迭代:" /></B><br>
<c:forEach var="fuwa" items="${a}" begin="1" end="3" step="2">
<c:out value="${fuwa}" /><br>
</c:forEach>
<B><c:out value="输出整个迭代的信息:" /></B><br>
<c:forEach var="fuwa" items="${a}" begin="3" end="4" step="1" varStatus="s">
<c:out value="${fuwa}" />的四种属性:<br>
所在位置,即索引:<c:out value="${s.index}" /><br>
总共已迭代的次数:<c:out value="${s.count}" /><br>
是否为第一个位置:<c:out value="${s.first}" /><br>
是否为最后一个位置:<c:out value="${s.last}" /><br>
</c:forEach>
2.3.2、jstl <c:forEach>标签
<c:forTokens>标签有类似<c:forEach>的属性,除了一个额外的属性delims指定要使用的字符作为分隔符
<c:forTokens>例子:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<html>
<head>
<title><c:forTokens> Tag Example - www.yiibai.com</title>
</head>
<body>
<c:forTokens items="Zara,nuha,roshy" delims="," var="name">
<c:out value="${name}"/><p>
</c:forTokens>
</body>
</html>
这将产生以下结果:
Zara
nuha
roshy
<br>
<br>
<c:forEach items="Zara,nuha,roshy" var="name">
<c:out value="${name}"/><p>
</c:forEach>
<br>
<br>
<c:forTokens items="Zara,nuha,roshy" delims="," var="name">
<c:out value="${name}"/><p>
</c:forTokens>
例子2:
<!-- forToken实例 -->
<h4>
<c:out value="forToken实例" />
</h4>
<hr>
<c:forTokens items="北、京、欢、迎、您" delims="、" var="c1">
<c:out value="${c1}"></c:out>
</c:forTokens>
<br>
<c:forTokens items="123-4567-8854" delims="-" var="t">
<c:out value="${t}"></c:out>
</c:forTokens>
<br>
<c:forTokens items="1*2*3*4*5*6*7" delims="*" begin="1" end="3"
var="n" varStatus="s">
<c:out value="${n}" />的四种属性:<br>
所在位置,即索引:<c:out value="${s.index}" />
<br>
总共已迭代的次数:<c:out value="${s.count}" />
<br>
是否为第一个位置:<c:out value="${s.first}" />
<br>
是否为最后一个位置:<c:out value="${s.last}" />
<br>
</c:forTokens>
2.4.1、jstl <c:import>标签