ognl简述
原文:OGNL表达式语言详解
简介
OGNL(Object-Graph Navigation Language)的全称是对象图导航语言,它是一种功能强大的开源表达式语言,比EL(只能从域或内置对象中)表达式更强大,使用这种表达式语言,可以通过某种表达式语法,OGNL可以存取Java任意对象的任意属性,调用Java对象的方法,同时能够自动实现必要的类型转换。如果把表达式看作是一个带有语义的字符串,那么OGNL无疑成为了这个语义字符串与Java对象之间沟通的桥梁。
Struts2的默认表达式语言就是OGNL
作用
-
支持对象方法调用 objName.methodName()
-
支持类静态方法调用和值访问 @java.lang.String@format(‘name’,‘mark’)
-
支持赋值操作和表达式串联 price=100,calculatePrice()
-
支持访问OGNL上下文(OGNL context)和ActionContext
-
支持操作集合对象
要素(表达式、根对象、上下文环境)
OGNL的操作实际上就是围绕着OGNL结构的三个要素而进行的,分别是表达式(Expresssion)、根对象(Root Object)、上下文环境(Context)
表达式
表达式是整个OGNL的核心,OGNL会根据表达式去对象中取值。所有OGNL操作都是针对表达式解析后进行的。它表明了此次OGNL操作要"做什么"。表达式就是一个带有语法含义的字符串,这个字符串规定了操作的类型和操作的内容。OGNL支持大量的表达式语法,不仅支持这种"链式"对象访问路径,还支持在表达式中进行简单的计算
根对象(Root)
Root对象可以理解为OGNL的操作对象,表达式规定了"做什么",而Root对象则规定了"对谁操作"。OGNL称为对象图导航语 言,所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关联的其它对象。
Context对象
实际上OGNL的取值还需要一个上下文环境,设置了Root对象,OGNL可以对Root对象进行取值或写值等操作,Root对象所在环境就是OGNL的上下文环境(Context)。上下文环境规定了OGNL的操作"在哪里进行"。上下文环境Context是一个Map类型的对象,在表达式中访问Context中的对象,需要使用"#“号加上对象名称,即”#对象名称"的形式
用法
需要引入jar包为ognl-x.x.x.jar
访问对象的方法
|
|
访问对象的静态方法
|
|
获取Root中数据(不需要加#)
|
|
获取Context中的数据(需要加#)
|
|