useBean>操作,以及由ServletAPI中的几个类定义的setAttribute()方法。
此外,四个JSTL库中定义的许多定制标记本身就能够设置作为限制了作用域的变量使用的属性值。
隐式对象
表1中列出了11个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类
尽管JSP和EL隐式对象中只有一个公共对象(pageContext),但通过EL也可以访问其它JSP隐式对象。
原因是pageContext拥有访问所有其它八个JSP隐式对象的特性。
实际上,这是将它包括在EL隐式对象中的主要理由。
其余所有EL隐式对象都是映射,可以用来查找对应于名称的对象。
前四个映射表示先前讨论的各种属性作用域。
可以用它们来查找特定作用域中的标识符,而不用依赖于EL在缺省情况下使用的顺序查找过程。
接下来的四个映射用来获取请求参数和请求头的值。
因为HTTP协议允许请求参数和请求头具有多个值,所以它们各有一对映射。
每对中的第一个映射返回请求参数或头的主要值,通常是恰巧在实际请求中首先指定的那个值。
每对中第二个映射允许检索参数或头的所有值。
这些映射中的键是参数或头的名称,但这些值是String对象的数组,其中的每个元素都是单一参数值或头值。
cookie隐式对象提供了对由请求设置的cookie名称的访问。
这个对象将所有与请求相关联的cookie名称映射到表示那些cookie特性的Cookie对象。
最后一个EL隐式对象initParam是一个映射,它储存与Web应用程序相关联的所有上下文的初始化参数的名称和值。
初始化参数是通过web.xml部署描述符文件指定的,该文件位于应用程序的WEB-INF目录中。
存取器
因为EL标识符是作为隐式对象或限制了作用域的变量(通过属性来实现)解析的,因此有必要将它们转换成Java对象。
EL可以自动包装和解包其相应的Java类中的基本类型(例如,可以在后台将int强制转换成Integer类,反之亦可),但大多数的标识符将成为指向完整的Java对象的指针。
结果是,对这些对象的特性或(在对象是数组和集合的情况下)对其元素的访问通常是令人满意的。
就为了实现这种用途,EL提供了两种不同的存取器(点运算符(.)和方括号运算符([])),也支持通过EL操作特性和元素。
点运算符通常用于访问对象的特性。
例如,在表达式${user.firstName}中,使用点运算符来访问user标识符所引用对象的名为firstName的特性。
EL使用Javabean约定访问对象特性,因此必须定义这个特性的getter方法(通常是名为getFirstName()的方法),以便表达式正确求值。
当被访问的特性本身是对象时,可以递归地应用点运算符。
例如,如果我们虚构的user对象有一个实现为Java对象的address特性,那么也可以用点运算符来访问这个对象的特性。
例如,表达式${user.address.city}将会返回这个地址对象嵌套的city特性。
方括号运算符用来检索数组和集合的元素。
在数组和有序集合(也即,实现了java.util.List接口的集合)的情况下,把要检索的元素的下标放在方括号中。
例如,表达