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