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");
值栈的内存图:

Struts2的数据结构_第1张图片
可以看出ValueStack包含两部分:context和root,root为对象栈,context为map栈。

root内存图:


context内存图:

Struts2的数据结构_第2张图片

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

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

Struts2的数据结构_第3张图片

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

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

Struts2的数据结构_第4张图片

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

Struts2的数据结构_第5张图片

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



你可能感兴趣的:(struts2,值栈)