Struts2中OGNL表达式

OGNL是一种功能强大的表达式语言
Struts2默认的表达式语言就是OGNL

作用

  • 支持对象方法调用
  • 支持类静态方法调用和值访问,表达式的格式为@[类全名(包括包路径)]@[方法名|值名]
  • 支持赋值操作和表达式串联
  • 访问OGNL上下文(OGNL context)和ActionContext
  • 操作集合对象

OGNL的要素

  1. 表达式
    表达式是整个OGNL的核心,OGNL会根据表达式去对象中取值。
  2. 根对象(Root)
    Root对象可以理解为OGNL的操作对象,表达式规定了“做什么”,而Root对象则规定了“对谁操作”
  3. Context对象
    OGNL的取值还需要一个上下文环境。设置了Root对象,OGNL可以对Root对象进行取值或写值等操作,Root对象所在环境就是OGNL的上下文环境(Context)。上下文环境规定了OGNL的操作“在哪里进行”,上下文环境Context是一个Map类型的对象,在表达式中访问Context中的对象,需要使用“#”号加上对象名称,即“#对象名称”的形式

OGNL入门

  1. 访问对象的静态方法
    @类的全路径名@方法名称(参数列表)
    @类的全路径名@属性名称
  2. 简单访问对象
OgnlContext context = new OgnlContext();
Object obj = Ognl.getValue("'helloword'.length()", context ,context.getRoot());

值栈(ValueStack)

  1. 什么是值栈:
    ValueStack是Struts的一个接口,字面意义为值栈,OgnlValueStack是ValueStack的实现类,客户端发起一个请求struts2架构会创建一个action实例同时创建一个OgnlValueStack值栈实例,OgnlValueStack贯穿整个Action的生命周期,struts2中使用OGNL将请求Action的参数封装为对象存储到值栈中,并通过OGNL表达式读取值栈中的对象属性值
  2. 值栈的内部结构:
    在OgnlValueStack中包括两部分,值栈和map(即Ognl上下文)
  • Context:
    即OgnlContext上下文,它是一个map结构,上下文中存储了一些引用,parameters、request、session、application等,上下文的Root为CompoundRoot。
  • OgnlValueStack:
    存储了action实例,他作为OgnlContext的Root对象
    拥有栈的特点,先进后出,后进先出

获取值栈对象(常用操作)

  1. 通过ActionContext对象获取值栈
    ValueStack stack1 = ActionContext.getContext().getValueStack();
  1. 通过request域获取值栈
 ValueStack stack2 = ServletActionContext.getRequest().getAttribute(ServletActionContext.STRUTS_VALUESTACK_KEY);

##操作值栈(常用操作)

  1. 对Action中的属性提供get方法的方式
  2. 调用值栈的push和set方法对值栈进行操作

EL表达式也能访问值栈

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值