一、jstl表达式的定义
jstl即JavaServer Pages Standard Tag Library,JSP标准标签库。
二.为什么使用jstl表达式
其实不使用jst也可以实现相应的功能,但是如果不使用的话就需要写大量java程序到jsp中,这使得jsp异常的复杂,令人抓狂。因此使用jstl可以使得jsp代码变得简洁美观,使得代码维护起来更加容易。
三、如何使用jstl
1.jstl的配置
(1)导入standard.jar和jstl.jar。
(2)在JSP页面上引入 JSTL 的引用,即:
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
2.常用标签解析(核心标签)
编号 | 标签 | 描述 |
1 | <c:out | 类似 |
2 | <c:set | 在“范围”中设置表达式求值的结果 |
3 | <c:remove | 删除范围变量(从指定的特定范围中) |
4 | <c:catch | 捕捉发生在其主体中的任何可抛出对象,并可选地暴露它。 |
5 | <c:if | 简单的条件标签,如果提供的条件为真,则对其主体进行评估 |
6 | <c:choose | 简单的条件标签,用于建立互斥条件操作的上下文,标记为<when>和<otherwise>。 |
7 | <c:when | 如果条件评估为true,则包含<choose>的子标签。 |
8 | <c:otherwise | <when>标签之后的<choose>子标签,只有当所有先前条件都被评估为false时才运行。 |
9 | <c:import | 检索绝对或相对URL,并将其内容公开到页面,"var"中的字符串或"varReader"中的"Reader"。 |
10 | <c:forEach | 基本的迭代标签,接受许多不同的集合类型,并支持子集和其他功能。 |
11 | <c:forTokens | 迭代令牌,由指定的分隔符来分隔。 |
12 | <c:param | 将参数添加到包含“import”标签的URL。 |
13 | <c:redirect | 重定向到新的URL |
14 | <c:url | 创建可选查询参数的URL |
基本语法:<c:out value="<string>" default="<string>" escapeXml="<true|false>"/>(1)<c:out>:用于在JSP中显示数据,和<%= ... >功能相似
(2)<c:set>:用于保存数据
基本语法:<c:set var="<string>" value="<string>" target="<string>" property="<string>" scope="<string>"/>
(3)<c:remove>:标签用于移除一个变量
基本语法:<c:remove var="<string>" scope="<string>"/>
(4)<c:catch> 标签:捕获其主体中发生的任何Throwable
异常,并可选地公开它。它用于错误处理,并更加优雅地处理该问题。
基本语法:<c:catch var="<string>">... </c:catch>
<c:catch>
标签具有以下属性 -
属性 | 描述 | 必需 | 默认 |
---|---|---|---|
var | 要保存java.lang.Throwable 变量的名称,如果由主体中的元素抛出。 | 否 | None |
(5)<c:if>标签:判断表达式的值,如果表达式的值为 true 则执行其主体内容
基本语法:<c:if test="<boolean>" var="<string>" scope="<string>">...</c:if>
(6)<c:choose>、<c:when>、<c:otherwise>:
<c:choose>
标记的作用就像一个Java的switch
语句,它允许在多个替代方案之间进行选择。 在switch
语句中有case
语句,而<c:choose>
标签具有<c:when>
标签,作用效果一样。 就像switch
语句中的default
子句指定一个默认动作一样,<c:choose>
将<c:otherwise>
作为默认子句。
属性
<c:choose>
标签没有任何属性。<c:when>
标签具有以下列出的一个属性。<c:otherwise>
标签没有任何属性。
<c:when>
标签具有以下属性 -
属性 | 描述 | 必需 | 默认 |
---|---|---|---|
test | 评估条件 | 是 | None |
这三个标签一般是配合使用,类似if{...}else if{...}else{....}
语法格式:
<c:choose>
<c:when test="<boolean>">
...
</c:when>
<c:when test="<boolean>">
...
</c:when>
...
...
<c:otherwise>
...
</c:otherwise>
</c:choose>
(7)<c:import>标签:检索一个绝对或相对 URL,然后将其内容暴露给页面,和<jsp:include>功能相似。
语法格式:
<c:import
url="<string>"
var="<string>"
scope="<string>"
varReader="<string>"
context="<string>"
charEncoding="<string>"/>
(8) <c:forEach>:基础迭代标签,接受多种集合类型。它封装了Java中的for,while,do-while循环。
这个标签是通过脚本嵌入Java实现for
或while
循环的一个好的选择。 <c:forEach>
标签是一个常用的标签,使用它来迭代一组对象。 <c:forTokens>
标签用于将字符串分割成令牌,并遍历每个令牌。
属性
<c:foreach>
标签具有以下属性 -
属性 | 描述 | 必需 | 默认 |
---|---|---|---|
delims | 用作分隔符的字符 | 是 | None |
基本语法:
<c:forEach
items="<object>"
begin="<int>"
end="<int>"
step="<int>"
var="<string>"
varStatus="<string>">
(9)<c:url>: 使用可选的查询参数来创造一个URL,当某个URL地址依据不同条件修改时,就能体现出<c:url>标签的真正作用了
(10)<c:param>:用来给包含或重定向的页面传递参数
(11)<c:redirect>:通过促进自动URL重写将浏览器重定向到另一个URL,它支持上下文相关URL,并且还支持<c:param>
标签。
属性
<c:redirect>
标签具有以下属性 -
属性 | 描述 | 必需 | 默认 |
---|---|---|---|
url | 将用户浏览器重定向到的URL | 是 | None |
context | / 之后是本地Web应用程序的名称 | 否 | 当前应用 |
语法:<c:redirect url="<string>" context="<string>"/>
四、延伸
jstl也提供了格式化标签、SQL标签、xml标签、jstl函数,但这些标签并不常用,这里不一一赘述,当用到时自行查找即可。
格式化标签:(<%@ taglib prefix="fmt" uri="http://java.sun.com/jsp/jstl/fmt" %>)
SQL标签:(<%@ taglib prefix="sql” uri="http://java.sun.com/jsp/jstl/sql" %>)
jstl函数(<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>)
五、EL概述
JSP表达式语言(EL)使得可以轻松访问存储在JavaBeans组件中的应用程序数据。JSP EL允许用来创建算术和逻辑表达式。 在JSP EL表达式中,可以使用整数,浮点数,字符串,布尔值的内置常量为true
和false
,以及null
值。
JSP EL允许为这些属性值指定一个表达式。JSP EL的简单语法如下 -
${expr}
这里expr
指定表达式本身。JSP EL中最常见的操作符是:.
和[]
。 这两个运算符用来访问Java Beans和内置JSP对象的各种属性。
例如,上面的语法<jsp:setProperty>
标签可以写成一个表达式,如 -
<jsp:setProperty name = "box" property = "perimeter"
value = "${2*box.width+2*box.height}"/>
如要停用EL表达式的评估计算,可设置page
指令的isELIgnored
属性如下:
<%@ page isELIgnored = "true" %>
此属性的有效值为true
和false
。 如果设置为true
,EL表达式在静态文本或标签属性中显示时将被忽略。 如果为false
,EL表达式将由容器进行评估。
JSP表达式语言(EL)支持Java支持的大多数算术和逻辑运算符。下表列出了最常用的运算符 -
编号 | 运算符 | 描述 |
---|---|---|
1 | . | 访问一个bean属性或Map的项 |
2 | [] | 访问数组或List元素 |
3 | () | 组合子表达式以更改评估顺序 |
4 | + | 相加 |
5 | - | 减去或取反一个值 |
6 | * | 乘法 |
7 | / 或 div | 除法 |
8 | % 或 mod | 求模 |
9 | == 或 eq | 测试等于 |
10 | != 或 ne | 测试不等于 |
11 | < 或 lt | 测试小于 |
12 | > 或 gt | 测试大于 |
13 | <= 或 le | 测试小于或等于 |
14 | >= 或 ge | 测试大于或等于 |
15 | && 或 and | 测试逻辑与 |
16 | or | 测试逻辑或 |
17 | ! 或 not | 一元布尔互补 |
18 | empty | 测试空变量值 |
JSP EL隐式对象
JSP表达式语言支持以下隐式对象 -
编号 | 隐式对象 | 描述 |
---|---|---|
1 | pageScope | 来自页面范围的范围变量 |
2 | requestScope | 来自请求范围的范围变量 |
3 | sessionScope | 会话范围的范围变量 |
4 | applicationScope | 应用范围的范围变量 |
5 | param | 请求参数作为字符串 |
6 | paramValues | 请求参数作为字符串集合 |
7 | header | HTTP请求标头作为字符串 |
8 | headerValues | HTTP请求标头作为字符串集合 |
9 | initParam | 上下文初始化参数 |
10 | cookie | Cookie值 |
11 | pageContext | 当前页面的JSP PageContext对象 |
可以在表达式中使用这些对象,就像它们是变量一样。以下示例将帮助了解这些概念 -
pageContext
对象可以访问pageContext JSP对象。 通过pageContext
对象,可以访问请求对象。 例如,要访问请求的传入查询字符串,可以使用以下表达式 -
${pageContext.request.queryString}
pageScope
,requestScope
,sessionScope
和applicationScope
变量提供对存储在每个范围级别的变量的访问。
例如,如果需要显式访问应用程序范围中的变量,则可以通过applicationScope
变量 - applicationScope.box
来访问它。
param和paramValues对象
可以通过param
和paramValues
对象的request.getParameter
和request.getParameterValues
方法来访问参数值。
例如,要访问order
参数,请使用表达式${param.order}
或${param [“order”]}
。
param
对象返回单个字符串值,而paramValues
对象返回字符串数组。
header和headerValues对象
header
和headerValues
对象可以访问通过request.getHeader
和request.getHeaders
方法通常可用的头值。
例如,要访问user-agent
头,可使用${header.user-agent}
或${header [“user-agent”]}
表达式。
header
对象返回单个字符串值,而headerValues
对象返回字符串数组。