spring 默認(rèn)scope 是單例模式,這樣只會(huì)創(chuàng)建一個(gè)Action對(duì)象,每次訪問都是同一個(gè)Action對(duì)象,數(shù)據(jù)不安全,struts2是要求每次次訪問都對(duì)應(yīng)不同的Action,scope="prototype" 可以保證 當(dāng)有請(qǐng)求的時(shí)候 都創(chuàng)建一個(gè)Action對(duì)象。
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ù)器链嘀。