Struts2入门第七讲——OGNL

本文详细介绍了OGNL(对象图导航语言),包括它的概述、作用和要素。内容涵盖OGNL在Java和Struts2环境中的应用,如调用对象方法、静态方法,以及如何从Root对象和OgnlContext中获取数据。通过实例展示了OGNL在Struts2框架中的重要性,是理解Struts2值栈数据操作的关键。
摘要由CSDN通过智能技术生成

OGNL的概述

什么是OGNL?

什么是OGNL呢?你可从度娘上看到如下文字:
在这里插入图片描述
OGNL的全称是对象图导航语言(ject-Graph Navigation Language),它是一种功能强大的开源表达式语言(比EL表达式强大很多倍),使用这种表达式语言,可以通过某种表达式语法,存取Java对象的任意属性,调用Java对象的方法,同时能够自动实现必要的类型转换。如果把表达式看作是一个带有语义的字符串,那么OGNL无疑成为了这个语义字符串与Java对象之间沟通的桥梁。
咱上面也是说了,OGNL是比EL表达式强大很多倍的语言。它俩之间,我也做个对比。

  • EL表达式语言只能从域对象中获取数据,或者从EL内置的11个对象中获取数据;
  • OGNL表达式语言既能调用对象的方法,又能获取Struts2中值栈的数据,我们使用OGNL表达式主要做的事情就是在Struts2里面获取值栈中的数据(OGNL在Struts2里面经常和Struts2标签一起使用)。我们还需要注意一点:OGNL本身不是Struts2框架的一部分,它其实是独立的第三方的表达式语言(也即是一个单独的项目),只不过它经常和Struts2框架一起使用而已。要想使用OGNL表达式,首先要导入jar包,在Struts2框架里面提供了OGNL表达式的jar包:
    在这里插入图片描述

OGNL的作用

Struts2默认的表达式语言就是OGNL,它具有以下作用:
在这里插入图片描述

OGNL的要素

了解什么是OGNL及其作用后,接下来,我来分析一下OGNL的结构。OGNL的操作实际上就是围绕着OGNL结构的三个要素而进行的,分别是表达式(Expression)、根对象(Root Object)、上下文环境(Context),下面分别一一介绍这三个要素,具体如下:

  • 表达式(Expression):表达式是整个OGNL的核心,OGNL会根据表达式去对象中取值。所有OGNL操作都是针对表达式解析后进行的。它表明了此次OGNL操作要"做什么"。表达式就是一个带有语法含义的字符串,这个字符串规定了操作的类型和操作的内容。OGNL支持大量的表达式语法,不仅支持"链式"对象访问路径,还支持在表达式中进行简单的计算;
  • 根对象(Root Object):Root对象可以理解为OGNL的操作对象,表达式规定了"做什么",而Root对象则规定了"对谁操作"。OGNL称为对象图导航语言,所谓对象图,即以任意一个对象为根,通过OGNL可以访问与这个对象关联的其他对象;
  • Context对象:实际上,OGNL的取值还需要一个上下文环境。设置了Root对象,OGNL可以对Root对象进行取值或写值等操作,Root对象所在环境就是OGNL的上下文环境(Context)。上下文环境规定了OGNL的操作"在哪里进行"。上下文环境(Context)是一个Map类型的对象,在表达式中访问Context中的对象,需要使用"#“号加上对象名称,即”#对象名称"的形式。

我们使用OGNL表达式主要做的事情就是在Struts2里面获取值栈中的数据(OGNL在Struts2里面经常和Struts2标签一起使用),这就是我们接下来要重点讲解的内容,在本讲中咱要入门OGNL,然后在下一讲中咱要将重点放在Struts2里面如何获取值栈中的数据上。

OGNL的入门

Java环境入门

前面已经提到过OGNL支持对象方法调用,比如访问对象方法和访问静态方法,这里结合一些案例来演示OGNL在 Java环境下的入门。

调用对象的方法

首先,在Eclipse中新建一个名为struts2_demo03的web项目,之后快速搭建好Struts2框架的开发环境。然后,在src目录下新建一个名为com.meimeixia.struts2.ognl的包,并在该包下创建一个名为OgnlDemo01的单元测试类,在该单元测试类中编写一个方法使用OGNL表达式来计算字符串"helloworld"的长度。

package com.meimeixia.struts2.ognl;

import org.junit.Test;

import com.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

李阿昀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值