1.struts2為每個(gè)線程提供一個(gè)action實(shí)例,多線程訪問時(shí)不會(huì)出現(xiàn)問題。當(dāng)使用spring管理struts2的action實(shí)例對(duì)象時(shí),scope必須配置為prototype或者session,若配置為singleton則多線程訪問時(shí)會(huì)出現(xiàn)問題,例如actionMessage,fieldError等信息會(huì)累加,多用戶訪問時(shí)有的用戶訪問到的是另一個(gè)用戶的數(shù)據(jù)。
2.scope=“prototype”是為每個(gè)請(qǐng)求提供一個(gè)action實(shí)例(與struts2的機(jī)制是一樣的)。
scope=“session”是為每個(gè)會(huì)話提供一個(gè)action實(shí)例。
3.通常使用prototype,即讓spring容器為每個(gè)請(qǐng)求提供一個(gè)action實(shí)例,好處是服務(wù)器端不用維護(hù)用戶狀態(tài)信息,否則使用session服務(wù)器端必須存儲(chǔ)狀態(tài)信息,用戶多時(shí)占用服務(wù)器端內(nèi)存過多。使用prototype時(shí),必須自己在客戶端維護(hù)用戶的狀態(tài),每次訪問服務(wù)端時(shí)將相應(yīng)狀態(tài)信息提交給服務(wù)器。
例如scope=“prototype”時(shí),頁(yè)面一般< input name="id" type="hidden" value="${id}"/>用來存儲(chǔ)用戶的id信息,訪問action時(shí)提交到server端供action中函數(shù)使用。而使用scope=“session”時(shí),頁(yè)面不必使用hidden的對(duì)象隱藏id信息,只要服務(wù)端獲取過用戶的id,action中的id屬性即會(huì)保存這個(gè)信息。