- OGNL的全称是Object Graph Navigation Language(对象图导航语言)
,它是一种强大的表达式语言,Struts框架使用OGNL作为默认的表达式语言
。
- OGNL 有一个上下文(Context)概念,它是一个map结构,因为它实现
了java.utils.Map 的接口。 OgnlContext(ognl上下文)=根对象(1个)+非根对象(n个),非根对象要通过"#key"访问,根对象可以省略"#key"。
注1:context:英文原意上下文,环境/容器
重点:
1、一个上下文中只有一个根对象
2、取根对象的值,只需要直接通过根对象属性即可
3、非根对象取值必须通过指定的上下文容器中的#key.属性去取。
- ognl是一种思想 (ognlContext), struts使用了这种思想,也有上下文,
即actionContext . ValueStack(值栈)是actionContext的根对象,值栈
是先进后出的数据结构,放到值栈中的对象都可视为根对象。
1、ActionContext一次请求创建一次
2、值栈取值从上往下,取到为止,如果已经拿到,不再往下找。
放到值栈中的对象都可视为根对象.valuestack又相当于一个容器,
容器里面存放的对象,包含的所有属性,都可以算valuestack的属性
4.Struts2中给参数赋值:
1、在Action中定义属性,并提供get/set方法
2、实现ModelDriven接口,返回实体,不能为null,不需要提供
get/set方法 .当ModelDriven返回实体的属性和Action中属性重名时,
ModelDriven中优先级更高