OGNL(对象图导航语言)是什么? 图片看不了?点击切换HTTP 返回上层
OGNL 的全称是“Object-Graph Navigation Language”,即对象图导航语言,它是一种功能强大的开源表达式语言。使用这种表达式语言可以通过某种表达式语法存取 Java 对象的任意属性,调用 Java 对象的方法,以及实现类型转换等。
OGNL 具有以下特点。
了解 OGNL 的概念和特点后,下面讲解一下 OGNL 的组成。OGNL 的操作实际上是围绕 OGNL 结构的三个要素进行的,分别是表达式(expression)、上下文对象(context)和根对象(root)。这三个要素的具体说明如下。
OGNL 具有以下特点。
- 支持对象方法调用。如 objName.methodName()。
- 支持类静态方法调用和值访问,表达式的格式为 @[类全名(包括包路径)]@[方法名|值名]。如 @java.lang.String@format('fruit%s','frt')。
- 支持赋值操作和表达式串联。如 price=100,discount=0.8,在方法 calculatePrice() 中进行乘法计算会返回 80。
- 访问 OGNL 上下文(OGNL context)和 ActionContext。
- 操作集合对象。
了解 OGNL 的概念和特点后,下面讲解一下 OGNL 的组成。OGNL 的操作实际上是围绕 OGNL 结构的三个要素进行的,分别是表达式(expression)、上下文对象(context)和根对象(root)。这三个要素的具体说明如下。
1. 表达式
表达式是整个 OGNL 的核心,OGNL 会根据表达式到对象中取值。所有 OGNL 操作都是针对表达式解析后进行的,它表明了此次 OGNL 操作要“做什么”。实际上,表达式就是一个带有语法含义的字符串,这个字符串规定了操作的类型和操作的内容。2. 上下文对象
上下文对象规定了 OGNL 操作“在哪里进行”。context 对象是一个 Map 类型的对象,在表达式中访问 context 中的对象,需要使用 # 号加对象名称,即“# 对象名称”的形式。例如要获取 context 对象中 user 对象的 username 值,可以如下书写:#user.username