欢迎访问 生活随笔!

生活随笔

当前位置: 首页 >

java ognl 性能_OGNL详解

发布时间:2023/11/27 52 豆豆
生活随笔 收集整理的这篇文章主要介绍了 java ognl 性能_OGNL详解 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

a.什么是ognl?

全称叫objectgraphic navigation language(对象图导航语言),它是struts2框架里面的第三方语言(即可以再别的地方用,struts2只是拿过来了而已),它可以调用对象中的方法,获取struts2里值栈的数据,具体优点https://baike.baidu.com/item/ognl/10365326?fr=aladdin

b.ognl的三要素

表达式:ognl表达式是功能强大的表达式语言,何解?在ognl中想要执行取值,赋值,调用方法等等操作,你都需要用表达式表示。通过表达式,底层会解析出来你的想要操作。它支持链式结构

根对象:即root对象,可以理解为ognl的操作对象,表达式规定做什么,而该对象就指定对谁操作。ognl叫做对象图导航语言,对象图就是以任意一个对象作为根,通过ognl可以访问到与这个对象相关的其他对象。底层使用list集合做的。

context对象:其实就是ognl的上下文环境。root对象也在ognl的上下文环境里,底层是一个map集合。该上下文环境规定了ognl操作在“哪里进行”,注意访问context对象时候需要在表达式中加上#。

c.ognl在java环境的运用。

---导入ognl jar包

---用法:

1.ognl调用对象的方法

@test

public void demo1() {

try {

// 创建context对象

ognlcontext context = new ognlcontext();

// 利用context来获取root对象

object root = context.getroot();

// ognl中的静态方法getvalue(expression, context, root, resulttype)可以用来获取数据

object value = ognl.getvalue("'helloworld'.length()", context, root); //expression就是方法表达式

system.out.println(value.tostring());

} catch (ognlexception e) {

e.printstacktrace();

}

}

运行结果

2.利用ognl访问类中的静态方法

@test

public void demo2() {

try {

// 创建context对象

ognlcontext context = new ognlcontext();

// 利用context来获取root对象

object root = context.getroot();

// ognl中的静态方法getvalue(expression, context, root, resulttype)可以用来获取数据

object value = ognl.getvalue("@java.lang.math@random()", context, root); //这里注意获取静态方法表达式是固定表达: @类名@方法名

system.out.println(value.tostring());

} catch (ognlexception e) {

e.printstacktrace();

}

}

运行结果

3.获取root区中的数据

创建context对象

ognlcontext context = new ognlcontext();

//注意,这里不能在getvalue方法外面初始化获取root对象,不然导致该root为null,传进方法里面,由于root在外面已经被定义,方法底层就不会帮助创建赋值,直接报异常,name值根本不会再存

object root = context.getroot();

system.out.println(root);

// 向root区域存值,setroot(object obj),root就是通过一个对象找到与它关联的对象,所以只能用来存对象类型

user user = new user();

user.setname("张三");

context.setroot(user);

// root的取值不需要加上#,它是ognl内部的,所以不需要加#来特意告诉ognl

string value;

try {

value = (string) ognl.getvalue("name", context, context.getroot());

system.out.println(value);

} catch (ognlexception e) {

// todo auto-generated catch block

e.printstacktrace();

}

运行结果

4.获取context区域的值

@test

public void demo4() {

// 创建context对象

ognlcontext context = new ognlcontext();

// 利用context来获取root对象

object root = context.getroot();

// 向context区域存值,set一般向里面存对象,而context区域用put是存值

context.put("name","张萨姆");

string value;

try {

// root的取值不需要加上#,它是ognl内部的,所以不需要加#来特意告诉ognl,而context区域上该ognl的所处的上下文环境,外部,要加上#说明

value = (string) ognl.getvalue("#name", context, root);

system.out.println(value);

} catch (ognlexception e) {

// todo auto-generated catch block

e.printstacktrace();

}

}

运行结果

d.ognl在struts2环境的介绍

如果是jsp页面,需要先引入ognl标签库才能用

1.访问对象中的方法

访问对象中的方法

//剪切字符串

运行结果

2.访问静态方法

注意:struts2中默认静态访问方法是关闭的,怎么查看了,打开library---->/org/apache/struts2---->default.properties.所以我们需要手动在struts.xml文件里面开启它,才能实现静态访问

运行结果:

后面获取root还有context区域的值就涉及到了值栈的知识了,后面继续,还涉及到了在值栈存值的知识。当然在jsp中获取contex和root存值,也可以在jsp中利用ognl表达式取值,但是用action比较正规一点。先大致看一下,什么都不存时候context区域

访问context区域

运行结果

看到了吧,取到了session,但是session里面什么样子,拿到就有哪些值,所以后面值栈继续。

好了,就讲到这里。

希望与广大网友互动??

点此进行留言吧!

总结

以上是生活随笔为你收集整理的java ognl 性能_OGNL详解的全部内容,希望文章能够帮你解决所遇到的问题。

如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。