java struts2值栈ognl,Struts2学习(四)———— ognl表达式,值栈,actionContex

c36a8e3b53355db696150de663aa93ad.png

一个,什么是Ognl?

通过百度百科找到的解释详细介绍了OGNL的作用.

20190105190628301642.png

现在,我们将解释OGNL的5个功能

1. 访问对象的任何属性,只需在javabean上操作即可(重要)

2,调用对象方法.

3,调用该类的静态方法

4,索引数组元素

5. 操作集(重要)

二,OGNL功能实现

在执行此操作之前,您必须了解如何使用OGNL表达式,并且必须了解OGNL表达式的值范围只能位于其上下文和根目录中. 格式是

Ognl.getValue(expression,context,root);

// expression: 为我们编写的ognl表达式,从最后两个参数获取值,并在以下示例中详细说明获取规则

// context: ognl的上下文,类型为map,

// root: ognl的根,可以是javabean,列表,地图等多个值

2.1. 操作javabean

User.java

20190105190628426646.png

Address.java

20190105190628487196.png

57f0f9e235066cf13c4073554ac364dc.png

获取javabean中的属性值

20190105190628553604.png

获取javabean中对象的属性值

20190105190628610247.png

在javabean中分配属性

20190105190628673726.png

2.2,调用对象方法

20190105190628745018.png

2.3,调用类的静态方法或属性

20190105190628814357.png

2.4,索引数组元素

20190105190628931549.png

2.5. 操作集

操作列表集合. list的组合实质上是一个数组,因此从列表中读取数据与对该数组进行操作相同.

20190105190628983308.png

可操作的地图收集

20190105190629052647.png

创建列表集合

20190105190629123939.png

创建地图收藏

3a0bb41406759356cf3004ef5ebfdcd2.png

20190105190629192301.png

2.6. 其他用法,使用数学运算符,使用“,”连接表达式,在运算符中和不在运算符中,将不解释投影,过滤等操作,它们都非常简单,仅着眼于上面.

三,OGNL和struts2的组合

如上所述,OGNL有很. 我们也感受到了它的力量. 您可以将所有内容都拿出来做表情. 但是在struts2中如何使用它?

OGNL中的上下文是struts2中的actionContext

OGNL的根是struts2中的valueStack

什么是actionContext和valueStack,它们之间的关系是什么?

3.1,ActionContext和valueStack(重要)

ActionContext:

用作OGNL的上下文. 它是操作的上下文,也可以称为操作的数据中心. 它本质上是一张地图,所有数据都存储在这里. 到底存储了什么,以及在actionContext中存储数据的方式是什么?

actionContext是一个映射,因此它以键-值对的形式存储对象,如下图所示,

请求,会话和应用程序的知名范围,请注意范围,而不是对象

参数: 这些是表单提交的参数,所有参数都将放置在此地图中,

attr(attributes): 这三个范围的所有属性都将放置在地图下. 如果有重复项,则以请求字段中的重复项为准.

VALUE_STACK: 值堆栈,用于存储valueStack对象,也就是说,可以通过ActionContext获得valueStack.

如果我们使用actionContext.put();那么键值对将直接置于ActionContext下,

注意: 除请求,必须通过键值获取. ActionContext.getContext(). get(“ request”);为什么是这样?因为struts2增强了请求. 从这里,不能直接获取actionContext. 如何增强请求?例如ognl表达式运算,将公共键和值放在actionContext中. 键值对不在请求字段中. 但是,在JSP中,可以通过在请求字段中查找键来找到键值对. 底层分两个步骤: 步骤1: 从请求字段中查找数据. 步骤2: 如果找不到,请从值堆栈中执行findValue(). 这解释了为什么不能直接通过ActionContext获取请求,以及为什么可以通过在请求字段中进行搜索来获取不在请求范围内的数据.

20190105190629265546.png

20190105190629318282.png

valueStack: 值栈本质上是一个ArrayList,它充当ognl的根ognl表达式运算,并提供在一个请求中共享数据的功能.

fab19328c4a2336d43307cc5e15fee4b.png

内部图片

20190105190629370042.png

root: 源代码中的名称为CompoundRoot,它也是一个堆栈,每次将值堆栈推入和拉出堆栈时,它实际上是对CompoundRoot的相应操作.

Context: 对actionContext的引用,即可以通过valueStack,通过getContext()获得该上下文;

当我们访问一个动作时,该动作将被添加到堆栈的顶部,也就是说,该动作将在CompoundRoot堆栈的顶部,并且我们提交的各种表单参数(用作ognl表达式)将从上到下位于valueStack上查找要分配的相应属性. 这就是价值栈的目的.

值堆栈的操作

这里提到,了解了值栈的内部,那么很容易理解.

实际上,将数据手动放入valueStack.

ActionContext.getContext(). getValueStack(). push(xxx); //通常是javabean,因此将其放置在根目录中,因为push操作在堆栈上进行,也就是说,在根目录上进行操作

ActionContext.getContext(). getValueStack(). set(key,value); //任何值都以键值形式放入根.

jsp访问

推送存储,在根目录下,您可以直接使用属性来获取它

集被存储,也可以直接通过属性获得. 这里有一个误解可以消除,即不要认为set方法是以键值对的形式存储的. 有人认为它放在上下文中,也可以不在上下文中,也可以不在根中.

上下文操作

ActionContext.getContext(). put(key,value); //存储在actionContext中,它是OGNL的上下文

JSP获取: 三种获取方式

#key get.

直接使用键获取,因为值堆栈中还包含上下文. 只需从堆栈顶部的根开始,然后从上下文中搜索

#requestGet. 因为struts2增强了请求,所以如果在请求字段中找不到请求,请使用findValue()从值堆栈的根开始一直搜索.

3.2,ActionContext和valueStack之间的关系(重要)

8a225a667ff2671be3a338ad469c88cc.png

我在你里面,你在我里面.

20190105190629413989.png

也就是说,可以通过valueStack获取actionContext,也可以通过ActionContext获取valueStack.

valueStack在根上运行,而actionContext在上下文上运行. (根和上下文是OGNL中的根和上下文)

如何获取值堆栈:

ActionContext.getContext.getValueStack(); //仅使用通用

ActionContext.getContext.get(“ VALUE_STACK”);

request.getAttribute(“ VALUE_STACK”); //为什么会这样?因为请求已得到增强. 有关详细信息,请参见上面的说明.

如何获取actionContext

ActionContext.getContext(); //常用的

valueStack.getContext();

3.3,Struts2使用OGNL表达式在不同位置获取数据

3.3.4,在jsp页面中

大多数将在此处使用,因为jsp是显示数据的位置. struts2中有很多s标签. 您可以通过配置和使用s标签和OGNL表达式来获取所需的数据. OGNL表达式的编写已经在开始时进行了说明,上下文是actionContext,根是valueStack,其余表达式取决于我们的需求. 标签的说明将在下一章中

3.3.5,位于struts.xml

有时需要OGNL表达式才能在struts.xml中获取一些数据. 例如,在结果中设置流时,您需要从操作中获取流,并且该操作可以被视为javabean且位于堆栈的顶部,因此您可以使用OGNL表达式直接获取它,但是要注意特殊的情况,如果您直接编写ognl表达式,struts2无法区分这是ognl表达式还是普通文本,因此您需要使用$ {}来指示文本是ognl表达式<

20190105190629475515.png

四个. 摘要

我认为struts2的两个最重要的点,

一个,了解其架构图,了解一般过程,

第二,本文介绍的值堆栈,actionContext和ognl之间的关系,

了解这两点,基本上对我们来说没有什么困难. 撰写三,四篇文章后,Struts2即可结束. 较差的知识点是s标签的使用,国际化以及详细的文件上载和下载功能,最后通过一个小项目使用了struts.

Struts2学习(四)-ognl表达式,值堆栈,actionContext之间的关系

本文来自电脑杂谈,转载请注明本文网址:

http://www.pc-fly.com/a/jisuanjixue/article-285444-1.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值