- 動作類生命周期:
明確:動作類是多例的梗摇,每次訪問動作方法時,動作類都會實例化几缭,所以是線程安全的河泳。 - 請求動作的數(shù)據(jù)存放:
我們的問題:
每次請求時,都會產(chǎn)生一些請求數(shù)據(jù)奏司,這些數(shù)據(jù)都存放在什么地方了呢乔询?
首先我們要明確一點:
在每次執(zhí)行動作前,核心控制器StrutsPrepareAndExecuteFilter都會創(chuàng)建一個ActionContext和ValueStack對象韵洋。且每次訪問動作都會創(chuàng)建竿刁。
這兩個對象存儲了整個動作訪問期間用到的數(shù)據(jù)。并且把數(shù)據(jù)綁定到了線程局部變量(ThreadLocal)上了搪缨。所以線程是安全的食拜。
Context Map是OGNL的上下文ActionContext ValueStack
包含以下方面:
- ActionContext 一個Map,這就類似于keyedHandler結(jié)構(gòu)
- application 是一個Map副编,封裝著應(yīng)用域的屬性
- session 是一個Map负甸,封裝著會話域的屬性
- request 是一個Map,封裝著請求域的屬性
- parameters 是一個Map,封裝著請求正文(參數(shù))的屬性
- attr 是一個Map呻待,封裝著四個域中的所有屬性
- value stack(root)
- action(the current action) 當(dāng)前動作的引用