`
white182517
  • 浏览: 162913 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

OGNL使用手记

    博客分类:
  • java
阅读更多

基本概念 

OGNL全称是Object-Graph Navigation Language,是一个用来获取和设置JAVA对象的属性的表达式语言。通过使用表达式语法导航对象图,而不是直接调用对象的获取和设置方法可以提供许多应用。比如在XML文件或者脚本文件中嵌入OGNL表达式语法,在JSP页面展现层使用OGNL表达式语法。类似的应用有Velocity,Freemark,Webwork。

如何使用

最简单的使用是直接使用ognl.Ognl类来评估一个OGNL表达式。 Ognl类提供一些静态方法用来解析和解释OGNL表达式,最简单的示例是不使用上下文从一个对象中获取某个表达式的值,示例如下:

java 代码
  1.  import ognl.Ognl; import ognl.OgnlException;      
  2. try {           
  3.        result = Ognl.getValue(expression, root);       
  4. }    
  5. catch (OgnlException ex)    
  6. {          
  7.         // Report error or recover       
  8. }  

上述代码将基于root对象评估expression,返回结果,如果表达式有错,比如没有找到指定的属性,将抛出OgnlException。

更复杂一点的应用是使用预解析的表达式。这种方式允许评估表达式前捕获解析错误,也允许缓存解析出来的表达式进一个AST供重得使用从而提高性能。Ognl的parseExpression方法就是用来执行预解析操作的。

Ognl类的获取和设置方法大都可以接受一个context map参数,是一个Map类型的对象,允许你一些自己的变量进去,缺省的上下文里只包含#root和#context两个键。 Ognl内部会用这个Map替换OgnlContext类的缺省的map属性。Ognl的一些addDefaultContext方法就是完成这些功能的。

OgnlContext提供一些设置,可以更改OGNL的缺省行为,比如TypeConverter接口实例用来改变类型转换行为,具体可以参见相关文档。

下面的示例展示如何从root对象中解析出documentName属性,然后将当前用户名称添加到返回的结果后面:

java 代码
  1. private Map context = new HashMap();       
  2.   
  3. public void setUserName(String value)   
  4. {   
  5.     context.put("userName", value);   
  6. }        
  7.   
  8. ry {   
  9.    // get value using our own custom context map   
  10.    result = Ognl.getValue("userName"", context, root);   
  11. catch (OgnlException ex) {   
  12.     // Report error or recover   
  13. }  

基本语法

OGNL的语法正变得越来越丰富,但是基本语法是没有什么改变的。比如要获取一个对象的name属性,OGNL表达式就是name,要获取一个对象的headline属性的text属性,OGNL表达式就是headline.text。 

OGNL表达式的基本单位是导航链。最简单的链包含如下部分:

表达式组成部分 示例
属性名称 如上述示例中的name和headline.text
方法调用 hashCode()返回当前对象的哈希码。
数组元素 listeners[TEC:0]返回当前对象的监听器列表中的第一个元素。

所有的OGNL表达式都基于当前对象的上下文来评估,导航链的示例如下:

java 代码
  1. name.toCharArray()[0].numericValue.toString()  

评估步骤如下:

  • 解析根对象的name属性。
  • 调用上一步返回的结果字符串的toCharArray()方法。
  • 获取返回的结果数组的第一个字符,是一个Character对象。
  • 获取字符的数字值表示,Character有一个getNumericValue()方法。
  • 调用结果Integer对象的toString()方法。

参考资料

API文档

语言规范

开发指南

分享到:
评论

相关推荐

    OGNL表达式的使用及文档

    本篇将详细介绍OGNL的使用方法及其核心概念。 一、OGNL的基础知识 1. **表达式语法**:OGNL表达式通常由对象名、点号和属性名组成,例如`user.name`,表示获取`user`对象的`name`属性。也可以通过索引访问集合元素...

    OGNL符号的使用

    OGNL 符号的使用 OGNL(Object-Graph Navigation Language)是一种可以方便地操作对象属性的开源表达式语言。它有很多特点,例如支持对象方法调用、类静态的方法调用和值访问、赋值操作和表达式串联、访问 OGNL 上...

    ognl表达式java使用案例详解(测试通过)

    本案例提供ognl使用详解,测试通过,只需解压放入自己WEB项目中,执行struts_ognl包内java文件即可(未提供jia包,若需要可以联系留言发至邮箱),若测试不好可以联系本人提供指导. Struts 2默认的表达式语言是OGNL...

    struts2 中 OGNL表达式的使用

    struts2 中 OGNL表达式的使用struts2 中 OGNL表达式的使用

    使用的ognl的chm

    - Struts2和Hibernate的官方文档中也有关于OGNL使用的部分。 - 在线教程和博客文章可以帮助理解OGNL的实际应用场景和最佳实践。 总结起来,OGNL是Java开发中的强大工具,特别是在Web框架中,它简化了对象交互和数据...

    ognl.jar资源包

    camel-ognl-1.6.4.jar, camel-ognl-2.8.1.jar, com.springsource.org.ognl-2.6.9.jar, com.springsource.org.ognl-sources-2.6.9.jar, ognl-2.5.1.jar, ognl-2.6.11.jar, ognl-2.6.3.jar, ognl-2.6.5.jar, ognl-...

    ognl-3.2.21-API文档-中文版.zip

    赠送jar包:ognl-3.2.21.jar; 赠送原API文档:ognl-3.2.21-javadoc.jar; 赠送源代码:ognl-3.2.21-sources.jar; 赠送Maven依赖信息文件:ognl-3.2.21.pom; 包含翻译后的API文档:ognl-3.2.21-javadoc-API文档-...

    ognl表达式 ognl表达式

    这段代码展示了如何使用OGNL遍历一个Map,并打印出键值对。 通过上述介绍可以看出,OGNL作为一种强大的表达式语言,在Struts2框架中扮演着非常重要的角色,不仅可以方便地访问和操作对象属性,还能有效地处理复杂...

    OGNL使用小结

    本篇文章将详细总结OGNL的使用技巧。 首先,`#`符号在OGNL中有三个主要用途。一是访问OGNL上下文和Action上下文,比如`#parameters`、`#request`、`#session`和`#application`分别对应HTTP请求的参数、请求属性、...

    ognl的jar包

    2. **安全考虑**:由于OGNL在处理用户输入时可能存在安全风险,如OGNL注入攻击,所以必须谨慎处理用户提供的数据,并使用安全模式或配置来限制OGNL表达式的执行范围。 3. **性能优化**:理解OGNL的工作原理可以帮助...

    struts2.0中的ognl

    因此,在使用OGNL时,需要谨慎处理用户输入,避免出现OGNL注入漏洞。 五、优化与最佳实践 1. 使用`@SkipValidation`注解来避免不必要的验证,提高性能。 2. 对用户输入进行过滤和转义,防止OGNL注入。 3. 合理配置...

    Struts2 OGNL示例(Maven项目)

    这个"Struts2 OGNL示例(Maven项目)"提供了使用OGNL与Struts2集成的实例,帮助开发者更好地理解和应用这一强大的特性。 首先,让我们了解什么是OGNL。OGNL是一种强大的表达式语言,允许我们访问和修改对象图中的...

    开发工具 ognl-3.1.12

    开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12开发工具 ognl-3.1.12...

    ognl标签的使用案例

    **ognl标签的使用案例** OGNL (Object-Graph Navigation Language) 是一种强大的表达式语言,主要用于在Java应用程序中获取和设置对象属性。在Web开发领域,尤其是与Struts2框架结合时,OGNL标签被广泛用于视图层,...

    ognl英文帮助文档

    OGNL(Object-Graph Navigation Language)是一种强大的表达式语言,常用于Java应用程序,特别是与Struts2框架一起使用。它允许程序开发者通过简洁的语法来访问和操作对象的属性,执行复杂的逻辑,以及动态地构建...

    ognl-3.0.21.jar ognl.jar

    标题中的“ognl-3.0.21.jar”和“ognl.jar”是指OGNL(Object-Graph Navigation Language)的特定版本...了解并熟练使用OGNL能够提升Java应用的灵活性和可维护性,但同时也需要注意安全问题,防止潜在的代码注入攻击。

    Struts2 的OGNL使用简介

    本篇文章将详细介绍Struts2中OGNL的使用,包括基本语法、表达式操作以及在实际开发中的应用。 ### OGNL简介 OGNL是一种强大的表达式语言,允许动态地访问和修改对象图。在Struts2中,OGNL负责视图层和模型层之间的...

    ognl源码和ognl帮助文档.rar

    此外,提供的帮助文档将指导你了解OGNL的所有语法特性、最佳实践和使用示例。 在Struts2框架中,OGNL是默认的表示层语言,用于视图与模型之间的数据绑定。它使得视图可以直接引用模型中的数据,简化了MVC架构中的...

    struts2中OGNL使用源自javaWeb编程王者归来

    在这个实例中,我们将深入探讨如何在Struts2中使用OGNL来获取Servlet对象的值、筛选集合中的对象,以及理解OGNL表达式的生命周期。 首先,让我们了解OGNL的基本语法。OGNL允许我们通过点号(.)和方括号([])来...

    ognl-2.6.11.jar 官方源码

    3. **上下文映射**:OGNL使用一个上下文映射(Context Map),其中存储了变量和对象,使得表达式可以引用这些变量和对象,无需显式传递。 4. **列表和数组索引**:可以直接通过索引来访问列表和数组元素,如`list[0...

Global site tag (gtag.js) - Google Analytics