日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

java ognl 性能_OGNL详解

發布時間:2023/11/27 生活经验 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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详解的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。