struts2 0中ognl棧的解析

2022-02-06 10:31:08 字數 1806 閱讀 4942

ongl詳解:

valuestack是struts2的乙個介面,字面意義為值棧,ognlvaluestack是 valuestack的實現類,客 戶端發起乙個請求,struts2架構會建立乙個action例項同時建立乙個ognlvaluestack值棧例項, ognlvaluestack貫穿整個action的生命週期,struts2中使用ognl將請求action的引數封裝為物件儲存 到值棧中,並通過ognl表示式讀取值棧中的物件屬性值。

值棧中分為兩個部分:

contextmap和值棧(root棧)

onglvaluestack原始碼:

compoundroot棧原始碼:

從原始碼可以看出 ognlvaluestack由兩部分組成;一部分是由實現了 arraylist 的compoundroot組成。另一部分是屬於map的key-value型別 

在idea中開啟debug模式,可以看到值棧由兩部分組成;context的map型別和root;

從上面的圖中,可以看出context中是存在hashmap(key-value型別);而在context中國都是物件型別;

在頁面中開啟debug也可以看到

compoundroot繼承arraylist 實現壓棧和出棧功能,擁有棧的特點,先進後出,後進先出,最後壓進棧的資料在棧頂。

compoundroot作為ognlcontext的root物件,並且在compoundroot中action例項位於棧頂,

當直接使用表示式,讀取deptlist的屬性值時會先從棧頂物件中查詢對應的屬性,如果找不到則繼續查詢棧中的其它物件, 如果未找到則到contextmap中去查詢,未找到,則返回null;

當使用#表示式去,讀取deptlist的屬性值時,會直接從contextmap中去查詢,未找到,則返回null;並在頁面中報錯;

報錯資訊:

使用#表示式的時候在context(key-value)中沒有對應的值;

操作的方法是;

第一種:可以在對應的方法中將key-value放進context棧中即可;

第二種:在頁面中直接使用表示式取值即可;

Struts2 0中的result標籤

在action的指定方法執行完畢後總會返回乙個字串,struts2根據返回的字串去action的配置中的result去找匹配的名字,根據配置執行下一步的操作。在actionsupport基類中定義了五個標準的返回值 string success success string none none st...

struts2 0的 的使用

ognl支援類似資料庫中的投影 projection 和選擇 selection 投影就是選出集合中每個元素的相同屬性組成新的集合,類似於關聯式資料庫的字段操作。投影操作語法為 collection.其中 是這個集合中每個元素的公共屬性。例如 group.userlist.將獲得某個group中的所...

Struts 2 0 解讀筆記

凱文 公尺特尼克今年2月初採用安裝了winxp版本的筆記本準備黑掉某網域名稱為cn的中國 誰知剛登陸該站點時就被安裝了50個難以解除安裝的外掛程式,導致計算機網路癱瘓,導致攻擊失敗。沒辦法只能格式化硬碟,重灌系統!經過了這次教訓之後,凱文 公尺特尼克事先安裝了多種防火牆及防毒軟體,一切準備就緒之後,...