ValueStack物件的傳送帶機制

2021-05-24 01:58:24 字數 959 閱讀 3780

眾所周知,strut 2的action類通過屬性可以獲得所有相關的值,如請求引數、action配置引數、向其他action傳遞屬性值(通過chain結果)等等。要獲得這些引數值,我們要做的唯一一件事就是在action類中宣告與引數同名的屬性,在struts 2呼叫action類的action方法(預設是execute方法)之前,就會為相應的action屬性賦值。

要完成這個功能,有很大程度上,struts 2要依賴於valuestack物件。這個物件貫穿整個action的生命週期(每個action類的物件例項會擁有乙個valuestack物件)。當struts 2接收到乙個.action的請求後,會先建立action類的物件例項,但並不會呼叫action方法,而是先將action類的相應屬性放到valuestack物件的頂層節點(valuestack物件相當於乙個棧)。只是所有的屬性值都是預設的值,如string型別的屬性值為null,int型別的屬性值為0等。

在處理完上述工作後,struts 2就會呼叫***鏈中的***,當呼叫完所有的***後,最後會呼叫action類的action方法,在呼叫action方法之前,會將valuestack物件頂層節點中的屬性值賦給action類中相應的屬性。大家要注意,在這裡就給我們帶來了很大的靈活性。也就是說,在struts 2呼叫***的過程中,可以改變valuestack物件中屬性的值,當改變某個屬性值後,action類的相應屬性值就會變成在***中最後改變該屬性的這個值。

從上面的描述很容易知道,在struts 2的的action類可以獲得與屬性同名的引數值就是通過不同的***來處理的,如獲得請求引數的***是params,獲得action的配置引數的***是staticparams等。在這些***內部讀取相應的值,並更新valuestack物件頂層節點的相應屬性的值。而valuestack物件就象乙個傳送帶,將屬性值從乙個***傳到了另乙個***(當然,在這其間,屬性值可能改變),最後會傳到action物件,並將valuestack物件中的屬性的值終值賦給action類的相應屬性。

valuestack的工作原理

當訪問乙個action的時候,此時struts2會把整個action壓入valuestack的頂部,此時valuestack就乙個action物件 我們通常會寫stack.set key1,value1 或者statck.setvalue key2,value2 這兩個是有區別的,前者會在value...

valuestack的工作原理

今天在為同事解決問題的時候,發現了自己以前對valuestack的理解有點偏差,通過問題的解決,也體驗了一把溫故而知新 廢話少說,步入正題 當訪問乙個action的時候,此時struts2會把整個action壓入valuestack的頂部,此時valuestack就乙個action物件 我們通常會寫...

valuestack的工作原理

今天在為同事解決問題的時候,發現了自己以前對valuestack的理解有點偏差,通過問題的解決,也體驗了一把溫故而知新 廢話少說,步入正題 當訪問乙個action的時候,此時struts2會把整個action壓入valuestack的頂部,此時valuestack就乙個action物件 我們通常會寫...