struts2框架中ActionContext物件詳解
一、瞭解OGNL表示式:
(1) Object Graphic Navigation language(物件圖形導航語言)的縮寫,它是一種功能性極強的表示式語言,使用它可以存取任意屬性,呼叫物件中的方法。其作用的就是為了簡化訪問物件中的屬性值!
(2) OGNL表示式的解析都是圍繞OGNL上下文進行的,OGNL表示式是一個map物件,其中包含多個java物件,其中有一個物件十分的特殊,這個物件稱為根物件!
a.一個OGNL表示式若沒有指定目標物件,預設就是從根物件開始查詢!
b.若要訪問非根物件中的屬性,就要在訪問根物件的前面需加#字首!
二、瞭解值棧(valueStack):
(1)valueStack是值棧的對外介面,實際對應的類是OgnlValueStack,OgnlValueStack物件中包含了一個ArrayList集合來作為棧,預設action物件位置值棧的棧頂位置。
a.void push(Objext o) 可用來將一個物件資料壓入棧頂.
b.set(String key,Objext obj) 則是將資料放入Map物件當中,並將Map物件壓入棧頂位置!
(2) OGNL表示式在取資料的時候,其規則是先從棧的棧頂(action物件)中開始查詢,先判斷是否有Map物件,根據key取值;不是Map物件,則尋找該物件的getKey()方法,得到其值,若沒有方法,則查詢key變數(要求必須是public修飾)均為找到,就去第二個物件中向下查詢!
三、詳細瞭解ActionContext:
(1)struts2框架在解析OGNL表示式的時候,OGNL上下文就是ActionContext,而根物件就是Action物件!
例如:若給出一個OGNL表示式 : "class.user..name"
首先判斷這個OGNL表示式字首沒有帶#,所以這個一個根物件,struts2框架會在值棧的棧頂物件中查詢 getclass()方法,得到class物件,然後通過class物件,在其中查詢getUer()方法,得到user物件,然後值 user物件中查詢getName())方法,得到最終的值!
(2)對於客戶端傳送的每一次請求,struts2框架都會自動的建立一個ActionContext和值棧物件,請求處理完畢以後這兩個物件會自動的銷燬!ActionContext物件相當於一個大大的容器,裡面包含了application、session、parameters、valueSatck、attr
(3)ActionContext中的application、session、parameters等物件都是非根物件,在OGNL表示式中要訪問他們,需要在表示式前面加上#字首!
例如:① #appliation.userName等於 ActionContext.getContext().getApplication().get("userName");
② #session.userName等效於ActionContext.getContext().getSession().get("userName");
③ #parameters.userName等ActionContext.getContext()..getParameters().get("userName");
四、struts2框架中ActionContext物件內部結構圖形詳解: