1. 程式人生 > >struts2框架中ActionContext物件詳解

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

屬性。(其中valueStack物件就是值棧物件)

    (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物件內部結構圖形詳解: