struts2 值栈浅析

用过struts2的都知道,我们在前台页面的参数,只要与我们后台的属性名称相同,当我们请求道后台时,我们前台的值是能传递到后台的,那么我们后台究竟是从哪里获取到的值呢?难道是我们的requets等域里面?答案是否定的,这里就涉及到了我们sturts2的值栈。我们后台的属性参数的值都是从值栈中获取的

我们的值栈呢,本质上是ActionContext,而我们的ActionContext是对OgnlContext的包装,OgnlContext把前台传过来的值封装在一个Map中,所以我们的属性相当于就是Map的key值,只要我们的key值匹配上了,就能获取到相应的值,这就是后台取值的原理。下面是值栈的一些基本原理,源于我对值栈的一些简单理解,如有不对,还请包涵。


ValueStack(值栈):ValueStack贯穿整个Action的生命周期(一个请求一个Action),每个Action的实例对象都有一个ValueStack对象,ValueStack相当于一个数据中转站,在其中保存当前Aciton对象和一些其他相关对象。ValueStack大致可以分为两部分Map栈+对象栈。


Map栈:ContextMap即OgnlContext,struts2把各种各样的映射关系压入ContextMap中,实际上是对ActionContext的一个引用,是一个Map,其中包括:

parameters:该Map中包含当前请求的请求参数。

request:该Map中包含当前request对象中的所有属性。

session:该Map中包含当前session对象中的所有属性。

application:该Map中包含当前application对象中的所有属性。


扫描二维码关注公众号,回复: 3569181 查看本文章

所以我们的Ognl表达式取值可以通过request.属性名的方式取到对应的值


对象栈:CompoundRoot(ObjectStack),所有参数都是从中匹配取值,取值顺序是先进后出,是一个ArrayList定义的栈,里面存放着各种和当前Action实例相关的对象,是一个数据结构的栈。


猜你喜欢

转载自blog.csdn.net/qq_36380675/article/details/53150156