struts2 值栈概述+获取值栈对象

一、什么是值栈

1、之前在web阶段,在servlet里面操作,把数据放到域对象里,在页面中使用el表达式获取到对应的值,域对象在一定的范围内,存值和取值。
2、在struts2里面提供本身的一种存储机制,类似于域对象,是值栈,可以存值和取值

  • 在action里面吧数据存放到值栈里面,在页面中获取到值栈数据

3、servlet和action的区别

  • servlet:默认在第一次访问时创建,只创建一次,单实例对象
  • action:访问时创建,每次访问action都会创建action对象,多次创建,多实例对象

Action创建演示
UserAction.java

package work.zhangdoudou.Action;

import com.opensymphony.xwork2.ActionSupport;

public class UserAction extends ActionSupport{

    
    public UserAction() {
        System.out.println("创建了Action");
    }

    @Override
    public String execute() throws Exception {
        // TODO Auto-generated method stub
        return NONE;
    }
}

struts.xml





    
    
    
        
           
        
    

多次刷新页面效果


image.png
image.png

4、值栈的存储位置

  • 每次访问action的时候,都对创建action对象
  • 在每个action里头都会有一个值栈对象
image.png

二、获取值栈对象

  • 先进后出(或后进先出)
  • 最上面元素叫栈顶元素
  • 存元素叫做压栈
image.png
获取值栈的方式

使用ActionContex他类里面的方法获取值栈对象

        //1获取actionContext类对象
        ActionContext context=ActionContext.getContext();
        //2调用放大得到值栈对象
        ValueStack stack1=context.getValueStack();
每个action只有一个action值栈对象

代码

package work.zhangdoudou.Action;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;
import com.opensymphony.xwork2.util.ValueStack;

public class UserAction extends ActionSupport{

    public UserAction() {
        System.out.println("创建了Action");
    }

    @Override
    public String execute() throws Exception {
        //1获取actionContext类对象
        ActionContext context=ActionContext.getContext();
        //2调用放大得到值栈对象
        ValueStack stack1=context.getValueStack();
        ValueStack stack2=context.getValueStack();
        
        System.out.println(stack1==stack2);
        
        // TODO Auto-generated method stub
        return NONE;
    }
}

执行结果

image.png

你可能感兴趣的:(struts2 值栈概述+获取值栈对象)