101.OGNL表达式

第三方的开源框架,全名 对象图导航语言,是Struts默认的表达式语言

OGNL有个实现了Map接口的上下文Context

想要理解OGNL,首先我们要来看Struts2一个重要的值栈(ValueStack)的概念

ValueStack

ValueStack是一个接口,Struts2中使用的OGNL表达式实际是使用了实现了ValueStack接口的OgnlValueStack

ValueStack贯穿整个Action的生命周期,每一个Action都有一个ValueStack,用来保存Action相关对象。

Struts把ValueStack对象保存在一个名为 struts.valueStack 的属性中

ValueStack又包含两个重要的部分:

1.ObjectStack:主要用来存放action中的相关动作和对象 【List形式】

2.ContextMap:主要用来存放各种映射关系,比如:parameters、request、session、application、attr【Map形式】

OGNL Context

OgnlValueStack类中包含两个重要的属性:rootcontext

root是一个ArrayList对象

context是一个OgnlContext对象,本质也是一个Map对象。而这个context对象中包含一个顶级对象root,context里面的root其实就是Struts2将OgnlValueStack的root对象赋值给了它,而这个顶层对象root中包含了Action的实例对象,所以通过这个root对象可以很轻易的获取到Action中的属性,而且这个顶层对象调用的时候前面不需要加#,而request,session,attr这些属性则需要。

当Struts2接收请求的时候会自动创建ActionContext、ValueStack、action对象,然后将action对象存放到ValueStack对象中,所以OGNL可以很轻易的访问到action中的数据 

特别注意:Struts2中OGNL表达式需要配合Struts标签才能使用

ActionContext

ServletActionContext.getRequest().setAttributet"username", "username.request");
ServletActionContext.getServletContext().setAttribute("username", "username application");
ServletActionContext.getContext().getSession().put("username", "username.session");
ValueStack valueStack= ServletActionContext.getContext().getValueStack());
System.out.println(valueStack "+ValueStack);
valueStack.set("username", "username valueStack");
 


ActionContext提供了对ognl上下文对象中数据操作的方法.
 

 

 

 

 

 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值