1. 程式人生 > >值棧ValueStack的原理與生命周期

值棧ValueStack的原理與生命周期

保存 RR serve nbsp array 順序 list 註意 檢索

1、ValueStack貫穿整個 Action 的生命周期,保存在request域中,所以ValueStack和request的生命周期一樣。當Struts2接受一個請求時,會迅速創建ActionContext,
ValueStack,action。然後把action存放進ValueStack,所以action的實例變量可以被OGNL訪問。 請求來的時候,action、ValueStack的生命開始,請求結束,action、 ValueStack的生命結束;
2、action是多例的,和Servlet不一樣,Servelt是單例的;
3、每個action的都有一個對應的值棧,值棧存放的數據類型是該action的實例,以及該action中的實例變量,Action對象默認保存在棧頂;
4、ValueStack本質上就是一個ArrayList;
5、關於ContextMap,Struts 會把下面這些映射壓入 ContextMap 中:
parameters : 該 Map 中包含當前請求的請求參數
request : 該 Map 中包含當前 request 對象中的所有屬性 session :該 Map 中包含當前 session 對象中的所有屬性
application :該 Map 中包含當前 application 對象中的所有屬性
attr:該 Map 按如下順序來檢索某個屬性: request, session, application
6、使用OGNL訪問值棧的內容時,不需要#號,而訪問request、session、application、attr時,需要加#號;
7、註意: Struts2中,OGNL表達式需要配合Struts標簽才可以使用。如:<s:property value="name"/>
8、在struts2配置文件中引用ognl表達式 ,引用值棧的值 ,此時使用的"$",而不是#或者%;

值棧ValueStack的原理與生命周期