欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

101.OGNL表达式

程序员文章站 2022-06-02 14:30:25
...

第三方的开源框架,全名 对象图导航语言,是Struts默认的表达式语言

OGNL有个实现了Map接口的上下文Context

想要理解OGNL,首先我们要来看Struts2一个重要的值栈(ValueStack)的概念

ValueStack

ValueStack是一个接口,Struts2中使用的OGNL表达式实际是使用了实现了ValueStack接口的OgnlValueStack

ValueStack贯穿整个Action的生命周期,每一个Action都有一个ValueStack,用来保存Action相关对象。

Struts把ValueStack对象保存在一个名为 struts.valueStack 的属性中

ValueStack又包含两个重要的部分:

1.ObjectStack:主要用来存放action中的相关动作和对象 【List形式】

2.ContextMap:主要用来存放各种映射关系,比如:parameters、request、session、application、attr【Map形式】

OGNL Context

OgnlValueStack类中包含两个重要的属性:rootcontext

root是一个ArrayList对象

context是一个OgnlContext对象,本质也是一个Map对象。而这个context对象中包含一个*对象root,context里面的root其实就是Struts2将OgnlValueStack的root对象赋值给了它,而这个顶层对象root中包含了Action的实例对象,所以通过这个root对象可以很轻易的获取到Action中的属性,而且这个顶层对象调用的时候前面不需要加#,而request,session,attr这些属性则需要。

当Struts2接收请求的时候会自动创建ActionContext、ValueStack、action对象,然后将action对象存放到ValueStack对象中,所以OGNL可以很轻易的访问到action中的数据 

特别注意:Struts2中OGNL表达式需要配合Struts标签才能使用

101.OGNL表达式

ActionContext

ServletActionContext.getRequest().setAttributet"username", "username.request");
ServletActionContext.getServletContext().setAttribute("username", "username application");
ServletActionContext.getContext().getSession().put("username", "username.session");
ValueStack valueStack= ServletActionContext.getContext().getValueStack());
System.out.println(valueStack "+ValueStack);
valueStack.set("username", "username valueStack");
 


ActionContext提供了对ognl上下文对象中数据操作的方法.
 

 

 

 

 

 

 

 

 

相关标签: struts2 ognl