星空网 > 软件开发 > Java

struts2值栈分析

前段日子对ognl表达式不是很理解,看了几本书上关于ognl表达式的描述后还是感觉很难,前几天学习了struts2中值栈的内容,现在感觉ognl表达式其实很容易。

struts2中利用值栈来存储数据,在struts2中,把数据存在值栈中,然后在jsp页面用ognl表达式取出。

在struts2中的action有三种方法获取值栈

ValueStack valueStack=ActionContext.getContext().getValueStack();ValueStack valueStack=(ValueStack) ServletActionContext.getRequest().getAttribute("struts.valueStack");ValueStack valueStack=ServletActionContext.getValueStack(ServletActionContext.getRequest());

 

可以看到我们可以利用request来获取值栈,而request的生命周期为一次请求,所以值栈的生命周期也为一次请求。

ValueStack 是一个接口,它的实现类是ognlvalueStack。

在valueStack中有两个数据结构,一个名字为context,另一个为root。

context的类型是OgnlContext,OnglContext实现了Map接口,所以context本质上是一个Map。

valueStack中的另一个数据结构root,它的类型是CompoundRoot,CompoundRoot继承了ArrayList类,所以它本质上是一个ArrayList,我们称它为对象栈。

map栈中有一个名称为_values的对象,它是一个HashMap,在这里存放了request,responsesession,application等servlet容器的内容,我们称它为map栈。

map栈中还有一个名称为_root的对象,它和我们上面说的valueStack中的另一个数据结构root相同,都是对象栈,为什么valueStack中会有两个对象栈呢,这是因为struts2继承了以前一些框架的内容导致的。

对象栈中保存了两个对象,一个是ValueStackAction,它代表的是当前请求的Action,

另一个是DefaultTextProvider,它是用于struts2国际化的。

我手动用一个粗糙的涂鸦图解下:

struts2值栈分析

 

所以在jsp页面中,如果要输出的内容在对象栈中,直接指定属性名字,如果在map栈中,要用#来指定

例如

String name="aaa";String Bname="bbb";ActionContext.getContext().getValueStack().push(name); //把字符串放入对象栈中ActionContext.getContext().put("Bname", Bname);  //把字符串放入map栈中

 在jsp页面中取出的对应的值:

<s:property value="name"/><s:property value="#Bname"/>

 

有错误请指出




原标题:struts2值栈分析

关键词:Struts

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

寄快递到菲律宾多少钱:https://www.goluckyvip.com/tag/96740.html
中国到菲律宾空运货运价格:https://www.goluckyvip.com/tag/96741.html
往菲律宾寄快递要多少钱:https://www.goluckyvip.com/tag/96742.html
国内寄菲律宾快递价格:https://www.goluckyvip.com/tag/96743.html
快递到菲律宾多少钱:https://www.goluckyvip.com/tag/96744.html
中国到菲律宾海运货运价格:https://www.goluckyvip.com/tag/96745.html
重庆品胜科技与星苹台达成合作 助力部队现代化后勤建设 :https://www.kjdsnews.com/a/1836523.html
回乡创业,不知道干什么,能否推荐几个农村老家创业的好项目?:https://www.vstour.cn/a/365177.html
相关文章
我的浏览记录
最新相关资讯
海外公司注册 | 跨境电商服务平台 | 深圳旅行社 | 东南亚物流