热门标签 | 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



推荐阅读
  • 本文详细介绍了如何构建一个高效的UI管理系统,集中处理UI页面的打开、关闭、层级管理和页面跳转等问题。通过UIManager统一管理外部切换逻辑,实现功能逻辑分散化和代码复用,支持多人协作开发。 ... [详细]
  • Splay Tree 区间操作优化
    本文详细介绍了使用Splay Tree进行区间操作的实现方法,包括插入、删除、修改、翻转和求和等操作。通过这些操作,可以高效地处理动态序列问题,并且代码实现具有一定的挑战性,有助于编程能力的提升。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 本文详细介绍了Java中org.neo4j.helpers.collection.Iterators.single()方法的功能、使用场景及代码示例,帮助开发者更好地理解和应用该方法。 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • Explore a common issue encountered when implementing an OAuth 1.0a API, specifically the inability to encode null objects and how to resolve it. ... [详细]
  • 技术分享:从动态网站提取站点密钥的解决方案
    本文探讨了如何从动态网站中提取站点密钥,特别是针对验证码(reCAPTCHA)的处理方法。通过结合Selenium和requests库,提供了详细的代码示例和优化建议。 ... [详细]
  • 本文详细介绍了如何在Linux系统上安装和配置Smokeping,以实现对网络链路质量的实时监控。通过详细的步骤和必要的依赖包安装,确保用户能够顺利完成部署并优化其网络性能监控。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 深入理解Java泛型:JDK 5的新特性
    本文详细介绍了Java泛型的概念及其在JDK 5中的应用,通过具体代码示例解释了泛型的引入、作用和优势。同时,探讨了泛型类、泛型方法和泛型接口的实现,并深入讲解了通配符的使用。 ... [详细]
  • 本文介绍如何使用JPA Criteria API创建带有多个可选参数的动态查询方法。当某些参数为空时,这些参数不会影响最终查询结果。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 深入解析 Spring Security 用户认证机制
    本文将详细介绍 Spring Security 中用户登录认证的核心流程,重点分析 AbstractAuthenticationProcessingFilter 和 AuthenticationManager 的工作原理。通过理解这些组件的实现,读者可以更好地掌握 Spring Security 的认证机制。 ... [详细]
  • 本文探讨了在Django项目中,如何在对象详情页面添加前后导航链接,以提升用户体验。文章详细描述了遇到的问题及解决方案。 ... [详细]
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社区 版权所有