day61_struts2_03.1:【值栈valueStack的理解】-超容易忘!-就这样记住

本文深入探讨了Struts2框架中的值栈概念及其工作原理。详细解释了值栈的结构,包括Root区和Context区的存储内容及作用,并通过示例展示了如何使用值栈进行数据设置与获取。
public class ActionDemo4 extends ActionSupport
{
	
	@Override
	public String execute() throws Exception {
		//===【对值栈的理解】
		ValueStack vs = ActionContext.getContext().getValueStack();//①==######=【拿到的是Root区(list)】---set(k,v)操作的也就是Toot(list)区。
		Map<String, Object> map = vs.getContext();//②==######=【拿到的是Context区(map)】;
		//###【Map区有一个List区的引用(可以看作map区包含了list区)】。
		//######===狭义的值栈:List区。===广义的值栈:List区+Map区。
		vs.set("key1", "aaa");
		vs.set("key2", "bbb");
		/*// 底层创建一个map集合, 将set的key和value给map集合,   map集合放在root的底层list中(Root区)。
		// 页面:
		<s:debug />
		<!-- 获取值栈中(root区)的数据 -->
		<s:property value="key1"/>-------><s:property value="key2"/>
		===页面取值成功。查看debug 值栈信息,可见root区,栈顶多了一个map对象。     ===map 
		====<s:property value="key1"/>标签 底层就是:
		通过表达式的key,传给valueStack.findValue("key"),找到value显示。
		API:vs.findValue(expr)
		*/
		
		return SUCCESS;
	}
}

①===结构-存储内容 理解:

######   值栈 就是一个 存储数据的对象:一个大Map 。总体是个Map(常说的Context区(map)),Context区里又包含 Root区(List对象)的引用。

------只不过 通常会把 List区拿出来,单独说明。因为它的特殊之处:访问后创建的action对象 放在Root区(源码就是这样的)。

------每个区存的什么数据:牢记(源码就是这样的)。

######【Root区(list)存的是: action对象;Context区(map)存的是: request、attr等域对象(引用)、List区(引用)】

②====对比(作用)理解:

值栈valuestack 和 Ognl表达式的关系是?

就像 request等域对象 和 EL表达式 的关系。===都是 页面表达式 访问  存储数据的对象 ,在页面显示。


==================================

拓展:

获取valueStack方式二:request:核心filter-->ExecuteOperation类-->Dispatcher类-->servletActionContext类 这是源码过程。





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值