
一个,价值栈
1. 什么是价值栈?
简而言之: 值堆栈是与每个请求对象相对应的轻量级内存数据中心.
Struts2中一个非常令人兴奋的功能是引入了一个值堆栈,该值堆栈中的数据被统一管理以供Struts2的其他部分(例如Action,Result,Interceptor等)使用. 这样,就可以集中管理数据杂乱无章,这极大地促进了编程.
Struts2中的价值堆栈的另一个非常令人兴奋的功能是: 在大多数情况下,您根本不需要关心价值堆栈,您根本不需要关心它的位置或内容,只需要获取所需的数据. 换句话说,您可以隐式使用值堆栈.
当然,如果编写更复杂的功能(例如自定义结果或),则仍然需要显示访问值堆栈,因此,您仍然需要掌握值堆栈的知识. 2.价值栈能做什么?
简而言之,值堆栈可以安全地为每个请求线程提供通用的数据访问服务.
当请求到达时,Struts2将为每个请求创建一个新的值堆栈,即,值堆栈和请求是的对应关系,不同的请求,值堆栈不同,并且值堆栈封装请求所有需要操作的相关数据.
由于值堆栈和请求之间具有对应关系,因此值堆栈可以确保线程安全,以便为每个请求提供公共数据访问服务. 3.什么是价值栈?

事实上,到目前为止,我们一直在谈论“价值栈”,它实际上不够准确. 为什么?因为在Struts2中,值堆栈分为广义和狭义意义: 3: 1: 狭义意义的价值堆栈
通常是指实现com.opensymphony.xwork2.util.ValueStack接口的对象,当前是com.opensymphony.xwork2.ognl.OgnlValueStack对象.
窄值堆栈主要用于访问动态EL(表达式语言)操作所需的值和结果. 当然,OgnlValueStack对象主要用于支持OGNL(对象图导航语言)操作.
窄值堆栈存储了一些OGNL可以访问的数据,例如:
•Action的实例,以便您可以通过OGNL访问Action实例中的属性值
•可以将OGNL表达式操作的值设置为值堆栈,并且可以通过强制方式主动访问和设置值堆栈对象
•由OGNL表达式生成的中间变量. 例如ognl表达式运算,以后使用Struts2标签和循环标签时,自然会存在循环变量,这些变量存储在值堆栈中
3,2: 广义值堆栈
通常引用ActionContext对象. ActionContext是操作在其中运行的上下文. 每个ActionContext是一个基本容器,其中包含运行操作所需的数据,例如请求参数,会话等.

ActionContext是线程安全的,每个线程都有一个独立的ActionContext,因此您不必担心值堆栈中的线程安全问题.
ActionContext中存储了很多值,例如:
我了解到Xwork与Web无关,因此Action不需要依赖任何Web容器,也不需要与Servlet API交互,但是Action需要能够访问Web的数据. Web应用程序不仅要获取请求参数的Value,通常还需要直接在Action中获取请求或会话的某些数据. 对于这些数据ognl表达式运算,现在可以通过ActionContext获得.
3,3: 关于广义和狭义
您将看到ActionContext实际上包含一个窄值堆栈. 因此,ActionContext也包含其他数据,因此ActionContext被称为通用值堆栈.
在将来,当谈论值堆栈时,除非另有说明,否则大多数都指广义值堆栈. 无论如何,据说在开发时是从值堆栈中获取值的. 当然,有一个例外,就是在页面上使用OGNL时,默认情况下该值是从statck值中获取的,而没有特殊标记.
在structs2的第一个实例中,
1). 在helloWorld中,$(productName)读取productName的值. 实际上,该属性不在请求之类的域对象中,而是从值堆栈中获取的.
2). ValueStack:

I. 值堆栈对象可以从ActionContext II中获得. 值栈分为两个逻辑部分
>地图堆栈: 实际上,它是OgnlContext类型的,它是一个Map,并且也是对ActionContext的引用. 各种地图存储在内部:
requestMap,sessionMap,applicationMap,parametersMap,attr
>对象堆栈: 实际上是CompoundRoot类型,是使用ArrayList定义的堆栈. 它存储与当前Action实例相关的各种对象.
它是数据结构含义的堆栈.
二,读取属性值
1. ognl概述
OGNL是Object-Graph Navigation Language的缩写,它是功能强大的表达语言(Expression Language,简称EL),通过其简单一致的表达语法,您可以访问对象的Properties,对象的调用方法遍历整个对象的,并实现诸如字段类型转换之类的功能. 它使用相同的表达式访问对象的属性. “”.
2,获取属性的值

Struts2使用s: property标签和OGNL表达式读取值堆栈中的属性值
1). 值堆栈中的属性值:
>对于对象栈: 对象栈中对象的属性值
>映射堆栈: 请求,会话,应用程序的属性值或请求参数的值.
2). 读取对象堆栈中对象的属性:
>如果要访问对象堆栈中的对象的属性. 您可以使用以下形式之一:
object.propertyName ; //推荐 object['propertyName'] ; object["propertyName"]
> ObjectStack中的对象可以由从零开始的下标引用. 可以通过[0]来引用ObjectStack中堆栈顶部的对象,
它下面的对象可以用[1]引用.
[0]. 消息
> [n]的含义是从第n个对象而不是第n个对象进行搜索
>如果从堆栈顶部开始搜索,则可以省略下标部分: message
本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-285448-1.html
烊烊我们电影院约啦
用经济手段瓦解北约和美欧联盟围堵中国战略