OGNL

OGNL
1.OGNL的全称是Object Graph Navigation Language(对象图导航语言),它是一种强大的表达式语言
2.OgnlContext(ongl上下文)相当于一个容器
OgnlContext=根对象(1)+非根对象(N)

重点:
1、一个上下文中只有一个根对象(如图所示)
在这里插入图片描述
2、取根对象的值,只需要直接通过根对象属性即可
3、非根对象取值必须通过指定的上下文容器中的#key.属性去取。

1、ActionContext一次请求创建一次
2、值栈取值从上往下,取到为止,如果已经拿到,不再往下找。
在这里插入图片描述

作用域从小到大排序:
pageContext -> request -> session -> application!

### OGNL 使用方法 在使用 Arthas 定位问题时,若想查看一个静态变量的值,可使用类似 `ognl -x 3 '@com.fdw.study.MasterDataRelation@TYPE_DEPOSITARY'` 的命令,其中 `-x 3` 用于指定输出对象的深度,`@com.fdw.study.MasterDataRelation@TYPE_DEPOSITARY` 表示访问 `com.fdw.study.MasterDataRelation` 类的静态变量 `TYPE_DEPOSITARY` [^1]。 ### OGNL 原理 OGNL(Object Graph Navigation Language)即对象图导航语言,是一种功能强大表达式语言。它允许在对象图中导航,通过简单的表达式来访问和操作对象的属性、方法等。OGNL 会解析输入的表达式,根据表达式的规则在对象图中查找对应的对象和属性,并执行相应的操作。 ### OGNL 应用场景 - **调试与监控**:如在 Arthas 中,使用 OGNL 表达式可以实时查看应用程序中对象的状态和静态变量的值,帮助开发人员快速定位问题 [^1]。 - **数据绑定**:在一些 Web 框架中,OGNL 可用于将视图层的数据与业务逻辑层的对象进行绑定,实现数据的传递和交互。 - **规则引擎**:OGNL 表达式可以作为规则的描述方式,根据对象的属性和状态来判断是否满足特定的规则。 ```java // 示例代码:使用 OGNL 访问对象属性 import ognl.Ognl; import ognl.OgnlContext; import ognl.OgnlException; class Person { private String name; public Person(String name) { this.name = name; } public String getName() { return name; } } public class OgnlExample { public static void main(String[] args) { Person person = new Person("John"); OgnlContext context = new OgnlContext(); context.put("person", person); try { Object expression = Ognl.parseExpression("person.name"); Object result = Ognl.getValue(expression, context, context.getRoot()); System.out.println(result); } catch (OgnlException e) { e.printStackTrace(); } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值