struts2重点、精华、用法总结(六):数据处理机制之值栈

值栈

1.What:

Struts提供的一个域,对应ValueStack类型,作用在于存储数据,实现action到jsp的数据交互。故其重点为存入数据和读出数据。

作用:管理一次请求有效的数据

优点:与视图层(view层)解耦和。通常我们使用的视图层多为jsp,但视图层并不只有jsp可以实现,还有诸如freemaker和velocity等其他技术,若某一项目前期使用的是jsp+el+jstl标签,若后期访问量和并发不断增多,想要提高web的效率和访问速度,可能会使用以上两种模板技术来进行迭代,但由于jsp多和el、jstl标签配合使用,而以上两种技术又不支持el、jstl,就是更换技术很麻烦,但他们都支持值栈和struts标签,故达到了解耦和的效果。

2.使用:

• 在action中向值栈存入数据。
需要ognl找到对应位置,将数据存入
• 在view层中从值栈中获取数据
需要ognl找到对应位置之后将数据取出。

3.获取方式:

语法:
ValueStackvs = ActionContext.getContext().getValueStack(); //获取值栈
vs.setValue(“ognl”, object); //向ognl指定位置取值
vs.findValue(“ognl”); //想ognl制定的位置存值
注意:其中使用的ognl相关不是原生的ognl,而是经过struts2封装过后的ognl

4.内部存储结构

(1)综述:
这里写图片描述

(2)context区域:本质上,是一个map
Key value
Request map1 等价于request作用域底层的map
Session map2 等价于session作用域底层的map
Application map3 等价于application作用域底层的map
等价的意思为:数据严格同步

作用:可以通过valuestack统一对三大作用域进行操作

代码示例:

    public String vs1(){
        ValueStackvs = ActionContext.getContext().getValueStack();
        HttpSession session = ServletActionContext.getRequest().getSession();
        session.setAttribute("username", "zhnagsan");

        String username = (String)vs.findValue("#session.username");
        System.out.println("username:"+username);

        vs.setValue("#request.passwd", "123456");
        HttpServletRequest request = ServletActionContext.getRequest();
        String passwd = (String)request.getAttribute("passwd");
        System.out.println("passwd:"+passwd);
        return "vsok";
    }

(3)Root区域:
此处多放置当前action的对象以及struts标签处理的结果

5.思考:

Valuestack是一次请求有效,为什么可以管理session和application作用域???
原来,值栈并不是直接管理session,而是间接的通过session来管理session.这句话可能有语病,但要表达的意思是对的.值栈相当于一个存放数据的空间,假设其本身就是一个java类,里面有的那些request,session,等,其实只是拿了一个引用,通过这个引用使用session来管理session,这样,值栈的生命周期结束了,也仅仅是代表这个值栈失去了对session的引用,除非再它持有这个引用时,调用session的销毁方法,否则这个值栈的生命周期与session并无任何关系。
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值