struts2中的OGNL上下文、ValueStack 和 ActionContext之间的联系

一、关于OGNL

1.    Object Graph Navigation Language 对象图导航语言

2.    开源项目,取代页面中Java脚本,简化数据访问

3.    和EL同属于表达式语言,但功能更为强大

4.    OGNL表达式的计算围绕OGNL上下文进行,由ognl.OgnlContext类表示,实现了Map接口

5.    OGNL上下文中可以以键值对的形式包含多个对象,可以将其中一个指定为根对象。如果在书写OGNL表达式时没有指定访问哪个对象,就是访问根对象。

·  访问根对象,直接书写对象的属性

·   访问其他对象必须使用“#key”前缀

注意:OGNL上下文中只能有一个根对象,但是可以指定具体哪个对象是根对象

二、关于ValueStack值栈

1.   Struts2对OGNL提供了支持

·  Struts 2将OGNL上下文设置为ActionContext。
·  将值栈作为OGNL上下文的根对象,即值栈的内容可以直接访问,而无需#前缀。
·  Action总是位于值栈的栈顶,所以访问Action中的属性无需#

2.    Struts2对OGNL进行了扩充
• Struts2使用了值栈作为OGNL的根元素,并且值栈中可以存储多个对象,这不就是变相的实现了OGNL可以有多个根对象吗?

• 值栈是Struts2的内容,而不是OGNL的内容,值栈是Struts2对OGNL的扩展,也是Struts2的核心所在
• 值栈通过接口com.opensymphony.xwork2.util.ValueStack来定义,实现类是com. opensymphony. xwork2. ognl.OgnlValueStack
• 当Struts2接受一个aciton请求时,就会创建ActionContext、ValueStack、Action,将ValueStack作为ActionContxt的根对象,将Action放在ValueStack的栈顶。
• Struts2会自动查找值栈中的所有对象(从栈顶到栈底),直到找到一个匹配的对象或者查找完毕也没有找到。

• 值栈是根对象,所以任何对象都可以直接访问,而不需要使用#。

三、ActionContext、ValueStack、Action的关系:

ActionContext是Struts2中OGNL的上下文,其中有很多对象,比如application、request、session、用户自定义对象等。
ActionContext下还有一个固定的根对象,这个根对象就是ValueStack。
ValueStack中可以放置多个对象,正常流程下,Struts2会将Action放在值栈的栈顶。

 

转载于:https://www.cnblogs.com/java-afei/p/3254917.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值