一、OGNL的概述:
1,什么是OGNL:
OGNL:对象图导航语言,比EL表达式强大很多倍的语言。
- EL:从域对象中获取数据,从EL的11个对象中获取。${name} ${pageContext.request.contextPath}
- OGNL:调用对象的方法,获取Structs2的值栈的数据。OGNL其实是第三方的表达式语言,及时不在Structs2里面也能在java中运行。
2.为什么学习OGNL:
3.OGNL的使用要素:
- 表达式
- 根对象
- Context对象
二、OGNL在java环境下的入门(了解)
1.访问对象的方法:
2、访问对象的静态方法:
3.获得root中的数据:
4.访问context中的数据:
三、OGNL在Structs2环境下的入门:
1、访问对象的方法:
2、访问对象静态的方法:
默认情况下不会开启静态方法,必须在配置文件中手动开启
四、值栈的概述:
1、什么是值栈:
ValueStack其实类似于一个数据中转站(Structs2的框架当中的数据就都保存到了ValueStack中)
- ValueStack接口,实现类OgnlValueStack对象
- ValueStack贯穿整个Action的生命周期。(Action一旦创建了,框架就会创建一个ValueStack对象)
2、值栈的内部结构:
值栈内部结构:
3、值栈与ActionContext的关系:
4、获得值栈:
1)通过ActionContext获取值栈:
2)通过request对象获取值栈:
注:两种方式获得的ValueStack方式是同一个。因为在一个Action实例当中获得的一个ValueStack的实例,所以上诉代码返回值为true
5、操作值栈:
方式一:
方式二:
6、获取值栈数据:
获取值栈中的数据就是在页面中使用OGNL表达式即可
1)获取root数据:
2)获取context数据:
7、EL如何访问值栈的数据:
五、OGNL中特殊字符:
1.#号
1)获取context数据:
2)使用#构建Map集合:
2、%号:
1)强制解析OGNL:
2)强制不解析OGNL:
property里面的OGNL是一定会解析的,加上%就强制转换成字符串,不让解析。
3、$号:
在配置文件中使用OGNL