Struts2的数据结构

作为MVC框架,一个最主要的功能就是对请求中的数据进行存储和显示,Struts2将数据存储在值栈中。

ValueStack说明:

1.ValueStack是一个接口,在Struts2中使用OGNL表达式,实际上是使用实现了ValueStack接口的类OgnlValueStack。

2.ValueStack贯穿整个Action的生命周期。每个Action都拥有一个ValueStack对象。

3.Struts2把ValueStack对象保存在名为struts.valueStack的request域中。

获取值栈的三种方法:

<span style="white-space:pre">	</span>ValueStack valueStack = ActionContext.getContext().getValueStack();
	ValueStack valueStack1 = ServletActionContext.getContext().getValueStack();
	ValueStack valueStack2 = (ValueStack) ServletActionContext.getRequest().getAttribute("struts.valueStack");
值栈的内存图:


可以看出ValueStack包含两部分:context和root,root为对象栈,context为map栈。

root内存图:


context内存图:


其中context中的_root和root的内容是一样的。

下面让我们来看一下root中到底放了什么:


可以看出root是类CompoundRoot实现的,查看CompoundRoot的源码可知,root其实是一个ArrayList,而中图中也可以看出,其内存放了ValueStackAction和DefaultTextProvider,分别是当前Action和国际化支持的类。

而context中信息主要放在_values的table,里面一map形式存放了request、session和application等信息。


到此我们可以总结出值栈的完整结构:


值栈作为Struts2存储和显示数据的核心,熟悉其数据结构,才能掌握请求中数据的传输。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值