1.值栈 ValueStack
1.1:值栈是干什么的?
存数据的,用在struts2里
相当于servlet中的域对象(page,request,session,application)
1.2:值栈存储位置:(每个对象中)
(1)每次访问action时,都会创建action对象(ActionContext一次请求创建一次)
(2)在每个action对象里面都会有一个值栈对象。(也就是说实例化一个action对象,就会配一个值栈,没有第二个哦)
(3)值栈取值从上往下,取到为止,如果已经拿到,不再往下找。
图解:
结果:name=小明 salary=2000
1.3:获取值栈对象的方法
ActionContext ac = ActionContext.getContext();
ValueStack vs = ac.getValueStack(); //获得值栈
1.4:值栈内部结构
栈的特点:先进后出
将后来的数据压在前来的数据上叫:压栈
栈最上面的叫:栈顶
内部结构分两部分:
第一部分:root,结构是list集合
一般都是操作root结构。
第二部分:context,结构是map集合
1.5:案例一
1.5.1:Action类
public class Demo7 {
/**
*
* 值栈的使用
*
*/
public static void main1(String[] args) {
// 栈:表示一个先进后出的数据结构
ActionContext ac = ActionContext.getContext();
System.out.println(ac);
//获得值栈的时候就已经有内容了 不是action内部创建的
/**
* 为什么要使用ValueStack作为根对象
放到值栈中的对象都可视为根对象
*/
ValueStack vs = ac.getValueStack(); //获得值栈
// push方法把项压入栈顶
vs.push(new Employee("zs", 22));
vs.push(new Employee("ls", 22));
vs.push(new Employee("ww", 22));
// pop方法移除栈顶对象并作为此函数的值返回该对象
Employee e = (Employee) vs.pop();
System.out.println(e.getName());
e = (Employee) vs.pop();
System.out.println(e.getName());
e = (Employee) vs.pop();
System.out.println(e.getName());
//输出:ww ls zs
}
/**
* 此例用于模拟struts2的值栈计算过程
*
* @param args
*/
public static void main2(String[] args) {
ActionContext ac = ActionContext.getContext();
ValueStack vs = ac.getValueStack();
vs.push(new Employee("张雇员", 2000));// 1
vs.push(new Student("小明同学", "s001"));// 0
System.out.println(vs.findValue("name"));
System.out.println(vs.findValue("salary"));
//小明同学 2000
//值栈取值从上往下,取到为止,如果已经拿到,不再往下找。
}
public String execute() {
main1(null);
System.out.println("------------------");
main2(null);
return "success";
}
1.5.2:xml配置
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
<!--
namespace:在内存中划分具体的控件
name:给package包取个名字
-->
<package name="sy" extends="base" namespace="/sy">
<action name="demo7Action" class="com.crud.two.web.Demo7">
<result name="success">/success.jsp</result>
</action>
</package>
</struts>
1.5.3:dome1跳转页面
<h1>ognl简介</h1>
<a href="${pageContext.request.contextPath}/sy/demo7Action.action">测试6</a>
1.5.4:结果
![在这里插入图片描述](https://img-blog.csdn.net/20181012104406168?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQwOTczNDc1/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70