隐式对象
表 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 使用 Java bean
约定访问对象特性,因此必须定义这个特性的 getter 方法(通常是名为 getFirstName()
的方法),以便表达式正确求值。当被访问的特性本身是对象时,可以递归地应用点运算符。例如,如果我们虚构的 user
对象有一个实现为
Java 对象的 address
特性,那么也可以用点运算符来访问这个对象的特性。例如,表达式
${user.address.city}
将会返回这个地址对象嵌套的 city
特性。
方括号运算符用来检索数组和集合的元素。在数组和有序集合(也即,实现了 java.util.List
接口的集合)的情况下,把要检索的元素的下标放在方括号中。例如,表达式 ${urls[3]}
返回 urls
标识符所引用的数组或集合的第四个元素(和 Java 语言以及 JavaScript 中一样,EL 中的下标是从零开始的)。
对于实现 java.util.Map
接口的集合,方括号运算符使用关联的键查找存储在映射中的值。在方括号中指定键,并将相应的值作为表达式的值返回。例如,表达式
${commands["dir"]}
返回与 commands
标识符所引用的
Map
中的 "dir"
键相关联的值。
对于上述两种情况,都可允许表达式出现在方括号中。对嵌套表达式求值的结果将被作为下标或键,用来检索集合或数组的适当元素。和点运算符一样,方括号运算符也可以递归应用。这使得
EL
能够从多维数组、嵌套集合或两者的任意组合中检索元素。此外,点运算符和方括号运算符还可以互操作。例如,如果数组的元素本身是对象,则可以使用方括号运算符来检索该数组的元素,并结合点运算符来检索该元素的一个特性(例如
${urls[3].protocol}
)。
假定 EL 充当指定动态属性值的简化语言,EL 存取器有一个有趣的功能(与 Java 语言的存取器不同),那就是它们在应用于
null
时不抛出异常。如果应用 EL 存取器的对象(例如,${foo.bar}
和
${foo["bar"]}
中的 foo
标识符)是
null
,那么应用存取器的结果也是
null
。事实证明,在大多数情况下,这是一个相当有用的行为,不久您就会了解这一点。
最后,点运算符和方括号运算符可能实现某种程度的互换。例如,也可以使用 ${user["firstName"]}
来检索
user
对象的 firstName
特性,正如可以用
${commands.dir}
获取与 commands
映射中的 "dir"
键相关联的值一样。
运算符
EL 还可以通过使用标识符和存取器,遍历包含应用程序数据(通过限制了作用域的变量公开)或关于环境的信息(通过 EL
隐式对象)的对象层次结构。但是,只是访问这些数据,通常不足以实现许多 JSP 应用程序所需的表示逻辑。
最终,EL 还包括了几个用来操作和比较 EL 表达式所访问数据的运算符。表 2 中汇总了这些运算符。
表 2. EL 运算符
类别
|
运算符
|
算术运算符 |
+
、-
、*
、/
(或
div
)和 %
(或 mod
) |
关系运算符 |
==
(或 eq
)、!=
(或
ne
)、<
(或 lt
)、>
(或
gt
)、<=
(或 le
)和 >=
(或
ge
) |
逻辑运算符 |
&&
(或 and
)、||
(或
or
)和 !
(或 not
) |
验证运算符 |
empty
|
算术运算符支持数值的加法、减法、乘法和除法。还提供了一个求余运算符。注:除法和求余运算符都有替代的、非符号的名称(为的是与 XPath 保持一致)。清单
5 中显示了一个演示算术运算符用法的示例表达式。对几个 EL
表达式应用算术运算符的结果是将该算术运算符应用于这些表达式返回的数值所得的结果。
清单 5.
利用算术运算符的 EL 表达式
${item.price * (1 + taxRate[user.address.zipcode])}
|
关系运算符允许比较数字或文本数据。比较的结果作为布尔值返回。逻辑运算符允许合并布尔值,返回新的布尔值。因此,可以将 EL
逻辑运算符应用于嵌套的关系或逻辑运算符的结果,如清单 6 所示。
清单 6. 利用关系和逻辑运算符的 EL
表达式
${(x >= min) && (x <= max)}
|
最后一种 EL 运算符是 empty
,它对于验证数据特别有用。empty
运算符采用单个表达式作为其变量(也即,${empty
input}
),并返回一个布尔值,该布尔值表示对表达式求值的结果是不是“空”值。求值结果为 null
的表达式被认为是空,即无元素的集合或数组。如果参数是对长度为零的 String
求值所得的结果,则
empty
运算符也将返回 true
。
表 3 显示了 EL 运算符的优先级。正如清单 5 和 6 所示,可以用圆括号对表达式分组,高于普通的优先级规则。
表 3. EL
运算符优先级(自顶到底,从左到右)
[]
, .
|
()
|
unary -
、not
、!
、empty
|
*
、/
、div
、%
、mod
|
+
、binary -
|
()
<</code>
、>
、<=
、>=
、lt
、gt
、le
、ge
|
==
、!=
、eq
、ne
|
&&
、and
|
||
、or
|
分享到:
相关推荐
jstl总结资料自己的学习笔记jstl总结资料自己的学习笔记jstl总结资料自己的学习笔记
让你看到jstl内幕,他是如何实现的,你也可以做到。 好东西,多分享
JSTL1.1标签库,学习JSTL的好资料
Struts1-2 和JSTL 帮助文档以及Struts入门的图书,可以轻松学习Struts,及Struts和Jstl标签库
学习对象:所有学习Java方向的学生。 环境:windows professional xp, JDK 6.0, MyEclipse 5.5 使用步骤: 1. 下载解压之后,使用MyEclipse 5.5导入工程 2. 把数据库的url指向你机器上的数据库 3. 修改TestBaseDAO....
输出Hello World 使用到struts2标签和jstl表达式 2、 URL:http://localhost:8080/struts100515 输入用户名XXX ------> 提交 ,显示 你好 XXX 使用ONGL表达式 3、 URL:...
…… try{抛出一个异常}-----程序块 ……catch1{异常处理程序1};……catch100 {异常处理程序100}; finally{无类是否出现异常都执行的程序} <BR>1、 若try抛出Exception,App寻找在Catch1~100寻找合适异常处理...
基于jsp+Servlet+jstl写的考勤系统源码.zip基于jsp+Servlet+jstl写的考勤系统源码.zip基于jsp+Servlet+jstl写的考勤系统源码.zip基于jsp+Servlet+jstl写的考勤系统源码.zip基于jsp+Servlet+jstl写的考勤系统源码.zip...
1-3 安装 JSPBook 站台范例 1-4 安装 Ant 1.6 第二章 Servlet 2.4 简介 2-1 Servlet 简介 2-2 First Servlet Sample Code 2-3 Servlet 的生命周期 2-4 Servlet 范例程序 2-5 Servlet 2.4 的新功能 第三章 JSP 2.0 ...
管理员(用1表示)、普通用户(用0表示);可扩充 1, 普通用户: i. 工程管理;浏览工程项目 查找工程项目 职工管理;浏览职工信息 检索职工信息 职务管理;浏览职务 综合管理;工程耗资查询 职工工资查询 ...
\contentsline {chapter}{Contents}{2}{section*.1} {1}Java基础}{17}{chapter.1} {1.1}基本语法}{17}{section.1.1} {1.2}数字表达方式}{17}{section.1.2} {1.3}补码}{19}{section.1.3} {1.3.1}总结}{23}{...
JSP+servlet+javabean学习 里面有PDF文件对该章节的详细讲解,培训老师才讲的到的,非常详细......资源内容如下: JavaWeb02-request与response.rar JavaWeb03-会话跟踪cookie与session.rar JavaWeb04-内置对象与...
1.目前只学习到了一半,所以先将目前搜集到jar包进行上传 2. 因为是刚学习servlet ,所以将Tomcat 升级到最新版本10,但这个版本遇到了很多坑,有很多还没有适配完成,后面降级回来了Tomcat 9 上传到的包目前有以下...
JavaWeb课程设计,后端使用了servlet、ajax异步处理、c3p0数据库连接池技术,前端基于bootstrap框架设计,使用的是jsp技术、jstl、el表达式,数据库用到的是Mysql5 - - 小白不懂运行,下载完可以私聊问,可远程教学 ...
1、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载学习,也适合...
本设计源码提供了一个基于Java的新闻发布网站。项目包含50个文件,主要使用Java、...该网站使用jsp-servlet-el/jstl-mysql技术栈,适合用于学习和实践Java、JavaScript和CSS技术,以及开发新闻发布相关的网站。
"java大数据培训学校全套教材"系列课程由750集视频构成,基本就 是1)时下流行的java培训学校主流内部教材... 本门课程为"java大数据培训学校全套教材"系列课程的第十七篇,通过学习Taglib与JSTL编程能够打下好的基础。
《Java Web开发学习手册》以初学者为对象,全面介绍了使用JavaWeb开发程序的相关技术。全书共分为4篇,21章,包括JavaWeb概述、搭建开发环境、Java语言基础、JavaScript语言、XML基础、JSP语法、JSP内置对象、...
《Servlet和JSP学习指南》共18章:第1章介绍ServletAPI和几个简单的Servlet;第2章讨论Session追踪,以及保持状态的4种技术;第3章和第4章系统讲解JSP的语法以及JSP中的重要特性之一:ExpressionLanguage;第5~7章...
2、本项目适合计算机相关专业(如计科、人工智能、通信工程、自动化、电子信息等)的在校学生、老师或者企业员工下载使用,也适合小白学习进阶,当然也可作为毕设项目、课程设计、作业、项目初期立项演示等。...