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)存一份,我这样说对么?因为我这三个问题互相有关联,可不可以尽量都答全。 展开
一个叫session,另一个叫……struts2……session,两个都存有name=zhangsan,这不浪费空间么?这两个有什么区别?
问题一:我先说一下底层自己的理解,不对的请指正:此时name=zhangsan,会在Value Stack的context 的key为session中存一份,还会在正真的session中(容器给的,像tomcat的session)存一份,我这样说对么?因为我这三个问题互相有关联,可不可以尽量都答全。 展开
2个回答
展开全部
当请求到达struts2控制器的时候会创建ValueStack,它会首先初始化context区域(包括request,session,application等),确实实在请求结束后request销毁,但是你的每次请求创建ValueStack的时候都会去初始化 context区域,request是销毁了,但是每次请求到来初始化context区域的是时候都是根据容器中session去初始化的(包括application也一样)。
你对struts中session的操作其实是对容器中session的操作的,也就是说你put的对象会放在容器中。
即便request销毁,下次初始化ValueSatck的context区域的时候还是用容器的session中获取。
至于为什么值栈中为什么会有两个session可能一个是struts自己创建的,一个是容器的,这个我也不太清楚,但是浪费空间到不至于,两个key的指针是指向同一个对象的。
你对struts中session的操作其实是对容器中session的操作的,也就是说你put的对象会放在容器中。
即便request销毁,下次初始化ValueSatck的context区域的时候还是用容器的session中获取。
至于为什么值栈中为什么会有两个session可能一个是struts自己创建的,一个是容器的,这个我也不太清楚,但是浪费空间到不至于,两个key的指针是指向同一个对象的。
追问
前两问答得我赞同,ValueStack操作的是对容器中包装之后的session。在页面的两个session是一个key?我不清楚,我在程序调试debug中只找到了一个,那个没找到?
追答
两个session指向同一个map对象,也就是你放入的name=zhangsan,两个session本身就是key,context区域也是一个map
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询