Struts2-OGNL-ValueStack

OGNL表达式语言介绍

OGNLObject Graphic Navigation Language(对象图导航语言)的缩写,

它是一个开源项目。 Struts2框架使用OGNL作为默认的表达式语言。

OGNL相对其它表达式语言具有下面几大优势:

   1、支持对象方法调用,如xxx.doSomeSpecial()

   2、支持类静态的方法调用和值访问,表达式的格式:

      @[类全名(包括包路径)]@[方法名 |  值名],例如:

             @java.lang.String@format('foo %s', 'bar')

             @tutorial.MyConstant@APP_NAME

   3、支持赋值操作和表达式串联,如price=100, discount=0.8,

        calculatePrice(),这个表达式会返回80

   4、访问OGNL上下文(OGNL context)和ActionContext

   5、操作集合对象。

 Ognl有一个上下文(Context)概念,说白了上下文就是一个MAP结构,它实现

 java.utils.Map的接口.

理解Struts2中的 ValueStack

ValueStack实际是一个接口,Struts2中利用OGNL时,实际上使用的是实现了该接口的OgnlValueStack,这个类是Struts2利用OGNL的基础


ValueStack ( 值栈 ): 贯穿整个 Action 的生命周期 ( 每个 Action 类的对象实例都拥有一个

                                  ValueStack对象).相当于一个数据的中转站.在其中保存当前

                                  Action对象和其他相关对象.

Struts 框架把 ValueStack 对象保存在名为“ struts.valueStack 的请求属性中 ,request

ValueStack对象的内部有两个逻辑部分:

ObjectStack: Struts  把动作和相关对象压入ObjectStack--List

ContextMap: Struts 把各种各样的映射关系(一些Map 类型的对象) 压入ContextMap

Struts会把下面这些映射压入ContextMap

parameters: Map 中包含当前请求的请求参数

request: Map 中包含当前request 对象中的所有属性

session: Map 中包含当前session 对象中的所有属性

application:Map 中包含当前application  对象中的所有属性

attr:Map按如下顺序来检索某个属性: request, session, application





理解OGNL Context

l OgnlValueStack 类包含两个重要的属性   一个 root 和一个 context

       *   其中root本质上是一个ArrayList.

       *   而context是一个Map(更确切的说是一个OgnlContext对象)

l 在这个 OgnlContext 对象( context )中,有一个默认的顶层对象 _root OGNL 访问 context 中这个默认顶层对象中的元素时,是不需要 # 号的,直接通过元素的名称来进行访问,
l 而访问其他对象时,如 request session attr 等,则需要 # 号引用。

       :Struts2OgnlValueStackroot对象赋值给了OgnlContext中的_root对象,在OgnlValueStackroot对象中,保存着调用Action的实例,因此,在页面上通过Struts2标签访问Action的属性时,就不需要通过#号来引用

     总结:ognl Context包含 ObjectStack属性和ContextMap属性


理解ActionContext




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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值