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);
运行结果如下:
结果