表达式语言-0421-v1.0张雅慧

一、表达式语言简史

JSP 2.0 最初是将 EL应用在 JSP 标准标签库(JSTL)1.0 规范中。JSP 1.2 程序员将标准 库导入到他们的应用程序中,就可以使用 EL。JSP 2.0 及其更高版本的用户即使没有 JSTL, 也能使用 EL,但在许多应用程序中,还是需要 JSTL 的,因为它里面还包含了与 EL 无关的 其他标签。 JSP 2.1 和 JSP 2.2 中的 EL要将 JSP 2.0 中的 EL与 JSF(JavaServer Faces)中定义的 EL 统一起来。JSF 是在 Java 中快速构建 Web 应用程序的框架,并且是构建在 JSP 1.2 之上。由 于 JSP 1.2 中缺乏整合式的表达式语言,并且 JSP 2.0 EL也无法满足 JSF的所有需求,因此为 JSF 1.0 开发出了一款 EL的变体。后来这两种语言变体合二为一。 2013 年 5 月发布了 EL 3.0 版本(JSR 341) ,EL不再是 JSP 或任何其他技术的一部分, 而是一个独立的规范。EL 3.0 添加了对 lambda 表达式的支持,并允许集合操作。其 lambda 支持不需要 Java SE 8,Java SE 7 即可。 

二、表达式语言的语法 

 EL表达式以 ${ 开头,并以 } 结束。EL表达式的结构如下: ${expression} #{expression} 
 例如,表达式 x+y,可以写成: ${x+y} 
 或 #{x+y} 
 $ {exp}和#{exp}结构都由 EL引擎以相同的方式进行计算。然而,当 EL未被用作独立引 擎而是使用诸如 JSF或JSP 的底层技术时,该技术可以不同地解释构造。例如,在 JSF中,${exp} 结构用于立即计算,#{expr}结构用于延迟计算(即表达式直到系统需要它的值时,才进行计 算)。另一方面,立即计算的表达式,会在JSP 页面编译时同时编译,并在执行JSP 页面时被执 行。在 JSP 2.1 和更高版本中,#{exp}表达式只能在接受延迟表达式的标签属性中使用。 
两个表达式可以连接在一起。对于一系列的表达式,它们的取值将是从左到右进行,计 算结果的类型为 String,并且连接在一起。假如 a+b 等于 8,c+d 等于 10,那么这两个表达式 的计算结果将是 810: ${a+b}${c+d} 
 表达式${a+b}and${c+d}的取值结果则是 8and10。 如果在定制标签的属性值中使用 EL 表达式,那么该表达式的取值结果字符串将会强制 变成该属性需要的类型: <my:tag someAttribute="${expression}"/> 

 像${这样的字符顺序就表示是一个 EL表达式的开头。如果需要的只是文本${,则需要在 它前面加一个转义符,如\${。 

三、关键字 
以下是关键字,它们不能用作标识符:
 and  eq  gt  true  instanceof 

or   ne  le   false  empty 

not  lt   ge   null  div  mod 

四、[ ]和.运算符 
EL表达式可以返回任意类型的值。如果 EL表达式的结果是一个带有属性的对象,则可以利 用[ ]或者.运算符来访问该属性。[ ]和.运算符类似;[ ]是比较规范的形式,.运算符则比较快捷。 为了访问对象的属性,可以使用以下任意一种形式: ${object["propertyName"]} ${object.propertyName} 
 但是,如果 propertyName 不是有效的 Java 变量名,只能使用[ ]运算符。例如,下面这两 个 EL表达式就可以用来访问隐式对象标题中的 HTTP 标题 host: ${header["host"]} ${header.host} 
 但是,要想访问 accept-language 标题,只能使用[ ]运算符,因为 accept-language 不是一 个合法的 Java 变量名。如果用. 运算符访问它,将会导致异常。 如果对象的属性碰巧返回带有属性的另一个对象,既可以用[ ],也可以用. 运算符来 访问第二个对象的属性。例如,隐式对象 pageContext 是表示当前 JSP 的 PageContext 对象。 它有 request 属性,表示 HttpServletRequest。HttpServletRequest 带有 servletPath 属性。 那么,下列几个表达式的结果相同,均能得出 pageContext 中 HttpServletRequest 的 servletPath 属性值: ${pageContext["request"]["servletPath"]} ${pageContext.request["servletPath"]} ${pageContext.request.servletPath} ${pageContext["request"].servletPath} 
 要访问 HttpSession,可以使用以下语法: ${pageContext.session} 
 例如,以下表达式会得出 session 标识符。 ${pageContext.session.id} 

关键字:简史;语法;关键字;运算符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值