ognl之我见

最近在学习struts2, 其中要学习ognl表达式, 刚开始觉得这个挺麻烦的,半天没搞明白,所以在开始学习的时候, 就在网上下了很多的资料看看。下面是我的一些总结:

1、标准的ognl有一个ognl上下文对象, 说白了就是一个Map结构,他继承了java.util.Map类,struts2中的上下文的实现为ActionContext, 在这ActionContext中, 存储了不同范围的值,这些范围有ValueStack, request, session, application, parameters, attr。使用ognl访问这些范围中属性的值的时候,使用#符号。 例如, 访问application中的username属性的格式:#usename,

2、ValueStack是什么?

标准的OGNL中假设一个根对象, 在strut2中跟对象是ValueStack(值栈),用户访问ValueStack中的属性值时,可以省略#符号。

struts2中ValueStack的实现类是OgnlValueStack, 该对象不是存储单个值,而是存储一组对象,在OgnlValueStack中有一个List类型的root变量, OgnlValueStack就是使用这个集合来存储一组对象。在root变量中,处于第一位的对象叫做栈顶对象, 用户使用ognl访问root中的变量可以直接写上属性的名字不需使用#符号。

 

3、当struts2接受一个请求时,会迅速创建ActionContext, ValueStack, action, 然后把action放在ValueStack。

 

4、为什么使用El表达式能访问action中的属性值呢?

EL表达式只能访问的page、request、session、application中范围的值,为什么在JSP页面中使用EL表达式还能取出action中的属性值呢?。

在struts2中对HttpServletRequest进行了包装, 使用EL表达式取属性值的时候, 会在request范围中搜索相应的属性值,如果没有找到, 则从ValueStack中搜索。当struts2接受一个请求时,会迅速创建ActionContext, ValueStack, action, 然后把action放在ValueStack中。

所以使用El表达式能访问action中的属性值。

 

以上为我个人这几天学习ognl表达式的几点总结, 可能会有些出入,望看官们如是能指出其中的错误小弟真是不甚感激。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值