Struts2

struts2:值栈的认识

2018-05-31  本文已影响0人  小漫画ing

1、之前在web阶段,在servlet里面进行操作,那数据放到一个域对象里面,在页面中使用EL 表达式获取到,域对象 在一定范围内存值和取值。
2、在struts2里面提供本身一种存储机制,这种机制类似域对象,是值栈,可以存值和取值。
(1)在action里面把数据放到值栈里面,在页面中获取到值栈数据。
3、servlet和action的区别:
(1)servlet,默认在第一次访问时候创建,创建一次。单实例对象
(2)action,也是在访问的时候创建,但是action每访问都会创建一个action对象,需要创建多次。多实例对象

我们来看一下代码,来加深记忆,代码实现如下:

package com.manman.xm;

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;
    }
}

配置文件如下:

<package name="demo" extends="struts-default" namespace="/">
        <action name="userAction" class="com.manman.xm.userAction"></action>
    </package>

因为返回值为NONE,所以就没有result。
写完了代码,就来看看运行结果:


结果

只有刷新一次页面,控制台就会多一个运行结果。
4、值栈的存储位置
(1)每次访问action时候,都会创建action对象
(2)在每个action对象里面都会有一个值栈对象。

获取值栈对象

1、获取值栈对象有多种方式
(1)常用方式:使用ActionContext类里面的方法得到值栈对象:

package com.manman.xm;

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

public class userAction extends ActionSupport {
    
    
    @Override
    public String execute() throws Exception {
        
        // 1获取ActionContext类的对象
        ActionContext context = ActionContext.getContext();
        //2调用方法得到值栈对象
        ValueStack stack1 = context.getValueStack();
        return NONE;
    }
}

2、在上面第4点的里面说了,在action对象里面都会有一个值栈对象,那我们来验证一下:

ValueStack stack1 = context.getValueStack();
ValueStack stack2 = context.getValueStack();
System.out.println(stack1==stack2);

运行结果如下:


结果
上一篇下一篇

猜你喜欢

热点阅读