Structs2 框架笔记(二)值栈与OGNL的常用操作

本文详细解读了Struts框架中的值栈概念,包括值栈的组成部分、如何获取和操作值栈、以及值栈在Action生命周期中的作用。文章还介绍了OGNL表达式语言在值栈中的应用,提供了丰富的示例代码帮助开发者更好地理解和实践。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

概念

1. 值栈(ValueStack)
在用户提交一个请求后,系统会创建两个对象,Action的实例和值栈对象,值栈由两部分组成:

  • CompoundRoot root; //对象栈(根元素),数据结构意义上的栈实现的
  • transient Map< String,Object > context; //Map栈(上下文),是一个Map结构

    引用其他博主的图更容易理解,详细见链接:https://www.cnblogs.com/hlhdidi/p/6185836.html

2. OGNL(Object-Graph Navigation Language)
是一种功能强大的表达式语言,OGNL表达式的计算你需要通过一个Map进行,而该Map有一个名称叫做上下文context,这个context的Map中已经放了若干对象,这些对象分为两类:根对象和非根对象。对于非根对象,需要使用”#”来访问,而对于根对象,则可以直接访问。


常用操作的语句

1. 值栈的获取
①从ActionContext中获取
ActionContext.getContext().getValueStack();
②通过request域
HttpServletRequest request=ServletActionContext.getRequest();
ValueStack vs=(ValueStack)request.getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);

2. 值栈的操作

  • root对象(根对象)实现了栈的数据结构,可以使用peek(),pop(),push()操作
  • context对象(非根对象)实现了Map,可以使用Map的操作

3. 通过< s:debug />来对值栈中数据的存放情况进行了解。

4.通过< s:property value=”[index].name” />来显示值栈中根对象的值
其中index默认从0开始往根对象的下面搜索,找到对应的属性则返回,index可以为0,1,2…,如果默认从根对象的栈顶开始搜索,则可以省略掉[index],直接写成

5.往context中的session中放入数据
ActionContext.getContext().getSession().put(“myStudent”,student);

在jsp页面获取该数据时:< s:property value=”#session.myStudent.name” />
或者 ${sessionScope.myStudent.name}

6.往context中的application中放入数据
ActionContext.getContext().getApplication().put(“myStudent”,student);

在jsp页面获取该数据时:< s:property value=”#application.myStudent.name” />
或者 ${applicationScope.myStudent.name}

7.请求参数:在提交Action请求时所携带的参数,会自动存放到context中的parameters属性中
在jsp页面获取该数据时:< s:property value=”#parameters.username” />

8.创建Action对象后会将Action实例本身也放在context的action属性中
在jsp页面获取该数据时:< s:property value=”#action.username” />

9.遍历List和Map
在jsp页面获取该数据时:
< s:iterator value=”#userList” >
< s:property / >
< /s:iterator >


注意

关于值栈:
①值栈会贯穿Action的整个生命周期,即与请求request的声明周期相同,为保证这一点,就将值栈放在request域当中
②一个Action实例只有一个值栈对象
③一个Action的非根对象都存放在同一个Map中
④当Struts接收到请求后,会创建一个Action对象和ActionContext对象,那么值栈对象也创建了,Struts会将Action放在值栈的栈顶。所以可以通过属性名访问到Action中的属性。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值