Struts2的OGNL表达式——1

OGNL:全称为Object-Graph Navigation Language,它是一个功能强大的表达式语言,用来获取和设置Java对象的属性,它旨在提供一个更高的更抽象的层次来对java对象图进行导航。

struts2默认的表达式语言OGNL,它比其他的表达式语言有几个很大的优势

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


----------------------------------------------------------------------------------------------

值栈:ValueStack对象相当于一个栈,它贯穿整个Action的生命周期,每个action类的对象的实例都会拥有一个ValueStack对象,当struts2接受到对action的请求后,并不是直接调用action的方法,而是先将action类的属性放到ValueStack对象的顶层节点,值栈位于内存中,它也是和parameters,request,session,appliccation,attr放在一起。值栈属于OGNL Context里面的根对象,也就是说它位于整个内存中最重要的地方,所以叫根对象。根对象与另外5个对象是有区别的,根对象可以省写#号。值栈的生命周期与request请求相关,每次请求产生一个值栈,默认所有的Action会被自动放到值栈中。

假设一个action1通过服务器跳转到另一个Action2,那么这俩个action用的是同一个值栈,因为转发只有一个请求,一个只产生一个值栈。此时的内存情况:首先接受到Action1请求后,产生一个值栈,在栈顶存放的是action1的对象以及它所有的属性,然后经过服务器跳转到Action2,这时会把Action2对象压入值栈的栈顶位置,此时action1的相关内容已经位于栈底。

取值的过程:

栈的特征是先进后出,于是首先到栈顶对象中查找是否存在这个属性,如果栈顶的action2中不存在这个属性的话,它就会继续向下寻找至栈底对象,一直查找是否存在这个属性,如果找到该属性,jsp页面通过

<s:property value="username" />输出属性值。如果俩个action中都有同名的属性值那获取为与栈顶对象的属性值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值