OGNL表达式介绍
2013-11-14 16:16
246 查看
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。 -------百度百科
从语言角度来说:它是一个功能强大的表达式语言,用来获取和设置 java 对象的属性 ,它旨在提供一个更高抽象度语法来对 java 对象图进行导航。另外,java 中很多可以做的事情,也可以使用 OGNL 来完成,例如:列表映射和选择。对于开发者来说,使用 OGNL,可以用简洁的语法来完成对 java 对象的导航。通常来说:通过一个“路径”来完成对象信息的导航,这个“路径”可以是到 java bean 的某个属性,或者集合中的某个索引的对象,等等,而不是直接使用 get 或者 set 方法来完成。
首先来介绍下OGNL的三要素:
一、表达式:
表达式(Expression)是整个OGNL的核心内容,所有的OGNL操作都是针对表达式解析后进行的。通过表达式来告诉OGNL操作到底要干些什么。因此,表达式其实是一个带有语法含义的字符串,整个字符串将规定操作的类型和内容。OGNL表达式支持大量的表达式,如“链式访问对象”、表达式计算、甚至还支持Lambda表达式。
二、Root对象:
OGNL的Root对象可以理解为OGNL的操作对象。当我们指定了一个表达式的时候,我们需要指定这个表达式针对的是哪个具体的对象。而这个具体的对象就是Root对象,这就意味着,如果有一个OGNL表达式,那么我们需要针对Root对象来进行OGNL表达式的计算并且返回结果。
三、上下文环境:
有个Root对象和表达式,我们就可以使用OGNL进行简单的操作了,如对Root对象的赋值与取值操作。但是,实际上在OGNL的内部,所有的操作都会在一个特定的数据环境中运行。这个数据环境就是上下文环境(Context)。OGNL的上下文环境是一个Map结构,称之为OgnlContext。Root对象也会被添加到上下文环境当中去。
OGNL 的基本语法:
1. 对Root对象的访问
OGNL使用的是一种链式的风格进行对象的访问。具体代码如下:
@Test public void testOgnl6() { try { Map<String, String> map = (Map<String, String>)Ognl.getValue("#{'key1':'value1'}", null); System.out.println(map); List<String> list = (List<String>)Ognl.getValue("{'key1','value1'}", null); System.out.println(list); Object object = Ognl.getValue("new java.lang.Object()", null); System.out.println(object); //{key1=value1} //[key1, value1] //java.lang.Object@dda25b } catch (OgnlException e) { e.printStackTrace(); } }
View Code
这篇OGNL的介绍就到这里,本文并没有把OGNL的所有内容都介绍出来,主要介绍了OGNL的一些简单的知识,后面有时间的话我会陆续介绍OGNL的相关知识,并且结合Struts2深入分析下OGNL的构成。同样谢谢大家的阅读,本人写博文的时候难免有错误的地方,如果大家发现希望大家给予指正,谢谢。
相关文章推荐
- AT32UC3C之power manager(PM)
- 我得博客
- Android: NDK编程入门笔记
- JavaSE_网络编程_TCP_练习2_文本文件
- lucence .net 3.0 测试分词的方法
- CATransition的动画效果类型及实现方法
- 遍历字符串中的每个字符
- jquery横向滚动条
- ngx-push-stream模块源码学习(一)——序言
- 软件项目版本号的命名规则及格式
- VC++ Runtime Error 异常捕获之不挂的程序
- CSS中position的absolute和relative的应用
- Android安装失败 Installation error code: -110
- Android 开发中的多线程编程技术(例子:计时器)
- LeetCode OJ——Minimum Depth of Binary Tree
- c++ 虚函数 const等的一些小问题记录
- Boadload和Image$$??$$Limit含义
- 2d toolkit字体描边
- div+css实现的小三角tip小提示(原理及代码)
- Unit Testing with JUnit - Tutorial