一、什么是值栈
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里头都会有一个值栈对象
二、获取值栈对象
栈
- 先进后出(或后进先出)
- 最上面元素叫栈顶元素
- 存元素叫做压栈
获取值栈的方式
使用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
网友评论