更新時(shí)間:2022-12-28 來(lái)源:黑馬程序員 瀏覽量:
OGNL的全稱(chēng)是Object-Graph Navigation Language,即對(duì)象圖導(dǎo)航語(yǔ)言,它是一種功能強(qiáng)大的開(kāi)源表達(dá)式語(yǔ)言。使用這種表達(dá)式語(yǔ)言可以通過(guò)某種表達(dá)式語(yǔ)法存取Java對(duì)象的任意屬性,調(diào)用Java對(duì)象的方法,以及實(shí)現(xiàn)類(lèi)型轉(zhuǎn)行等。
了解OGNL的概念后,下面講解一下OGNL的組成。OGNL的操作實(shí)際上是圍繞OGNL結(jié)構(gòu)的三個(gè)要素進(jìn)行的,分別是表達(dá)式(expression)、上下文對(duì)象(context)和根對(duì)象(root)。這三個(gè)要素的具體說(shuō)明如下。
表達(dá)式是整個(gè)OGNL的核心,OGNL會(huì)根據(jù)表達(dá)式到對(duì)象中取值。所有OGNL操作都是針對(duì)表達(dá)式解析后進(jìn)行的,它表明了此次OGNL操作要“做什么”。實(shí)際上,表達(dá)式就是一個(gè)帶有語(yǔ)法含義的字符串,這個(gè)字符串規(guī)定了操作的類(lèi)型和操作的內(nèi)容。
上下文對(duì)象規(guī)定了OGNL操作“在哪里進(jìn)行”。context對(duì)象是一個(gè)Map類(lèi)型的對(duì)象,在表達(dá)式中訪問(wèn)context中的對(duì)象,需要使用#號(hào)加對(duì)象名稱(chēng),即“#對(duì)象名稱(chēng)”的形式。例如要獲取context對(duì)象中user對(duì)象的username值,可以如下書(shū)寫(xiě):
#user.username
根對(duì)象可以理解為OGNL的操作對(duì)象,OGNL可以對(duì)根對(duì)象進(jìn)行取值或?qū)懼档炔僮?,表達(dá)式規(guī)定了“做什么”,而根對(duì)象則規(guī)定了“對(duì)誰(shuí)操作”。實(shí)際上根對(duì)象所在的環(huán)境就是OGNL的上下文對(duì)象環(huán)境。