一、表达式语言简史

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} 

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

表达式语言-0421-v1.0张雅慧相关推荐

  1. 嵌入式软件测试题(C语言)V1.0

    嵌入式软件测试题(C语言)V1.0 以下50个选择题,每题都可能存在一个或多个正确答案,请找出所有正确答案填在每题对应的括号中.多选.错选.漏选或不选,均不得分.每题2分.总计100分. 为了缩短篇幅 ...

  2. 分享:Vue.js新手入门指南-0518-v1.0张雅慧

    最近在逛各大网站,论坛,以及像SegmentFault等编程问答社区,发现Vue.js异常火爆,重复性的提问和内容也很多,楼主自己也趁着这个大前端的热潮,着手学习了一段时间的Vue.js,目前用它正在 ...

  3. 分享:Vue.js新手入门指南-0518-v1.0张雅慧(续)

    11.我在学习Vue.js的时候老是听到Webpack,这是啥? Webpack是一个前端打包和构建工具.如果你之前一直是手写HTML,CSS,JavaScript,并且通过link标签将CSS引入你 ...

  4. redis.conf配置文件详解-0511-v1.0张雅慧

    一.基本配置 daemonize no 是否以后台进程启动 databases 16 创建database的数量(默认选中的是database 0) save 900 1 #刷新快照到硬盘中,必须满足 ...

  5. 融资-0420-v1.0张雅慧

    主要内容: 定义: 融资是指为支付超过现金的购货款而采取的货币交易手段,或为取得资产而集资所采取的货币手段.指为支付超过现金的购货款而采取的货币交易手段,或为取得资产而集资所采取的货币手段.货币资金的 ...

  6. 初识Spring MVC-0412-v1.0张雅慧

    初识Spring MVC 授课老师:720科技张森鹏 知识笔记: 一.用途: 是Spring框架中用于Web应用快速开发的一个模块.使用 Spring 可插入的 MVC 架构,可以选择是使用内置的 S ...

  7. 通用商业画布-0408-v1.0张雅慧

    商业画布图分析 我将从以下两张图进行分析: 1. 图一:一个项目想要可以顺利进行达到预期目标,首要的,应当明确好项目出发点,即公司or项目的关键业务是什么,简言之我要做什么,其次我拥有的核心资源是什么 ...

  8. php代码优化,思维扩展-06.01-v1.0张雅慧

    场景一:遍历一个数组获取新的数据结构 也许你会这样写: // 申明一个新的数组,组装成你想要的数据 $tmp = []; foreach ($arr as $k => $v) { // 取出你想 ...

  9. 云上部署Python3爬虫-以腾讯云+Ubuntu为例-0525-v1.0张雅慧

    前期准备 (也可以到腾讯云开发者实验室体验) 1. 购买云服务器 选择一家云服务厂商, 购买云服务器, 目前国内主流服务均有提供学生版 如果第一次购买, 可以戳这个链接 https://cloud.t ...

最新文章

  1. 为什么说基于比特币现金的0确认是必要的?
  2. 新增的querySelector、querySelectorAll测试
  3. 第二章:2.6 使用 runserver 命令把项目运行起来
  4. 二代CMS旅游网站程序国际版开发中(支持英文、法文等),支持拓展语言包
  5. Android模拟器启动3个g,android,模拟器_android 模拟器用3.18的内核无法启动,一直黑屏。,android,模拟器,内核 - phpStudy...
  6. windbg命令集合
  7. HDU 3487 Play with Chain(Splay)
  8. Golang程序性能分析(二)在Echo和Gin框架中使用pprof
  9. cmake release和debug代码运行效果不一样_这35个小细节,让你的Java 代码运行效率翻倍!...
  10. Logistic Regression 的简单推导
  11. 微信支付开发(1) JS API支付V3版(转)
  12. WPF基础到企业应用系列7——深入剖析依赖属性(WPF/Silverlight核心)
  13. 安装Editplus软件
  14. 数据库delete不释放空间处理方法
  15. spring boot校园二手销售网站 毕业设计源码161417
  16. HTML小游戏8 —— 小霸王游戏机网页版(附完整源码)
  17. OpenCV学习笔记03:缩放裁剪图像与调整图像色调
  18. 梦幻跨服购买需要登录服务器未响应,《梦幻西游》手游跨服交易有什么是需要注意的_ 《梦幻西游》手游官网-人人都玩,无处不在...
  19. bootstrap table表头错位,火狐浏览器下滚动条挤像素问题解决方案。
  20. 微信小程序-预览图片识别二维码

热门文章

  1. python 贴吧自动回复_python 几行代码实现自动回复功能
  2. MS08067安全实验室『网络安全实战周训练营』现正免费报名,明晚八点上线!持续有课~...
  3. CAD如何转换成高清的黑白图片?
  4. 外部排序剖析-以磁带为例
  5. linux ipv6模块,有关Linux ipv6模块加载失败的问题
  6. 免费的sql工具_免费SQL工具
  7. 使用 工具john 解密
  8. 3D沙盘地图的拖动与缩放
  9. win10如何快速创建一个记事本,可通过后缀改格式来达到自己的目的
  10. “自动”与“自动(延迟启动)”