• struts2的值栈(重点) 值栈是一个存储数据的内存结构 本质是一个接口 它的实现类OgnlValueStack


    值栈(重要)和ognl表达式 (值栈其实是一个接口 它的实现类是OgnlValueStack)

    1、  只要是一个mvc框架,必须解决数据的存和取的问题

    2、  Struts2利用值栈来存数据,所以值栈是一个存储数据的内存结构

    3、  把数据存在值栈中,在页面上利用ognl表达式显示出来

    值栈的内存结构

    获取值栈的路径

      //获取值栈的三种方法
            ValueStack v1 = ActionContext.getContext().getValueStack();
            ValueStack v2 = ServletActionContext.getValueStack(ServletActionContext.getRequest());
            ValueStack v3 = (ValueStack) ServletActionContext.getRequest().getAttribute("struts.valueStack");

    三种方式获取的值栈都是同一个对象

           说明:

    1、  因为有一种是从request域中获取的,所以生命周期就是一次request请求

    内存结构:

      值栈有两个内存结构:

        一个是Map(map栈 在这里存放了request,response,session,application等servlet容器的内容) 

            一个是ArrayList结构(root  对象栈)

    1、  大致图:

    说明:

         从上图中可以看出valueStack总共分为两个部分:

              对象栈:root (arraylist结构)

              Map栈:_values       在这里存放了request,response,session,application等servlet容器的内容

    对象栈(  root   arrylist结构)的存储操作

    public class ValueStackAction extends ActionSupport {
    
        public String testGetValueStake(){
    
            //说明值栈是从request中获取到的 所以 值栈的生命周期就是一次 request请求
            ValueStack v1 = ActionContext.getContext().getValueStack();
            Person p = new Person();
            p.setName("hello");
    
            //方式1
            //push可以直接放入到栈顶!
            v1.push(p);//将对象放入栈顶
            //获取对象的值栈
            Object peek = v1.peek();
            System.out.println(peek.toString()); //Person{name='hello'}
    
            //方式2
            //add就必须先getRoot()
            v1.getRoot().add(p);
            Object o = v1.getRoot().get(0);
            System.out.println(o.toString()); //Person{name='hello'}
    
    
    
            //删除值栈对象
            v1.getRoot().remove(0); //方式1
            v1.pop(); //方式2
    
    
            return null;
        }
    
    }

    Map栈(  _Values  map结构)的存储操作

    _values       在这里存放了request,response,session,application等servlet容器的内容 取和删除都和request等一致

    坚持
  • 相关阅读:
    英雄联盟离线更新方法
    (七) Keras 绘制网络结构和cpu,gpu切换
    剑指offer | 链表中的倒数第K个结点 | 12
    剑指offer | 从尾到头打印链表 | 11
    剑指offer | 栈的压入,弹出序列 | 10
    剑指offer | 包含min函数的栈 | 09
    剑指offer | 调整数组顺序使奇数位于偶数前面 | 08
    剑指offer | 旋转数组的最小数字 | 07
    剑指offer | 两个栈实现一个队列 | 06
    剑指offer | 替换空格 | 05
  • 原文地址:https://www.cnblogs.com/gaoSJ/p/12982359.html
Copyright © 2020-2023  润新知