JSP API 通过 <jsp:usebean></jsp:usebean>
操作允许从 JSP 容器内的四个不同作用域中存储和检索数据。JSTL 通过提供用于指定和除去这些作用域中的对象的附加操作来扩展这一能力。此外,EL 提供将这些对象作为限制了作用域的变量进行检索的内置支持。特别地,任何出现在 EL 表达式中但不对应于任何 EL 隐式对象的标识符,都被自动假定为引用存储在四个 JSP 作用域的其中某个中的对象,这四个作用域是:
- 页面作用域
- 请求作用域
- 会话作用域
- 应用程序作用域
1. EL 隐式对象
类别 | 标识符 | 描述 |
JSP | pageContext | PageContext 实例对应于当前页面的处理 |
作用域 | pageScope | 与页面作用域属性的名称和值相关联的 Map 类 |
requestScope | 与请求作用域属性的名称和值相关联的 Map 类 | |
sessionScope | 与会话作用域属性的名称和值相关联的 Map 类 | |
applicationScope | 与应用程序作用域属性的名称和值相关联的 Map 类 | |
请求参数 | param | 按名称存储请求参数的主要值的 Map 类 |
paramValues | 将请求参数的所有值作为 String 数组存储的 Map 类 | |
请求头 | header | 按名称存储请求头主要值的 Map 类 |
headerValues | 将请求头的所有值作为 String 数组存储的 Map 类 | |
Cookie | cookie | 按名称存储请求附带的 cookie 的 Map 类 |
初始化参数 | initParam | 按名称存储 Web 应用程序上下文初始化参数的 Map 类 |
2. EL 运算符
类别 | 运算符 |
算术运算符 | + 、 - 、 * 、 / (或 div )和 % (或 mod ) |
关系运算符 | == (或 eq )、 != (或 ne )、 < (或 lt )、 > (或 gt )、 <= (或 le )和 >= (或 ge ) |
逻辑运算符 | && (或 and )、 || (或 or )和 ! (或 not ) |
验证运算符 | empty |
[] , . |
() |
unary - 、 not 、 ! 、 empty |
* 、 / 、 div 、 % 、 mod |
+ 、binary - |
() < 、 > 、 <= 、 >= 、 lt 、 gt 、 le 、 ge |
== 、 != 、 eq 、 ne |
&& 、 and |
|| 、 or |
.
)和方括号运算符(
[]
)),也支持通过 EL 操作特性和元素。
点运算符通常用于访问对象的特性。例如,在表达式 ${user.firstName}
中,使用点运算符来访问 user
标识符所引用对象的名为 firstName
的特性。EL 使用 Java bean 约定访问对象特性,因此必须定义这个特性的 getter 方法(通常是名为 getFirstName()
的方法),以便表达式正确求值。当被访问的特性本身是对象时,可以递归地应用点运算符。例如,如果我们虚构的 user
对象有一个实现为 Java 对象的 address
特性,那么也可以用点运算符来访问这个对象的特性。例如,表达式 ${user.address.city}
将会返回这个地址对象嵌套的 city
特性。
方括号运算符用来检索数组和集合的元素。在数组和有序集合(也即,实现了 java.util.List
接口的集合)的情况下,把要检索的元素的下标放在方括号中。例如,表达式 ${urls[3]}
返回 urls
标识符所引用的数组或集合的第四个元素(和 Java 语言以及 JavaScript 中一样,EL 中的下标是从零开始的)。
清单 1. 组合静态文本和多个 EL 表达式以指定动态属性值
<c:out value="Hello ${user.firstName} ${user.lastName}"></c:out> <c:out value="${user.firstName}"/> |
清单 2. 说明 EL 表达式定界符的 JSTL 操作
<c:out value="${user.firstName}"></c:out> <c:out value="Hello ${user.firstName} ${user.lastName}"/> |
清单 3. 利用算术运算符的 EL 表达式
${item.price * (1 + taxRate[user.address.zipcode])} |
清单 4. 利用关系和逻辑运算符的 EL 表达式
${(x >= min) && (x <= max)} |