值栈中的两个逻辑部分:
1.Map栈(并不是真正的栈)。属性context,为OGNLContext类型,实际为ActionContext对象的一个引用,本质是一个Map,里面存放的各种Map,如request,session,application,attr
访问它里面的数据,用OGNL的写法是<s:property value="#session.username"/><!-- 前面加#后面的为固定的几个,如request,session,application,attr -->
2.对象栈(真正的栈)。属性root,为CompoundRoot类型,是为数据结构上的真正意义上的栈,其本质为一个ArrayList。
访问它里面的数据,用OGNL的写法是<s:property value="[1].name"/><!-- [0]是栈顶的下标 -->
值栈的生命周期为一个Action响应的周期,实际上它带有Action响应过程中的所有类型的值对象。
OGNL:一种功能强大的表达式语言
导入方式:<%@ taglib prefix="s" uri="/struts-tags" %> <!-- 导入标签库 -->