zoukankan      html  css  js  c++  java
  • 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等一致

    坚持
  • 相关阅读:
    Thymeleaf使用
    关闭被占用端口
    在map、model、modelAndView中存放数据 回显
    @RequestAttribute 注解
    @PathVariable、@RequestHeader、@RequestParam、@RequestBody 注解使用
    RESTful风格请求映射
    yml文件 数据回显
    JVM垃圾回收与一次线上内存泄露问题分析和解决过程
    比较java_io_Externalizable和Serializable
    关于java中的对象序列化
  • 原文地址:https://www.cnblogs.com/gaoSJ/p/12982359.html
Copyright © 2011-2022 走看看