初学栈ValueStack

  1. OGNL
    1.1 OGNL的全称是Object Graph Navigation Language(对象图导航语言),它是一种强大的表达式语言
    1.2 OgnlContext(ongl上下文)其实就是Map

    OgnlContext=根对象(1)+非根对象(N)
    非根对象要通过"#key"访问,根对象可以省略"#key"

    注1:context:英文原意上下文,环境/容器

1.3 把根对象和非根对象说出来

ValueStack
ValueStack实际上就是一个容器。它由Struts框架创建.
2.1 值栈
先进后出的数据结构,弹夹 push/pop
2.2 为什么要使用ValueStack作为根对象
放到值栈中的对象都可视为根对象

EL表达式 从小到大
page -> request -> session -> application

OGNL表达式 从上至下
A
B
C
D

//伪代码
*.action
3. ActionContext
每次发出请求时都会创建一个ActionContext,也就是说,ActionContext的生命周期是和request相同的,
3.1 ActionContext ac = ActionContext.getContext();//保证同一请求中只创建一个上下文
request
session
application
parameters
ValueStack(root)

3.2 向ValueStack压栈
push(XxxAction)//helloAction
push(ModelDirver.getModel())//model不为null user

3.3 Map<String,String[]> map = request.getParamterMap();
//参数名==OGNL表达式
{“userName”:“aaa”,“uname”:“bbb”,“upwd”:“ccc”,“age”:“22”}

  setValue("userName", ac, vs, "aaa");
  setValue("uname", ac, vs, "bbb");
  setValue("upwd", ac, vs, "ccc");
  setValue("age", ac, vs, "22");
总结一下:
一:ActionContext生命周期是一次请求,每次发出请求都会创建一个新的ActionContext,就和	request一样,每次创建新的ActionContext时会重新引用那些对象。
二:而且不只生命周期一样,它本身也具备了request域的功能,可以从后台携带数据到前台,也和request一样
三:通过ActionContext可以直接获得session和application各自的域对象,操作时更方便
四:最重要一点是:ActionContext本身是一个Map,它存储了很多的对象例如request,response.
  1. struts2中传递数据
    可以使用作用域,但更多的是利用ValueStack或ActionContext

4.1.ValueStack的特点(值栈):

1).把一个对象放到vs里面之后,我们从这个vs中是拿不到这个对象的,但是我们可以直接拿到这个对象里面的属性以及属性值.
2).从vs中拿值的时候,是从vs中的property name这一个列来拿的,拿到的是property value这一列的值.所以如果我们通过vs把一个值传到页面,我们不能直接把这个值放到vs里,因为这样拿不到,我们应该把这个值放到一个对象的属性里面,然后再把这个对象放vs中,这个时候就可以通过vs拿到这个对象的属性了,也就是我们要传的值.
3).每次浏览器发送一个新的请求,都会生成一个新的ValueStack对象,上一次的ValueStack对象就没了,找不到了.(类似之前学习的request对象的特点)
4).每次创建一个新的ValueStack对象后,会把这个对象放到ActionContext里面.

4.2.ActionContext的特点

1).向ac里面放值的时候是通过key-value的形式存放的,key是String类型,value是Object类型,取值的是同样通过key拿到value.
2).struts框架默认向这个对象里面存放的对象(数据)很多,包括request、session、application、ValueStack、parameters等

3.每次请求都会创建一个新的ActionContext对象(每次请求打印出ac的地址值可以看出来)

猜你喜欢

转载自blog.csdn.net/anhldd/article/details/82808116