Structs2 HelloWorld-05 OGNL

电脑杂谈  发布时间:2020-07-19 03:20:18  来源:网络整理

ognl表达式 教程_ognl表达式 session_ognl表达式运算

一个,价值栈

1. 什么是价值栈?

简而言之: 值堆栈是与每个请求对象相对应的轻量级内存数据中心.

Struts2中一个非常令人兴奋的功能是引入了一个值堆栈,该值堆栈中的数据被统一管理以供Struts2的其他部分(例如Action,Result,Interceptor等)使用. 这样,就可以集中管理数据杂乱无章,这极大地促进了编程.

Struts2中的价值堆栈的另一个非常令人兴奋的功能是: 在大多数情况下,您根本不需要关心价值堆栈,您根本不需要关心它的位置或内容,只需要获取所需的数据. 换句话说,您可以隐式使用值堆栈.

当然,如果编写更复杂的功能(例如自定义结果或),则仍然需要显示访问值堆栈,因此,您仍然需要掌握值堆栈的知识. 2.价值栈能做什么?

简而言之,值堆栈可以安全地为每个请求线程提供通用的数据访问服务.

当请求到达时,Struts2将为每个请求创建一个新的值堆栈,即,值堆栈和请求是的对应关系,不同的请求,值堆栈不同,并且值堆栈封装请求所有需要操作的相关数据.

由于值堆栈和请求之间具有对应关系,因此值堆栈可以确保线程安全,以便为每个请求提供公共数据访问服务. 3.什么是价值栈?

ognl表达式运算_ognl表达式 教程_ognl表达式 session

事实上,到目前为止,我们一直在谈论“价值栈”,它实际上不够准确. 为什么?因为在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是一个基本容器,其中包含运行操作所需的数据,例如请求参数,会话等.

ognl表达式运算_ognl表达式 session_ognl表达式 教程

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:

ognl表达式运算_ognl表达式 session_ognl表达式 教程

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,获取属性的值

ognl表达式 教程_ognl表达式运算_ognl表达式 session

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

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 董卓
        董卓

        • 张嘉舟
          张嘉舟

          烊烊我们电影院约啦

      • 周仲美
        周仲美

        用经济手段瓦解北约和美欧联盟围堵中国战略

      热点图片
      拼命载入中...