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