【java】Struts2中值栈的理解
来源:互联网 发布:seo工作难点跟重点 编辑:程序博客网 时间:2024/05/22 02:30
一、前言
小编最近又继续学习了java的经典框架S2SH,在struts2中很激动人心的特性就是引入了值栈,统一管理数据,这样一来,数据统一管理,大大方便了程序的编写。那值栈到底是什么呢?小编慢慢道来。
二、值栈是什么?
值栈:是一个可以线程安全的为每个请求提供公共存储数据服务。
当请求到达的时候,struts2会为每个请求安排不同的值栈,一个值栈对应一个请求。值栈封装了一次请求所需要的所有的数据。当请求结束的时候,值栈也就是自动清理。这个就是值栈的生命周期。
另外值栈分为了两个类型:对象栈和map栈。这里我们需要重点了解一下,如何向这两种类型的值栈中存储和读取数据。
对象栈和map栈有什么区别?
对象栈:
- 处于对象栈中的对象中的属性可以直接访问
- 如果在对象栈中有一样的名称属性,从栈顶开始查找,直到找到为止
- 回显的数据,应放到对象栈中,效率高。
- 用ognl表达式访问对象栈,直接属性名称就可以了,不加#
map栈:
- 可以存储request、session、Application
- 可以存储对象
- ognl表达式访问,如果一个对象放到request中,#request.对象的key值.属性。如果对象直接放到map中,#对象的key值.属性。
- 把一个对象放到map中,不能直接访问对象的属性,得使用#
三、值栈的存储和读取
3.1 把对象存储到对象栈中
存储到对象栈中,要使用“ActionContext.getContext().getValueStack()”+…,
//把Departmentlist放到对象栈的栈顶 ActionContext.getContext().getValueStack().push(DepartmentList); //把Departmentlist放到对象栈的栈顶 ActionContext.getContext().getValueStack().getRoot().add(0,DepartmentList); //放到栈顶 //把Departmentlist放到对象栈的栈顶 ActionContext.getContext().getValueStack().getRoot().add(DepartmentList); //放到栈底 //获取对象栈顶的元素 ActionContext.getContext().getValueStack().peek(); ActionContext.getContext().getValueStack().getRoot().get(0); //移除对象栈顶的元素 ActionContext.getContext().getValueStack().pop(); ActionContext.getContext().getValueStack().getRoot().remove(0); //把一个map放入到对象栈的栈顶 //ActionContext .getContext().getValueStack().set(Key, 0);
3.2 把对象栈中的数据取出
在开始遍历的时候不需要指明,直接调用其中的属性就可以了。
<s:iterator > <tr class="TableDetail1 template"> <td><s:property value="dname"/></td> <td><s:property value="description"/></td> <td> <!-- 在struts2的标签中只能用ognl表达式,不能用el表达式 在html标签中,只能使用el,不嫩使用ognl表达式 --> <s:a action="departmentAction_deleteDepartment?did=%{did}">删除</s:a> <a href="saveUI.html">修改</a> </td> </tr> </s:iterator>
3.3 把对象存储到Map栈中
对于map就要有不同的分析了,对象是直接存储在map中的,还是存储在request中,然后在存储在map中。
//把一个对象存放到map栈中 ActionContext.getContext().put("departmentList", DepartmentList); //#request.departmentList //ServletActionContext.getRequest().setAttribute("departmentList", DepartmentList);
3.4 从Map栈中取数据
在开始遍历的时候,需要指明value,。
<s:iterator value="#DepartmentList"> <tr class="TableDetail1 template"> <td><s:property value="dname"/></td> <td><s:property value="description"/></td> <td> <!-- 在struts2的标签中只能用ognl表达式,不能用el表达式 在html标签中,只能使用el,不嫩使用ognl表达式 --> <s:a action="departmentAction_deleteDepartment?did=%{did}">删除</s:a> <a href="saveUI.html">修改</a> </td> </tr> </s:iterator>
四、进阶
在开发的时候我们经常遇到以下这些情况:
list中含有list
list中含有map
map中含有list
4.1 list中含有list
<!-- list中含有list --> <s:iterator> <s:iterator> <s:property value="dname"/> </s:iterator> </s:iterator>
4.2 list中含有map
<!-- list中含有map--> <s:iterator value="#list"> <s:iterator value="top"> <s:property value="key"/> <s:property value="value.dname"/> </s:iterator> </s:iterator>
4.3 map中含有list
<!-- map中含有list--> <s:iterator value="#maps"> <s:property value="key"/> <!-- 该迭代就是一个list--> <s:iterator value="value"> <s:property value="dname"/> </s:iterator> </s:iterator>
五、小结
搞清楚map是用#,对象栈直接读取。
综上,重点就是对map栈和对象栈中的数据进行读取,没毛病!多多总结方法,以后总会用到的。还有就是iterator的遍历,这个操作也是值得研究的!加油!
借鉴博客:
Struts2流程机制
Struts2完成一次请求的过程
struts2请求过程源码分析
0 0
- 【java】Struts2中值栈的理解
- struts2中值栈的理解
- Struts2中值栈的理解
- Struts2中值栈的理解
- struts2中值栈的理解
- Struts2中值栈的理解【转】
- 深度剖析Struts2中值栈的概念
- Struts2中值栈
- Java中值传递及内存分配的理解
- Struts2中ognl中值栈
- java中值得注意的
- java中值传递的详解
- 三大中值定理的理解
- Struts2值栈的理解
- Struts2值栈的理解
- Struts2值栈的理解
- struts2值栈的理解
- Action Context中值栈(value Stack )栈上下文(Stack context)的个人理解
- 快速排序法
- 一张图道尽程序员的出路
- H5实战页面
- 构造方法、类的初始化块以及类字段的初始化顺序
- Excel VBA 自动添加新行并递增ID
- 【java】Struts2中值栈的理解
- Android录制小视频(三)
- Java之方法重载篇(我重载了,你要如何来调用我。。)
- 海量数据处理(二) 位图
- 海量数据处理(三) T树
- 突如其来的“中断异常”,我(Java)该如何处理?
- 海量数据处理(四) simhash
- 内存管理(一) ptmalloc基础知识
- 内存管理(二)ptmalloc的分配回收…