一、OGNL的概述
1、什么是OGNL
OGNL比EL强大很多被的表达式语言(EL获取的数据来源与四个作用域,EL提供11个web对象),OGNL是一个独立的表达式语言。Struts2发现OGNL功能很强大,将OGNL引入到自身当中,作为自己的表达式语言。
OGNL全称是对象图导航语言(Object-Graph Navigation Language),可以通过某种表达式语法,存取Java对象的任意属性,调用Java对象的方法,同时能够自动实现必要的类型转换。
2、OGNL的作用
l 访问对象的方法。如:objName.methodName();
l 访问对象的静态方法:@java.lang.String@format();
l 支持赋值操作和表达式串联
l 访问OGNL上下文(OGNL context)和ActionContext
l 操作集合对象
3、OGNL的要素
(1)表达式:带有语法含义的字符串,规定了“做什么”
(2)Root:OGNL的操作对象,规定了“对谁操作”
(3)OgnlContext对象:Root对象所在的环境就是OGNL的上下文环境(Context),规定了“在哪里进行”
注:上下文环境Context是一个Map类型的对象,在表达式中访问Context中的对象,需要使用“#”加上对象名称:#对象名称
二、OGNL的入门
1、OGNL在Java工程使用(了解)
@Test
// 获得对象的方法
public void demo1() throws OgnlException{
// 获得数据:
OgnlContext context = new OgnlContext();
Object value = Ognl.getValue("'helloworld'.length()", context, context.getRoot());
System.out.println(value);
}
@Test
// 调用对象的静态方法
public void demo2() throws OgnlException{
// 获得数据:
OgnlContext context = new OgnlContext();
Object value = Ognl.getValue("@java.lang.Math@random()", context, context.getRoot());
System.out.println(value);
}
@Test
/**
* OGNL获得root的数据
* * root中一般存对象
*/
public void demo3() throws OgnlException{
Product product = new Product();
product.setName("电视机");
product.setPrice(2999d);
// 获得Context对象:
OgnlContext context = new OgnlContext();
context.setRoot(product);
Object value = Ognl.getValue("name", context, context.getRoot());
System.out.println(value);
}
@Test
/**
* OGNL获得context的数据
* * context中存入的List集合,其他的普通的值
* * 获取context数据需要加#
*/
public void demo4() throws OgnlException{
// 获得Context对象:
OgnlContext context = new OgnlContext();
context.put("key", "郝强宝");
Object value = Ognl.getValue("#key", context, context.getRoot());
System.out.println(value);
}
注:root中一般存对象。