Struts2與JSP間資料到底怎麼傳輸的?

2021-08-17 19:37:07 字數 2117 閱讀 3690

初學struts2,遇到在jsp頁面上使用類似語句,心中一萬個疑惑「這竟然可以讀取到在之前在action裡建立的(有setter和getter)變數(user)?」how can that be???

好的,帶著這份疑惑,我決定好好研究一下這個東東。

資料傳輸背後機制就是 valuestack(值棧)。

valuestack儲存的內容:

當使用者訪問action,都會建立乙個action物件,actioncontext物件、valuestack物件..

struts2把action物件放進valuestack物件之中。

將valuestack放進request域中,傳入jsp頁面(key: struts.valuestack)

jsp頁面就可以使用ognl表示式獲取值棧中的資料了!

在debug模式下,看看valuestack裡面有哪些東西:

其中ognlcontext就是乙個map集合。

ognlcontext儲存著這樣的資料:

compoundroot裡面:

終於,我們看到了loginaction,裡面自定義的全域性變數user和message也都儲存了下來,還有儲存error相關的變數。

compoundroot儲存著這樣的資料:

有個問題:actioncontext和onglcontext、onglvaluestack間有什麼關係?

這圖很有意思,我們可以得出以下結論:

1. actioncontext 裡面就是 onglcontext;

2. onglvaluestack裡面儲存了onglcontext;

3. onglcontext裡面儲存了onglvaluestack(引用),有種迴圈的感覺。

4. onglvaluestack裡面也儲存了request。

再看一幅圖:

request裡面也有onglvaluestack。。。

完美詮釋了「你中有我,我中有你…」

這也解釋了為什麼以下兩種取值棧方式都可行了:

// 獲取值棧物件,方式1:

// 獲取值棧物件,方式2:

actioncontext ac = actioncontext.getcontext();

valuestack vs2 = ac.getvaluestack();

struts2會將valuestack物件封裝進request物件域中,傳入jsp頁面。

取值規則:

(來自:

其他:

獲取request域資料

value="china"/>

value="'china'"/>

value="%"/>

國家:name="txtcountry"

value="%">

s:textfield>

body>

struts2的action與jsp之間傳遞引數

1 瀏覽器往action傳遞引數 在action中設定屬性,並為屬性設定get set方法。傳遞引數時按照屬性的名字賦值即可。如 name aa 取值用request.getprameters 屬性名 public class useraction public string getname pub...

struts2的action與jsp之間傳遞引數

1 瀏覽器往action傳遞引數 在action中設定屬性,並為屬性設定get set方法。傳遞引數時按照屬性的名字賦值即可。如 name aa 取值用request.getprameters 屬性名 public class useraction public string getname pub...

struts2的action與jsp之間傳遞引數

1 瀏覽器往action傳遞引數 在action中設定屬性,並為屬性設定get set方法。傳遞引數時按照屬性的名字賦值即可。如 name aa 取值用request.getprameters 屬性名 public class useraction public string getname pub...