struts2 中session在 Value Stack的存储

struts2中ValueStack的存储,我想弄明白底层的流程,request稍微有点特殊,我就讨论下session在ValueStack的存储:首先,在Action中... struts2 中 Value Stack的存储,我想弄明白底层的流程,request稍微有点特殊,我就讨论下session在Value Stack的存储:首先,在Action中,获得Map session,在里面放入session.put("name","zhangsan");问题一:此时,name=zhangsan,在Value Stack怎么存的?然后页面跳转成功,我第二次访问这个Action,然后取出session.get("zhangsan");这当然能取出,问题二:我们知道Value Stack是放在request中,第一次存储结束后,request销毁,第二次又是新的request,Value Stack里的session怎么能获取到么值?问题三:当我们查看Value Stack中的context中时,key有两个session,
一个叫session,另一个叫……struts2……session,两个都存有name=zhangsan,这不浪费空间么?这两个有什么区别?
问题一:我先说一下底层自己的理解,不对的请指正:此时name=zhangsan,会在Value Stack的context 的key为session中存一份,还会在正真的session中(容器给的,像tomcat的session)存一份,我这样说对么?因为我这三个问题互相有关联,可不可以尽量都答全。
展开
 我来答
xinqing22le
2013-01-09
知道答主
回答量:5
采纳率:0%
帮助的人:5.5万
展开全部
当请求到达struts2控制器的时候会创建ValueStack,它会首先初始化context区域(包括request,session,application等),确实实在请求结束后request销毁,但是你的每次请求创建ValueStack的时候都会去初始化 context区域,request是销毁了,但是每次请求到来初始化context区域的是时候都是根据容器中session去初始化的(包括application也一样)。
你对struts中session的操作其实是对容器中session的操作的,也就是说你put的对象会放在容器中。
即便request销毁,下次初始化ValueSatck的context区域的时候还是用容器的session中获取。
至于为什么值栈中为什么会有两个session可能一个是struts自己创建的,一个是容器的,这个我也不太清楚,但是浪费空间到不至于,两个key的指针是指向同一个对象的。
追问
前两问答得我赞同,ValueStack操作的是对容器中包装之后的session。在页面的两个session是一个key?我不清楚,我在程序调试debug中只找到了一个,那个没找到?
追答
两个session指向同一个map对象,也就是你放入的name=zhangsan,两个session本身就是key,context区域也是一个map
a11e90
2013-01-08 · 知道合伙人软件行家
a11e90
知道合伙人软件行家
采纳数:473 获赞数:1702
qq交流群:208779755 博客:https://my.oschina.net/haitaohu

向TA提问 私信TA
展开全部
额 struts2的valuestack 的确是存了两份 你要说他浪费空间也可以
但设计者是基于 在哪都可以取到 功能强了 必然牺牲性能的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式