OGNL要素

本文记录Java学习过程中遇到的OGNL的要素~

OGNL的操作实际上就是围绕着OGNL结构的三个要素进行的,分别是表达式(Expression)、根对象(Root Object)、上下文环境(Context),具体如下:

表达式

表达式是整个OGNL的核心,OGNL会根据表达式去对象中取值。所有OGNL操作都是针对表达式解析后进行的。它表明了此次OGNL操作要做什么。表达式就是一个带有语法含义的字符串,这个字符串规定了操作的类型和操作的内容。OGNL支持大量的表达式语法,不仅支持这种“链式”对象访问路径,还支持在表达式中进行简单的计算。

示例代码(调用对象的方法):

OgnlContext context = new OgnlContext();
Object obj = Ognl.getValue("'oliver'.length()", context, context.getRoot());
System.out.println(obj);

示例代码(静态方法的调用):

OgnlContext context = new OgnlContext();
Object obj = Ognl.getValue("@java.lang.Math@random()", context, context.getRoot());
System.out.println(obj);

根对象-root

root对象可以理解为OGNL的操作对象,表达式规定了“做什么”,而Root对象则规定了“对谁操作”。OGNL称为对象图导航语言,所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关联的其他对象。

Context对象

OGNL的取值需要一个上下文环境。设置了root对象,OGNL可以对root对象进行取值或写值等操作,root对象所在环境就是OGNL的上下文环境(Context)。上下文环境规定了OGNL的操作“在哪里进行”。上下文环境Context是一个Map类型的对象,在表达式中访问Context中的对象,需要使用“#”号加上对象名称,即“#对象名称”的形式。

示例代码(获得数据):

OgnlContext context = new OgnlContext();
String name = (String) Ognl.getValue("#name", context, context.getRoot());
System.out.println(name);

User user = new User();
user.setName("oliver");
context.setRoot(user);

String name = (String) Ognl.getValue("name", context, context.getRoot());
System.out.println(name);

标签: none