struts2简要概述二

1. stuts2值栈概述(掌握)

1.1. 值栈(ValueStack)是什么

值栈(ValueStack),是Struts2数据中转站,栈中自动保存了当前Action对象和其他相关对象(包括常用的Web对象的引用,如requestsessionapplication等),也可以手动保存自己的数据对象,同时也可以随时随地将对象从值栈取出或操作(通过OGNL表达式)

值栈(ValueStack),实际是一个接口的对象的称呼,接口是ValueStack类,实现类是OgnlValueStack类,该对象是Struts2利用OGNL的基础,或者说Struts2Ognl使用都是基于值栈完成的。

如何理解数据中转站?

其实可以将它看成是一个容器,是一个临时的数据库,为什么是临时的呢?因为它只存在于内存中

作为一个数据库仓库,存放的是那些数据呢?

答:比如requestsessionapplication这些对象以及这些对象中的数据,都存在于值栈中

存放的目的:取值(页面中取值)

Struts2框架将ValueStack对象保存在request域中,键为“struts.valueStack”,即值栈是request域中的一个对象,一个请求对应一个Action实例和一个值栈对象。

1.1. 值栈的数据存储结构的分析(理解)

在值栈的内部有两个逻辑部分:

ObjectStack(对象栈):又称为root栈,保存了Action的相关对象和动作,数据存储结构是List

ContextMap(上下文栈):又称为map栈,保存了各种映射关系,如常用的web对象的引用,数据存储结构是Map

【示例1值栈的获取方式:

1) request.getAttribute(“struts.valueStack”):用的较少

2) ActionContext.getContext().getValueStack():用的非常多:底层使用的还是第一种方式获取

ActionContextAction上下文,工具类)

【值栈小结】:

值栈包括两部分: 对象栈(root栈,CompoundRoot继承了ArrayList集合OGNL上下文栈(map栈,OgnlContext,实现Map接口)

OGNL上下文栈(map)内部又分为两部分:对象栈(root)的引用和一个HashMap,这个HashMap存放了常用web对象的引用和其他映射关系。

1.1. 值栈的存取小结

值栈的主要作用就是数据的保存和获取(可以在任何地方获取)。

注意要点怎么存,就怎么取

存进root就不通过#获取;

  存进map栈,就通过#获取

1. 如何向值栈保存数据

1) ValueStack.push(obj) :保存数据到Root栈顶-压栈顶(对象本身)-匿名

2) ActionContext.getContext().put(key,value) :保存数据到Map

3) ValueStack.set(key,value):将数据保存到Root栈顶(数据对象自动被封装为Map来保存,栈顶是个mapmap里面有个属性是对象)--有名字

4) 提供Action成员变量,提供getter方法(Action就在root栈中,Action属性可以被搜索)



猜你喜欢

转载自blog.csdn.net/qq_30764991/article/details/80482887