欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

OGNL的理解

程序员文章站 2022-06-02 14:31:07
...

1. 什么是OGNL

OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言,是一个第三方开源项目。
OGNL本身是与Struts2没有任何关系的。但Struts框架使用了OGNL用于进行表达式的计算工作。Struts2通过使用OGNL简单一致的表达式语法,可以存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。
Struts2通过jar包ognl-3...jar将OGNL项目引入。
OGNL的理解

2. OGNL的特点

相对其它表达式语言,它提供了更加丰富的功能:

  • 支持对象方法调用,如xxx.sayHello()
  • 支持类静态方法调用和常量访问,表达式的格式为:
    @[全限定性类名]@[方法名 | 常量名] 例如:@aaa@qq.com(“123”) 或 @aaa@qq.com

        <body>
        PI = <s:property value = "@java.lang.Math@PI"/><br>
        random = <s:property value="@aaa@qq.com() * 100"/>
        </body> 
        <struts>
        <constant name="struts.ognl.allowStaticMethodAccess" value="true"/>
        </struts>

    OGNL的理解

    不过,对于静态方法的访问,需要通过在Struts2的配置文件struts.xml中设置常量struts.ognl.allowStaticMethodAccess的值为true进行开启。

  • 可以操作集合对象
  • 可以直接创建对象

3. OGNL文档解读

OGNL的理解

(Struts2)框架使用了一个“标准命名上下文”来计算OGNL表达式。用于处理OGNL的最顶层对象是一个Map(通常被称为上下文Map或上下文)。在上下文Map中,OGNL有一个根对象的概念。在表达式中,根对象的引用不用使用任何“标记”,而引用其它对象则需要使用#标记。
(Struts2)框架将ActionContext设置为OGNL上下文对象,将值栈设置为OGNL根对象(值栈是一个包含多个对象的集合,但对于OGNL来说,它是作为一个对象出现的)。和值栈一起,框架也放置了其它对象到ActionContext中,其中包含表现为application、session或request上下文的Map。这些对象将与值栈中的数据共存于ActionContext中。
OGNL的理解

从以上文档的阅读可知,OGNL中有一个上下文概念,即Context,用于存放数据。OGNL的上下文其实质就是一个MAP,其中存放着很多的JavaBean对象。这些对象根据对其操作方式的不同分为了两类:根对象与非根对象。对于非根对象,需要使用#来访问,而对于根对象,则可以直接访问。
无论是根对象还是非根对象,在Struts2中均是用于在应用*享数据的。一般情况下,会在Action方法中存入数据,而在JSP页面中读取数据。

相关标签: OGNL