今天在修改一個遺留項目的時候,登陸頁面上的用戶名和fielderror等信息在關閉留言器後從新打開,還存在,排除了緩存的問題後,覺得是session的問題,用struts2作了一個fielderror的小demo發現頁面每次關閉後都會清空fielderror的值,無須要手動在action中加入clearErrorsAndMessages(),後來查閱了資料後解決了問題,原來是spring整合strtus2的問題:html
【資料】spring
struts2和spring的一些特色:
1) Struts2 會對每個請求,產生一個Action的實例來處理.緩存
2) Spring的Ioc容器管理的bean默認是單實例的.
當Struts2與Spring整合後,由spring來管理Struts2的Action,會遇到什麼問題 ?如何解決 ?session
Struts2與Spring整合後, 由spring來管理Struts2的Action, bean默認是單實例有狀況下,會有以下問題:多線程
1) Action是單例,其中的FieldError,actionerror中的錯誤信息 會累加, 即便再次輸入了正確的信息,也過不了驗證.ide
2) Struts2的Action是有狀態的,他有本身的成員屬性, 因此在多線程下,會有問題.spa
如何解決?prototype
方案一: 就是不用單例, spring中bean的做用域設爲prototype,每一個請求對應一個實例.
方案二: spring中bean的做用域設爲session ,每一個session對應一個實例,解決了多線程問題。再寫一個攔截器, 清空線程
FieldError與actionerrorhtm