企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
## 概念 struts2提供的一个接口:ValueStack.我们用的是它的实现类OgnlValueStack.javaweb阶段,我们使用域对象来当成是数据的中转站.域对象的底层结构是Map. 在Struts2中,我们使用值栈来当成数据的中转站.我们使用ognl来获取,el同样也可以获取. 结论:值栈是用来存数据的. 值栈是谁创建的,又是什么时候创建的? 当浏览器访问action的时候,会被前端控制器拦截.在前端拦截器中自动创建VlaueStack对象(注意:访问一次,创建一次)当值栈对象被创建出来之后,会将当前访问的action对象整个放在值栈中.还会将request,session,servletContext的底层用来封装数据的Map集合也放入值栈中(注意:放的是地址引用).当整个action执行完毕后,action会销毁,值栈也会被销毁.下一次再访问又是一个新的action对象和一个新的值栈对象.所以,值栈的生命周期是伴随action一生的. ## 值栈的获取方式 ~~~ ActionContext context = ActionContext.getContext(); ValueStack vs = context.getValueStack(); ~~~ ## 值栈内部结构 Valuestack内部分为两个区:context区,root区.context的结构是Map.root区结构是List. root区: ![](https://box.kancloud.cn/2d8070e5373a001abad51d1af3b1c84c_450x165.png) context区: ![](https://box.kancloud.cn/bbf64b2e2fff4cffbe563147fd0f8728_495x348.png) 通过debug标签可以查看值栈内容. ~~~ <s:debug></s:debug> ~~~ root区: ![](https://box.kancloud.cn/2ab48e5173684317282aac4bce803c09_1608x836.png) context区: ![](https://box.kancloud.cn/8f6fe01c0bfe5ef68069f836eeb5e90f_3356x1570.png)