美文网首页struts2
struts2 值栈概述+获取值栈对象

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

作者: DouDouZH | 来源:发表于2018-05-16 15:27 被阅读0次

    一、什么是值栈

    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

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE struts PUBLIC
        "-//Apache Software Foundation//DTD Struts Configuration 2.3//EN"
        "http://struts.apache.org/dtds/struts-2.3.dtd">
    
    <struts>
        <constant name="struts.enable.DynamicMethodInvocation" value="false" />
        <constant name="struts.devMode" value="true" />
        <package name="default" namespace="/" extends="struts-default">
            <action name="userAction" class="work.zhangdoudou.Action.UserAction" method="execute">
            </action>   
            
        </package>
    </struts>
    

    多次刷新页面效果


    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 值栈概述+获取值栈对象

        本文链接:https://www.haomeiwen.com/subject/tnkedftx.html