Struts2的数据结构

来源:互联网 发布:linux rpm yum 编辑:程序博客网 时间:2024/06/07 06:09

作为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存储和显示数据的核心,熟悉其数据结构,才能掌握请求中数据的传输。



0 0
原创粉丝点击