热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

struts2重点——ValueStack和OGNL

一、值栈(ValueStack)1.实现类:OGNLValueStack2.对象栈:CompoundRoot(

一、值栈(ValueStack)

1.实现类:OGNLValueStack

2.对象栈:CompoundRoot(针对的是类级别的)

(1)继承自 ArrayList —— 先进后出

(2)提供了栈的几个操作:peek() 返回栈顶对象,pop() 弹出栈顶对象,push() 将对象压入栈顶

(3)默认情况下,会将当前 Action 对象压入栈顶。通过这个 Action 对象,可以访问到该 Action 的所有属性以及错误信息。

(4)获取方式

可以通过 ValueStack 对象的 getRoot() 方法来获取到。

(5)页面中获取对象栈中的内容:

结合 struts2 标签和 OGNL,不需要指定根,默认为值栈。唯一需要注意的一点是:会从指定下标开始向下查找第一个 属性,若不指定,则从栈顶开始向下找。

如:

3.Map栈(针对的是 action 级别的,方法级别的)(相当于一个容器,存放了所有的东西,所有东西的获取都可以从它里拿)

(1)ActionContext 中的 context 就是 Map栈,和从 ValueStack 中获取的 context 是一个东西

(2)内容:
原生的 Web 资源,
Web资源对应的 Map 对象(通过 ActionContext 获取 sessionMap 等,其实也是从 Map 栈中获取的)
ValueStack 对象
Action 类运行相关的环境信息

(3)获取方式:
后台:Map context = ActionContext.getContext().getValueStack().getContext();

(4)页面中获取 Map 栈中的数据:

结合 Struts2 标签和 OGNL 来取值,指定 #。

如:

(5)Map 栈结构如图:

4.ValueStack 对象的获取方式:

(1)通过 ActionContext 对象获得

ValueStack valueStack = ActionContext.getContext().getValueStack();

(2)通过读取请求域获取

ValueStack valueStack = (ValueStack) request.get("struts.valueStack");

(3)通过 ServletActionContext 获取

ValueStack valueStack = ServletActionContext.getValueStack(ServletActionContext.getRequest());

 

5.Struts2会为每一个请求创建一个 ValueStack 对象,保证了线程安全。

 

对象栈是针对 Action 类或者手动压入栈顶的对象,而 map 栈针对的是一个 action 请求,针对的是方法,在方法中我们可以得到的东西或者可以设置的东西,在map栈中就能够体现。

 

二、OGNL(对象图导航语言)

1.本身不属于 Struts2 ,是属于 Apache Common 下的一个子项目。ognl-3.0.6.jar,依赖 javassist-3.11.0.GA.jar

2.未指定上下文,从根对象中读取数据:

(1)从 root 对象中读取 rootProperty 属性:

Object value = Ognl.getValue("rootProperty", root);

(2)从 rootList 或是 rootArray 中读取 第一个 root 的 rootProperty 属性:

Object value = Ognl.getValue("[0].rootProperty", rootList);

(3)从 rootMap 中读取属性  rootMapKey01 对应的值:

e1:

Object depart02 = Ognl.getValue("rootMapKey01", rootMap);

e2:

HashMap map &#61; new HashMap<>();
map.put(
"attr.name", "attr.value");
Object value
&#61; Ognl.getValue("[&#39;attr.name&#39;]", map);

3.同时指定了上下文&#xff08;必须为一个Map对象&#xff09;和根&#xff08;为一个 List&#xff09;

&#xff08;1&#xff09;若指定了 #&#xff0c;则表示从 Map 中查找

Object value &#61; Ognl.getValue("#mapKey02.propertyName", map, rootList);

&#xff08;2&#xff09;若没有指定 #,则表示从根中查找

Object value &#61; Ognl.getValue("[1].propertyName", map, rootList);

4.调用非静态方法&#xff1a;

Object value &#61; Ognl.getValue("size()", list);

5.调用静态方法&#xff1a;

e1:

Object value &#61; Ognl.getValue("&#64;java.lang.Math&#64;PI", null);

e2:

Object value1 &#61; Ognl.getValue("&#64;java.lang.Math&#64;floor(&#39;3.14&#39;)", null);

 

转:https://www.cnblogs.com/solverpeng/p/5646225.html



推荐阅读
  • 开发笔记:Java是如何读取和写入浏览器Cookies的
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了Java是如何读取和写入浏览器Cookies的相关的知识,希望对你有一定的参考价值。首先我 ... [详细]
  • 在重复造轮子的情况下用ProxyServlet反向代理来减少工作量
    像不少公司内部不同团队都会自己研发自己工具产品,当各个产品逐渐成熟,到达了一定的发展瓶颈,同时每个产品都有着自己的入口,用户 ... [详细]
  • 在springmvc框架中,前台ajax调用方法,对图片批量下载,如何弹出提示保存位置选框?Controller方法 ... [详细]
  • Imtryingtofigureoutawaytogeneratetorrentfilesfromabucket,usingtheAWSSDKforGo.我正 ... [详细]
  • JavaWeb中读取文件资源的路径问题及解决方法
    在JavaWeb开发中,读取文件资源的路径是一个常见的问题。本文介绍了使用绝对路径和相对路径两种方法来解决这个问题,并给出了相应的代码示例。同时,还讨论了使用绝对路径的优缺点,以及如何正确使用相对路径来读取文件。通过本文的学习,读者可以掌握在JavaWeb中正确找到和读取文件资源的方法。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了Redis的基础数据结构string的应用场景,并以面试的形式进行问答讲解,帮助读者更好地理解和应用Redis。同时,描述了一位面试者的心理状态和面试官的行为。 ... [详细]
  • t-io 2.0.0发布-法网天眼第一版的回顾和更新说明
    本文回顾了t-io 1.x版本的工程结构和性能数据,并介绍了t-io在码云上的成绩和用户反馈。同时,还提到了@openSeLi同学发布的t-io 30W长连接并发压力测试报告。最后,详细介绍了t-io 2.0.0版本的更新内容,包括更简洁的使用方式和内置的httpsession功能。 ... [详细]
  • XML介绍与使用的概述及标签规则
    本文介绍了XML的基本概念和用途,包括XML的可扩展性和标签的自定义特性。同时还详细解释了XML标签的规则,包括标签的尖括号和合法标识符的组成,标签必须成对出现的原则以及特殊标签的使用方法。通过本文的阅读,读者可以对XML的基本知识有一个全面的了解。 ... [详细]
  • 个人学习使用:谨慎参考1Client类importcom.thoughtworks.gauge.Step;importcom.thoughtworks.gauge.T ... [详细]
  • Java验证码——kaptcha的使用配置及样式
    本文介绍了如何使用kaptcha库来实现Java验证码的配置和样式设置,包括pom.xml的依赖配置和web.xml中servlet的配置。 ... [详细]
  • 本文介绍了一种处理AJAX操作授权过期的全局方式,以解决Asp.net MVC中Session过期异常的问题。同时还介绍了基于WebImage的图片上传工具类。详细内容请参考链接:https://www.cnblogs.com/starluck/p/8284949.html ... [详细]
  • GreenDAO快速入门
    前言之前在自己做项目的时候,用到了GreenDAO数据库,其实对于数据库辅助工具库从OrmLite,到litePal再到GreenDAO,总是在不停的切换,但是没有真正去了解他们的 ... [详细]
  • 本文介绍了Android中的assets目录和raw目录的共同点和区别,包括获取资源的方法、目录结构的限制以及列出资源的能力。同时,还解释了raw目录中资源文件生成的ID,并说明了这些目录的使用方法。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
author-avatar
他的一个号码_616
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有