ognl与valueStack(重点)

ognl是什么,它有什么用
ognl是Object-garph Navigation Language的缩写,它是一种功能强大的表达式语言
比EL表达式功能强大
struts2将ognl表达式语言,集成到struts2框架当中,作为它的默认表达式语言。

OGNL 提供的五大类功能
1.支持对象方法的调用,如xxx.doSomeSpecial();
2.支持类静态的方法调用和值访问
3.支持OGNL上下文(OGNL context)和actionContext(重点:操作ValueStack值栈)
4.支持赋值操作和表达式串联
5.操作集合对象

问题:vlaueStack是什么,它有什么用?
valueStack是值栈。
它是什么,我们从两个方面来说
1.从技术角度,ValueStack就是一个接口
2.从使用角度来看 是一个容器,

我们是用valueStack最大的作用就是将action相关的数据以及web相关的对象携带到我们的页面上,简单说,在struts2中通过valueStack将action中的数据携带到jsp页面上进行展示。

问题:ognl与valueStack他们什么关系?
在我们额页面上通过ognl表达式将valueStack数据获取出来
这里写图片描述
根中的数据不需要使用#获取,非根中数据需要使用#获取。
ognl叫做对象导航图语言

2.ValueStack
他是一个接口
我们使用它是将其 作为一个容器 ,用于携带我们的action数据到页面,

在页面使用ognl表达式获取数据

问题一 : 什么是值栈
1.ValueStack有一个实现类叫做OgnlValueStack
2.每一个Action实例都有一个ValueStack对象 一个请求对用一个ValueStack对象(一个请求,一个request,一个action,一个valueStack) 生命周期就是request 响应回去就没了
3.值栈存贮了在其中保存当前action和其他相关对象(request.session application、parameters)
4.struts2框架将valueStack以“struts.valueStack”为名存储到request域中了

问题二:
valueStack的内部结构
一个是 root 其实就是一个ArrayList 就是action 的相关信息
还有一个就是context 其实就是一个Map 各种映射 常见的web对象,等价于ognlContext 上下文
ognlContext里面装有Root
但是struts2的root在list集合中,list中的root但是在map中也有引用 ,所以Map集合是struts2中如假包换的ognlContext的上下文
这里写图片描述

OGNL表达式,访问root中数据时,不需要#,访问request,session,application,attr ,parammeters对象数据 必须写#

我们想要从list中获取数据可以不适用#(他就是ognl的root)
如果从map中获取数据需要使用#。(其实在struts2中map—-context其实就是ognlcontext)
源码中的
这里写图片描述
valueStack就是一个接口,具体实现找到实现类按F4,OGNLvALUEsTACK

结论:ValueStack它由两部分, list map
在struts2中list就是root map就是ognlcontext

默认情况下,在struts2中获取数据从root中获取。

问题三:值栈对象的创建,ValueStack和ActionContext是什么关系?
这里写图片描述
valuestack是每一次请求,都会创建。
在actioncontext中持有了valuestack的引用

问题四:如果获取值栈对象
对于valuestack有两种方式
1.通过request获取
2.通过actionContext获取
这里写图片描述

问题五:向值栈中保存数据 主要是针对root
主要有两个方法,一个叫push(Object obj)–》底层是root.add(0,obj) 将数据存储到栈顶 压栈 先进后出 用list模拟栈结构
还有一个
set(String name,Object obj)—–》底层是将数据封装到HashMap中,在将这个HashMap压入栈顶

在jsp中,通过查看值栈的内容

问题六:在jsp中获取值栈的数据
root中数据不虚要#号
而context中数据不需要#号

1.如果栈顶是一个Map集合,获取时,可以直接通过Map集合的key来获取value。

2.如果栈顶数据不是一个Map,没有key值,可以使用序号来获取。
从0的位置向下查找所有

只查找0位置上的数据。
这里写图片描述

如果获取ognlContext中数据:
1.request数据 request.setAttribute();
2.session数据 session.setAttribute();
3.application数据 application.setAttribute();
4.attr 依次从request,session,application中查找
5.parameters 获取请求参数

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值