前端偶遇之值栈

来源:互联网 发布:网络消费知识 编辑:程序博客网 时间:2024/05/20 13:06

值栈是Struts框架存取值的中转站,虽然并非有着不可替代的地位,但是其极大简化了后端数据在前端使用的方式,关于前端向后端传递数据的获取,打算重写总结另一篇.

在说值栈之前,说下和值栈相关的几个概念.JSP,九大内置对象,四大域.JSP是sun公司将html和Java代码相结合创建出来的,可以在页面上直接书写代码是一大亮点,其原理是在web容器中,容器将jsp中的<%! %>脚本声明,<%=>脚本表达式,<% %>脚本片段提取出来,自动封装成servlet,因此可以将jsp视作一个servlet.

JSP拥有这九大内置对象和四大域,值栈就是建立在次基础之上的.九大内置对象:

1,request引用请求

2,response引用响应

3,session引用session容器对象

4,page引用当前页面对象相当于this

5,application引用当前项目对象

6,config 引用当前配置信息

7,pageContext引用页面上下文对象,主要用来获取其他八个对象

8,out对象,用来输出

9,exception异常对象

       九大内置对象在JSP翻译成servlet之后都有响应的方法获取对象,由此可见内置对象就是在拥有JSP对象之后自动生成的对象.在容器范围web有着相应的四大域,page<request<session<pageContext.关于相应的设置值,获取值,移除值等api操作参见javax的API文档.

       为什么在介绍值栈之前介绍JSP的四大域呢?Struts2框架将四大域的内容放在了值栈中.也就是说值栈保存了当前Action对象和web对象,web对象就包括四大域的内容和attr,paramentes.

       Struts是以Action来驱动的,一个Action对应一个请求,同时也对应一个值栈,并且值栈会被放置到request域中,名称为Struts.valueStack.因此值栈的获取既可以通过request对象的get(“struts.valueStack”)来获取也可以直接使用ActionContext.getValueStack获取.

       简单的介绍下值栈的数据结构:

       值栈分为两个部分:一部分是对象栈(root栈),它保存的是Action对象和自定义的其他对象它是一个数组集合,本质上是一个arrayList,另一部分是上下文栈,这是一个map栈,map栈中包含了_root,当前action对象._value常见的web对象引用,可手动存放的其他数据

       值栈的操作.

              对象栈

                     1,Struts自动将action对象放置在对象栈中

                     2,手动存放

1)    匿名存放,valueStack.push(o)

2)    有名map,valueStack.set(“name”,object);

上下文栈

       获取上下文栈对象 ActionContext.getContext().put(“name”,object);

       值栈的取值

              1,对象栈数据

1)    直接根据存取的名称获取,无需加#

2)    根据序号取值,根据栈顶取值[0].top.key,从栈顶获取第一个数据

2,上下文栈数据

       需要添加#来获取

       #key

       值栈的搜索顺序

1)    如果不加#,则先从对象栈中查找,如果为找到则搜索上下文栈,如果都没有则不显示

2)    如果加了#则直接搜索上下文栈,找不到则不显示

3)    pageContext---->request---->session----->application

 

值栈的生命周期

       1)值栈是与请求相对应的,也就是request的生命周期.

              

原创粉丝点击