OGNL语言介绍与实践

OGNL 的历史

OGNL 最初是为了能够使用对象的属性名来建立 UI 组件 (component) 和 控制器 (controllers) 之间的联系,简单来说就是:视图 与 控制器 之间数据的联系。后来为了应付更加复杂的数据关系,Drew Davidson 发明了一个被他称为 KVCL(Key-Value Coding Language) 的语言。Luke 参与进来后,用 ANTLR 来实现了该语言,并给它取了这个新名字,他后来又使用 JavaCC 重新实现了该语言。目前 OGNL 由 Drew 来负责维护。目前很多项目中都用到了 OGNL,其中不乏为大家所熟知的,例如几个流行的web 应用框架:WebWork,Tapestry 等。

什么是 OGNL?

OGNL 是 Object-Graph Navigation Language 的缩写,从语言角度来说:它是一个功能强大的表达式语言,用来获取和设置 java 对象的属性 , 它旨在提供一个更高抽象度语法来对 java 对象图进行导航,OGNL 在许多的地方都有应用,例如:

作为 GUI 元素(textfield,combobox, 等)到模型对象的绑定语言。

数据库表到 Swing 的TableModel 的数据源语言。

web 组件和后台 Model 对象的绑定语言 (WebOGNL,Tapestry,WebWork,WebObjects) 。

作为 Jakarata Commons BeanUtils 或者 JSTL 的表达式语言的一个更具表达力的替代语言。

另外,java 中很多可以做的事情,也可以使用 OGNL 来完成,例如:列表映射和选择。对于开发者来说,使用 OGNL,可以用简洁的语法来完成对 java 对象的导航。通常来说:通过一个“路径”来完成对象信息的导航,这个“路径”可以是到 java bean 的某个属性,或者集合中的某个索引的对象,等等,而不是直接使用 get 或者 set 方法来完成。

为什么需要表达式语言 (EL)

表达式语言(EL)本质上被设计为:帮助你使用简单的表达式来完成一些“常用”的工作。通常情况下,ELs 可以在一些框架中找到,它被是用来简化我们的工作。例如:大家熟知的Hibernate,使用 HQL(Hibernate Query Language) 来完成数据库的操作,HQL 成了开发人员与复查的SQL 表达式之间的一个桥梁。在 web 框架下,表达式语言起到了相似的目的。它的存在消除了重复代码的书写。例如:当没有 EL 的时候,为了从 session 中得到购物车并且将 ID 在网页上呈现出来,当直接在 jsp 中使用 java 代码来完成的时候,一般是:

<%
   ShoppingCart cart = (ShoppingCart) session.get("cart");
   int id = cart.getId();
   %>
   <%= id%>

你也可以将这些 code 压缩成一句,如下,但是现在代码就很不直观,且不可读。另外,虽然变成了一句,但是与上面的原始的例子一样,也包含了同样的表达式。例如:类型转换:转换成 ShoppingCart 。这里只不过是将原来的三个表达式变成了一句,其复杂度是没有得到简化的。

<%= ((ShoppingCart) session.get("cart")).getId() %>

当在 web 框架中使用表达式语言的时候,则可以有效的处理这种代码的复杂性。而不需要你,调用 servelet API,类型转换,然后再调用 getter 方法,多数的Els 都可将这个过程简化为类似于:#session.cart.id 这中更可读的表达式。表达式:#session.cart.id 与 java 代码不一样的是:没有 java 代码的get 方法调用和类型转换。因为这些操作是非常“常用”的,这时候使用 EL 就顺理成章了,使用 EL 可以“消除”这些代码。

时间: 2024-07-29 16:18:12

OGNL语言介绍与实践的相关文章

《C语言程序设计与实践(第2版)》——导读

前言 C语言程序设计是一门理论与工程实践密切相关的专业基础课程,在计算机学科教学中具有十分重要的地位.大力加强该课程的建设,提高该课程的教学质量,有利于教学改革和教育创新,有利于创新人才的培养.通过本课程的学习,学生应培养良好的编程风格,掌握常见的算法思路,真正提高运用C语言编写程序解决实际问题的综合能力,为后续课程的实践环节打好基础. 目前国内关于C语言的教材较多,有些教材语法知识介绍细致,较适合作为非专业的等级考试类教学用书:有些教材起点较高,内容深奥,不适于初学者.为了帮助广大学生更好地掌

Python机器学习工具:Scikit-Learn介绍与实践

本文讲的是Python机器学习工具:Scikit-Learn介绍与实践, Scikit-learn官方的解释很简单: Machine Learning in Python, 用python来玩机器学习. 什么是机器学习 机器学习关注的是:计算机程序如何随着经验积累自动提高性能.而最大的吸引力在于,不需要写任何与问题相关的特定代码,泛型算法就能告诉你一些关于数据的秘密. Scikit-learn的优点 构建于现有的NumPy(基础n维数组包),SciPy(科学计算基础包), matplotlib(

6、如何自学Struts2之Struts2值栈和OGNL语言[视频]

6.如何自学Struts2之Struts2值栈和OGNL语言[视频]   之前写了一篇"打算做一个视频教程探讨如何自学计算机相关的技术",优酷上传不了,只好传到百度云上:   http://pan.baidu.com/s/1kTDsa95

CSS预处理语言的模块化实践

编写css是前端工作中,一项普通而又频繁的劳动,由于css并不是一门语言,所以在程序设计上显得有些简陋.对于小型项目来说,css的量还不至于庞大,问题没有凸显,而如果要开发和持续维护一个较为大型的项目,那就需要对css进行管理和规范了,否则会发生不可挽回的后果(吓唬谁呢??). 背景 上一节[从css谈模块化]我们通过规范的约束,将css的编写方式进行了优化和改进,形成一种可持续发展的路线.但还是遗留了一些问题:冗余.虽然我们通过定义公共模块和私有模块,来委婉地分担common的体积,但comm

大数据时代的宠儿——Hadoop介绍和实践分享

这篇文章简单介绍了Hadoop相关的技术生态圈,同时共享一份前一阵编写的实践教程,需要者自取. 在云计算和大数据大行其道的今天,Hadoop及其相关技术起到了非常重要的作用,是这个时代不容忽视的一个技术平台.事实上,由于其开源.低成本和和前所未有的扩展性,Hadoop正成为新一代的数据处理平台. Hadoop是基于Java语言构建的一套分布式数据处理框架,从其历史发展角度我们就可以看出,Hadoop一诞生,就具备高贵的血统,发展顺风顺水: 2004年,Google发表论文,向全世界介绍了MapR

PHP和Mysqlweb应用开发核心技术-第1部分 Php基础-2 php语言介绍

主要主题是 .php字符串中的变量扩展系统 .php中可用的更多数据类型 .类型之间的转换 .输入和使用变量和常量 .如何在php中构建表达式以及构建表达式所需的操作符 .使用语言中可用的控制结构 .1 输入字符串的更多介绍 复制代码 代码如下: <?php $hour = 16; $kilometres = 4; $content = "cookie"; echo " 4pm in 24 hour time is {$hour}00 hours.<br/>

PostScript 打印描述语言 介绍

PostScript是专门为打印图形和文字而设计的一个编程语言,它与打印的介质无关,不管您是在纸上.胶片上打印,还是在屏幕显示都适合.它是一种页面描述语言,与HTML语言类似.  PostScript是由Adobe公司在1985年提出来的,首先应用在了苹果的LaserWriter打印机上.PostScript的主要目标是提供一种独立于设备的能够方便地描述图像的语言.独立于设备意味着,不需要借助任何具体设备的特性(例如,打印机的分辨率)来描述一个图像,因而这个描述不需要经过任何修改即可用在其他的P

《C++语言基础》实践项目——银行储蓄系统开发

返回:贺老师课程教学链接 教学目标 通过完成一个有实用价值的应用程序,体会利用C++语言解决问题的过程: 多次迭代,逐步完善,用可以运行的程序,鼓舞自己的学习 实训安排 看视频"18 应用系统开发:银行储蓄系统",并阅读博客中提供的参考解答,了解基本系统的开发. 基本要求:定义了用户类(User)和银行类(Bank),用成员函数实现各种功能,多文件组织程序,能用文本文件存取数据(如示例中给出的技术): 拓展方向: 序号 加分项目 细       则 1 改变Bank类中用户信息的存储方

《C语言程序设计与实践(第2版)》——3.4 表达式和运算符

3.4 表达式和运算符 C语言的运算符范围很广,具有非常丰富的运算符和表达式运算,为编写程序提供了方便.表达式是由操作数和运算符组成,运算后产生一个确定的值,其中操作数可以是常量.变量.函数和表达式,每个操作数都具有一种数据类型,通过运算得到的结果也具有一种数据类型,结果的数据类型与操作数的数据类型可能相同,也可能不相同.运算符指出了表达式中的操作数如何运算.C语言中共有44种运算符,根据各运算符在表达式中的作用,表达式大致可以分成算术表达式.关系表达式.逻辑表达式.条件表达式.赋值表达式和逗号