第 8章 EL
JSP 动态网页新技术 1
关于 EL
JSP 2.0將 Expression Language(以下 简称 EL)整合 进 JSP标准规格 。
EL并非全新的语言,最早出现于 JSTL 1.0当中,被用来简化数据存取的相关操作 。
由于 EL已是 JSP的标准,因此用户可以选择直接在 JSP网页当中使用 EL替代 Java进行数据的存取操作 。
EL有其专属的一套语法,包含了两项基本要素:变量与运算符 。
EL內建 隐含对象 (implicit variables),以 Java集合对象的型态出现,
其中储存了网页的各种信息,包含 session,cookie和网页传输过程当中所使用的参数值 。
第 8章 EL
JSP 动态网页新技术 2
EL 语法
EL必须以一个金钱表示符号加上左大括号 ${ 开始,并且以右大括号 } 作结束。
${ EL expression }
第 8章 EL
JSP 动态网页新技术 3
EL变量一个储存了特定数据内容的符号,EL可以直接对其作存取,
或是结合运算符进行必要的运算之后作输出第 8章 EL
JSP 动态网页新技术 4
运算符运 算 符 说 明
,存取 bean property 或是 map entry
[] 存取 array or List 元素
() 改变运算顺序
,条件式三元运算 condition? ifTrue,ifFalse
+ 加法运算
- 减法运算
* 乘法运算
/ or div 除法运算
% or mod 模数运算第 8章 EL
JSP 动态网页新技术 5
运算符运 算 符 说 明
== or eq 对等运算
!= or ne 不相等运算
< or lt 小于比较运算
> or gt 大于比较运算
<= or le 小于或等于比较运算
>= or ge 大于或等于比较运算
&& or and 逻辑 AND运算
|| or or 逻辑 OR运算
! or not 布尔补码运算
empty 空值运算
func(args) 函数调用第 8章 EL
JSP 动态网页新技术 6
运算符 (.)与方括号 ([])
无论 action elements 或是隐含对象的数据内容,均是一种集合
(collection)对象,EL可以通过点运算符 (.)或是方括号 ([])对其作存取 。
${ param.yearValue }
${ param["yearValue"] }
第 8章 EL
JSP 动态网页新技术 7
算术运算符运 算 符 说 明
+ 对两个数值进行加法运算
- 对两个数值进行减法运算
* 对两个数值进行乘法运算
/ 或是 div 对两个数值进行除法运算
% 或是 mod 对两个数值进行模数运算第 8章 EL
JSP 动态网页新技术 8
表达式 A{+,-,*}B
首先如果 A与 B为 null,则运算之后的结果,是一个 long型态的 0 。
A或 B其中一个是 BigDecimal,则两者均会转换成为 BigDecimal 。
运 算 符 返回结果运算符 + A.add(B)
运算符 - A.subtract(B)
运算符 * A.multiply(B)
第 8章 EL
JSP 动态网页新技术 9
表达式 A{+,-,*}B
A或 B为 Float,Double或是包含,,e或是 E:的字符串 (String),
– 如果 A或是 B其中之一为 BigInteger,两者均会强制转型为
BigDecimal,否则转型为 Double,然后进行运算 。
– 如果 A或 B为 BigInteger,两者均会被强制转换成为 BigInteger,
然后进行表 8-4中的相关运算 。
运 算 符 返回结果运算符 + A.add(B)
运算符 - A.subtract(B)
运算符 * A.multiply(B)
第 8章 EL
JSP 动态网页新技术 10
表达式 A{+,-,*}B
如果非上述状况,A与 B一律转换成为 Long,然后进行运算 。
如果运算结果产生例外,则为错误结果 。
第 8章 EL
JSP 动态网页新技术 11
表达式 A {/,div} B
如果 A与 B为 null,则运算之后回传一个 long型态的 0 。
假若 A或 B为 BigDecimal或是 BigInteger,两者被强制转换成为
BigDecimal 并且返回 A.divide(B,BigDecimal.ROUND_HALF_UP)
的运算结果 。
如果非上述情形,A与 B强制转换成为 Double然后进行运算。最后,
如果运算结果产生例外,则为错误结果 。
第 8章 EL
JSP 动态网页新技术 12
表达式 A {%,mod} B
如果 A与 B为 null,返回 Long型态数值 0 。
假若 A或 B为 Float,Double或是包含,,e或是 E的字符串 (String),
将 A与 B两者强制转换为 Double之后进行运算 。
如果 A或 B为 BigInteger,强制转换为 BigInteger之后,返回
A.remainder(B)的运算结果 。
A与 B如果非上述状况则转换为 Long进行运算。最后,若运算结果发生例外,则为错误结果 。
第 8章 EL
JSP 动态网页新技术 13
关联运算符运 算 符 说 明
== and eq 等于
!= and ne 不等于
< and lt 小于
> and gt 大于
<= and le 小于等于
>= and ge 大于等于第 8章 EL
JSP 动态网页新技术 14
表达式 A {<,>,<=,>=,lt,gt,le,ge} B
若是 A等于 B,运算符 <=,le,>=或是 ge返回 true的结果。
当 A 或是 B其中之一为 null,返回 false。
假若 A或 B为 BigDecimal,将 A与 B强制转换成为 BigDecimal然后返回
A.compareTo(B)的运算结果。
如果 A或 B为 Float或是 uble,强制转换 Double之后,进行运算。
如果 A 或 B为 BigInteger,强制转换 BigInteger,然后返回 A.compareTo(B)
的比较结果。
如果 A 或 B为 Byte,hort,Character,Integer或是 Long,强制转换成为
Long 然后进行运算。
当 A或是 B其中之一为字符串 (String),强制转换成为 String之后依字母进行字符串比较。
第 8章 EL
JSP 动态网页新技术 15
表达式 A {==,!=,eq,ne} B
当 A 或是 B其中之一为 null,返回 false运算结果。
若 A 或者 B为 BigDecimal,两者均会强制转换成为 BigDecimal再进行运算,
对于 ==运算符而言,回传一个 A.equals(B)的结果,而 !=运算符则返回 !A.equals(B)的结果。
当 A或者 B为 Float或是 Double,两者均会强制转换成为 Double然后进行运算。
若 A 或者 B为 BigInteger,两者均会强制转换成为 BigInteger,其中若是运算符为 ==,回传 A.equals(B),!=则返回 !A.equals(B)的运算结果
若 A 或者 B为 Byte,Short,Character,Integer或是 Long,将被强制转换成为 Long之后进行运算。
若 A 或者 B为 Boolean,将被强制转换成 Boolean作运算。
若 A 或者 B为 String,将被强制转换成 String作运算。
第 8章 EL
JSP 动态网页新技术 16
逻辑运算符运 算 符 说 明
&& 或 and 逻辑 AND运算
|| 或 or 逻辑 OR运算
! 或 not 布尔值补码第 8章 EL
JSP 动态网页新技术 17
Empty运算符
empty被用来判断是否指定的值为 null或是空值,并且返回一个代表判断结果的 Boolean值,empty的运用非常简单,如下式,
${ empty A}
其中的 A为所要判断的值,下面为 empty的运算规则,
若是判断值 A为 null,返回 true的运算结果,若是 A的值为空的字符串、数组或是集合对象,也返回 true的结果,除此之外,一律返回 false 。
第 8章 EL
JSP 动态网页新技术 18
条件式 三元 运算符
三元运算符针对特定判断式的运算结果,决定返回的值:
${ A?B:C}
– A为判断式,如果 A的结果为 true,返回 B,否则返回 C值的结果 。
第 8章 EL
JSP 动态网页新技术 19
运算符优先级运算符优先级
[],
()
- (unary) not ! empty
* / div % mod
+ - (binary)
< > <= >= lt gt le ge
== != eq ne
&& and
|| or
,
第 8章 EL
JSP 动态网页新技术 20
内建对象内建对象 说 明
pageContext 取得网页运行环境的相关信息
pageScope 取得 page范围内特定属性的属性值
requestScope 取得 request范围内特定属性的属性值
sessionScope 取得 session范围内特定属性的属性值
applicationScope 取得 application范围内特定属性的属性值
param 取得 request对象的单一参数值
paramValues 取得 request对象的参数值
header 取得 request对象单一标头值
headerValues 取得 request对象标头值
cookie 取得 request对象的 cookie
initParam 取得网页运行环境的初始参数值第 8章 EL
JSP 动态网页新技术 21
内建对象
pageContext可用来取得 PageContext对象当中,与 JSP运行环境有关的内容信息 。
pageScope,requestScope,sessionScope和 applicationScope,分别用来存取 4个不同范围内的属性值 。
Param,paramValues,header,headerValues以及 cookie,用來 存取 request对象的相关成员内容,例如网页传递参数、标头信息或是 cookie等等 。
initParam 用 来获取网站 初始化值。
第 8章 EL
JSP 动态网页新技术 22
EL对象与 request 对象 存取
EL对象 Request对象存取
param ServletRequest.getParameter(String name)
paramValues ServletRequest.getParameterValues(String name)
header HttpServletRequest.getHeader(String name)
headerValues HttpervletRequest.getHeaders(String)
cookie HttpServletRequest.getCookies()
第 8章 EL
JSP 动态网页新技术 23
范围变量
EL当中 4个与范围有关的隐含对象,pageScope,requestScope、
sessionScope和 applicationScope,可直接用来存取属于特定范围内的变量值。从对象的名称,可以很轻易的了解这些对象的适用范围,除此之外,它们与 JSP内建所的隐含对象基本上是相同的 。
EL 对 象 JSP 对 象
pageScope pageContext
requestScope request
sessionScope session
applicationScope application
第 8章 EL
JSP 动态网页新技术 24
存取范围变量
在 JSP网页当中取得特定范围变量属性,必须引用 getAttribute(),
并且指定所要取得的变量名称,
application.getAttribute("cname")
通过 EL的存取方式:
${applicationScope.cname}
第 8章 EL
JSP 动态网页新技术 25
Param & paramValues
EL对象 param与 paramValues被设计用来提供使用 request之外的一个选择,下表列出 相同效果 的 request方法。
EL request
${param.paraName} request.getParameter(paraName)
${paramValues.paraName } request.getParameterValues(paraName)
第 8章 EL
JSP 动态网页新技术 26
Param & paramValues存取
param内容包含当前网页所有的 request参数,这段程序代码取得其中名称为 yearValue的参数值 。
${param.yearValue } 。
针对取得的参数内容,进一步对其作运算 。
${ param.yearValue+100 }
param与 paramValues最大的好处便是简化了 request参数数据的存取 。
第 8章 EL
JSP 动态网页新技术 27
Header & headerValues
Header与 headerValues這 两个对象 可以 达到 request对象 取出 HTTP
标头信息 的功能,语法 也 相对简单许多 。
${header["host"]}
指定不同的 标头名称,可直接 返回相对的信息 。
第 8章 EL
JSP 动态网页新技术 28
cookie
提供直接 读取 cookie所需的语法 。
${cookie.cname.value}
如果想要了解此 cookie的 识别名称,省略 value即可。
${cookie.cname}
第 8章 EL
JSP 动态网页新技术 29
initParam
网站一开始启动的时候,通常需要设定某些与网站有关的参数,这些参数在网站根目录底下 WEB-INF数据夹的 web.xml文件里面作设定,打开此文件,在其中加入以下的内容:
<web-app >
…
<context-param>
<param-name>admin</param-name>
<param-value>tea</param-value>
</context-param>
…
</web-app>
引用 initParam读取系统参数非常的容易,指定所要取得的参数名称即可 。
${initParam.admin}
第 8章 EL
JSP 动态网页新技术 30
关键字
and eq gt true instanceof
or ne le false empty
not lt ge null div mod
JSP 动态网页新技术 1
关于 EL
JSP 2.0將 Expression Language(以下 简称 EL)整合 进 JSP标准规格 。
EL并非全新的语言,最早出现于 JSTL 1.0当中,被用来简化数据存取的相关操作 。
由于 EL已是 JSP的标准,因此用户可以选择直接在 JSP网页当中使用 EL替代 Java进行数据的存取操作 。
EL有其专属的一套语法,包含了两项基本要素:变量与运算符 。
EL內建 隐含对象 (implicit variables),以 Java集合对象的型态出现,
其中储存了网页的各种信息,包含 session,cookie和网页传输过程当中所使用的参数值 。
第 8章 EL
JSP 动态网页新技术 2
EL 语法
EL必须以一个金钱表示符号加上左大括号 ${ 开始,并且以右大括号 } 作结束。
${ EL expression }
第 8章 EL
JSP 动态网页新技术 3
EL变量一个储存了特定数据内容的符号,EL可以直接对其作存取,
或是结合运算符进行必要的运算之后作输出第 8章 EL
JSP 动态网页新技术 4
运算符运 算 符 说 明
,存取 bean property 或是 map entry
[] 存取 array or List 元素
() 改变运算顺序
,条件式三元运算 condition? ifTrue,ifFalse
+ 加法运算
- 减法运算
* 乘法运算
/ or div 除法运算
% or mod 模数运算第 8章 EL
JSP 动态网页新技术 5
运算符运 算 符 说 明
== or eq 对等运算
!= or ne 不相等运算
< or lt 小于比较运算
> or gt 大于比较运算
<= or le 小于或等于比较运算
>= or ge 大于或等于比较运算
&& or and 逻辑 AND运算
|| or or 逻辑 OR运算
! or not 布尔补码运算
empty 空值运算
func(args) 函数调用第 8章 EL
JSP 动态网页新技术 6
运算符 (.)与方括号 ([])
无论 action elements 或是隐含对象的数据内容,均是一种集合
(collection)对象,EL可以通过点运算符 (.)或是方括号 ([])对其作存取 。
${ param.yearValue }
${ param["yearValue"] }
第 8章 EL
JSP 动态网页新技术 7
算术运算符运 算 符 说 明
+ 对两个数值进行加法运算
- 对两个数值进行减法运算
* 对两个数值进行乘法运算
/ 或是 div 对两个数值进行除法运算
% 或是 mod 对两个数值进行模数运算第 8章 EL
JSP 动态网页新技术 8
表达式 A{+,-,*}B
首先如果 A与 B为 null,则运算之后的结果,是一个 long型态的 0 。
A或 B其中一个是 BigDecimal,则两者均会转换成为 BigDecimal 。
运 算 符 返回结果运算符 + A.add(B)
运算符 - A.subtract(B)
运算符 * A.multiply(B)
第 8章 EL
JSP 动态网页新技术 9
表达式 A{+,-,*}B
A或 B为 Float,Double或是包含,,e或是 E:的字符串 (String),
– 如果 A或是 B其中之一为 BigInteger,两者均会强制转型为
BigDecimal,否则转型为 Double,然后进行运算 。
– 如果 A或 B为 BigInteger,两者均会被强制转换成为 BigInteger,
然后进行表 8-4中的相关运算 。
运 算 符 返回结果运算符 + A.add(B)
运算符 - A.subtract(B)
运算符 * A.multiply(B)
第 8章 EL
JSP 动态网页新技术 10
表达式 A{+,-,*}B
如果非上述状况,A与 B一律转换成为 Long,然后进行运算 。
如果运算结果产生例外,则为错误结果 。
第 8章 EL
JSP 动态网页新技术 11
表达式 A {/,div} B
如果 A与 B为 null,则运算之后回传一个 long型态的 0 。
假若 A或 B为 BigDecimal或是 BigInteger,两者被强制转换成为
BigDecimal 并且返回 A.divide(B,BigDecimal.ROUND_HALF_UP)
的运算结果 。
如果非上述情形,A与 B强制转换成为 Double然后进行运算。最后,
如果运算结果产生例外,则为错误结果 。
第 8章 EL
JSP 动态网页新技术 12
表达式 A {%,mod} B
如果 A与 B为 null,返回 Long型态数值 0 。
假若 A或 B为 Float,Double或是包含,,e或是 E的字符串 (String),
将 A与 B两者强制转换为 Double之后进行运算 。
如果 A或 B为 BigInteger,强制转换为 BigInteger之后,返回
A.remainder(B)的运算结果 。
A与 B如果非上述状况则转换为 Long进行运算。最后,若运算结果发生例外,则为错误结果 。
第 8章 EL
JSP 动态网页新技术 13
关联运算符运 算 符 说 明
== and eq 等于
!= and ne 不等于
< and lt 小于
> and gt 大于
<= and le 小于等于
>= and ge 大于等于第 8章 EL
JSP 动态网页新技术 14
表达式 A {<,>,<=,>=,lt,gt,le,ge} B
若是 A等于 B,运算符 <=,le,>=或是 ge返回 true的结果。
当 A 或是 B其中之一为 null,返回 false。
假若 A或 B为 BigDecimal,将 A与 B强制转换成为 BigDecimal然后返回
A.compareTo(B)的运算结果。
如果 A或 B为 Float或是 uble,强制转换 Double之后,进行运算。
如果 A 或 B为 BigInteger,强制转换 BigInteger,然后返回 A.compareTo(B)
的比较结果。
如果 A 或 B为 Byte,hort,Character,Integer或是 Long,强制转换成为
Long 然后进行运算。
当 A或是 B其中之一为字符串 (String),强制转换成为 String之后依字母进行字符串比较。
第 8章 EL
JSP 动态网页新技术 15
表达式 A {==,!=,eq,ne} B
当 A 或是 B其中之一为 null,返回 false运算结果。
若 A 或者 B为 BigDecimal,两者均会强制转换成为 BigDecimal再进行运算,
对于 ==运算符而言,回传一个 A.equals(B)的结果,而 !=运算符则返回 !A.equals(B)的结果。
当 A或者 B为 Float或是 Double,两者均会强制转换成为 Double然后进行运算。
若 A 或者 B为 BigInteger,两者均会强制转换成为 BigInteger,其中若是运算符为 ==,回传 A.equals(B),!=则返回 !A.equals(B)的运算结果
若 A 或者 B为 Byte,Short,Character,Integer或是 Long,将被强制转换成为 Long之后进行运算。
若 A 或者 B为 Boolean,将被强制转换成 Boolean作运算。
若 A 或者 B为 String,将被强制转换成 String作运算。
第 8章 EL
JSP 动态网页新技术 16
逻辑运算符运 算 符 说 明
&& 或 and 逻辑 AND运算
|| 或 or 逻辑 OR运算
! 或 not 布尔值补码第 8章 EL
JSP 动态网页新技术 17
Empty运算符
empty被用来判断是否指定的值为 null或是空值,并且返回一个代表判断结果的 Boolean值,empty的运用非常简单,如下式,
${ empty A}
其中的 A为所要判断的值,下面为 empty的运算规则,
若是判断值 A为 null,返回 true的运算结果,若是 A的值为空的字符串、数组或是集合对象,也返回 true的结果,除此之外,一律返回 false 。
第 8章 EL
JSP 动态网页新技术 18
条件式 三元 运算符
三元运算符针对特定判断式的运算结果,决定返回的值:
${ A?B:C}
– A为判断式,如果 A的结果为 true,返回 B,否则返回 C值的结果 。
第 8章 EL
JSP 动态网页新技术 19
运算符优先级运算符优先级
[],
()
- (unary) not ! empty
* / div % mod
+ - (binary)
< > <= >= lt gt le ge
== != eq ne
&& and
|| or
,
第 8章 EL
JSP 动态网页新技术 20
内建对象内建对象 说 明
pageContext 取得网页运行环境的相关信息
pageScope 取得 page范围内特定属性的属性值
requestScope 取得 request范围内特定属性的属性值
sessionScope 取得 session范围内特定属性的属性值
applicationScope 取得 application范围内特定属性的属性值
param 取得 request对象的单一参数值
paramValues 取得 request对象的参数值
header 取得 request对象单一标头值
headerValues 取得 request对象标头值
cookie 取得 request对象的 cookie
initParam 取得网页运行环境的初始参数值第 8章 EL
JSP 动态网页新技术 21
内建对象
pageContext可用来取得 PageContext对象当中,与 JSP运行环境有关的内容信息 。
pageScope,requestScope,sessionScope和 applicationScope,分别用来存取 4个不同范围内的属性值 。
Param,paramValues,header,headerValues以及 cookie,用來 存取 request对象的相关成员内容,例如网页传递参数、标头信息或是 cookie等等 。
initParam 用 来获取网站 初始化值。
第 8章 EL
JSP 动态网页新技术 22
EL对象与 request 对象 存取
EL对象 Request对象存取
param ServletRequest.getParameter(String name)
paramValues ServletRequest.getParameterValues(String name)
header HttpServletRequest.getHeader(String name)
headerValues HttpervletRequest.getHeaders(String)
cookie HttpServletRequest.getCookies()
第 8章 EL
JSP 动态网页新技术 23
范围变量
EL当中 4个与范围有关的隐含对象,pageScope,requestScope、
sessionScope和 applicationScope,可直接用来存取属于特定范围内的变量值。从对象的名称,可以很轻易的了解这些对象的适用范围,除此之外,它们与 JSP内建所的隐含对象基本上是相同的 。
EL 对 象 JSP 对 象
pageScope pageContext
requestScope request
sessionScope session
applicationScope application
第 8章 EL
JSP 动态网页新技术 24
存取范围变量
在 JSP网页当中取得特定范围变量属性,必须引用 getAttribute(),
并且指定所要取得的变量名称,
application.getAttribute("cname")
通过 EL的存取方式:
${applicationScope.cname}
第 8章 EL
JSP 动态网页新技术 25
Param & paramValues
EL对象 param与 paramValues被设计用来提供使用 request之外的一个选择,下表列出 相同效果 的 request方法。
EL request
${param.paraName} request.getParameter(paraName)
${paramValues.paraName } request.getParameterValues(paraName)
第 8章 EL
JSP 动态网页新技术 26
Param & paramValues存取
param内容包含当前网页所有的 request参数,这段程序代码取得其中名称为 yearValue的参数值 。
${param.yearValue } 。
针对取得的参数内容,进一步对其作运算 。
${ param.yearValue+100 }
param与 paramValues最大的好处便是简化了 request参数数据的存取 。
第 8章 EL
JSP 动态网页新技术 27
Header & headerValues
Header与 headerValues這 两个对象 可以 达到 request对象 取出 HTTP
标头信息 的功能,语法 也 相对简单许多 。
${header["host"]}
指定不同的 标头名称,可直接 返回相对的信息 。
第 8章 EL
JSP 动态网页新技术 28
cookie
提供直接 读取 cookie所需的语法 。
${cookie.cname.value}
如果想要了解此 cookie的 识别名称,省略 value即可。
${cookie.cname}
第 8章 EL
JSP 动态网页新技术 29
initParam
网站一开始启动的时候,通常需要设定某些与网站有关的参数,这些参数在网站根目录底下 WEB-INF数据夹的 web.xml文件里面作设定,打开此文件,在其中加入以下的内容:
<web-app >
…
<context-param>
<param-name>admin</param-name>
<param-value>tea</param-value>
</context-param>
…
</web-app>
引用 initParam读取系统参数非常的容易,指定所要取得的参数名称即可 。
${initParam.admin}
第 8章 EL
JSP 动态网页新技术 30
关键字
and eq gt true instanceof
or ne le false empty
not lt ge null div mod