Structs2中的Bean預設的是單例,在整個程式運行期間,每個Bean只有一個實例,只要程式在運行,這個實例就一直存在。 對於Action來說,單例就容易出問題。如果客戶端每次提交的參數都是一樣的,後面提交的值把前面提交的值覆蓋了,那問題還不是很大。但是如果存在可選參數的情況,比如上次提交的是參 ...
Structs2中的Bean預設的是單例,在整個程式運行期間,每個Bean只有一個實例,只要程式在運行,這個實例就一直存在。
對於Action來說,單例就容易出問題。如果客戶端每次提交的參數都是一樣的,後面提交的值把前面提交的值覆蓋了,那問題還不是很大。但是如果存在可選參數的情況,比如上次提交的是參數1,下次提交的是參數2,但是由於是單例,此時參數1的值不是null,仍然是上次提交的那個值。這樣就很容易出問題。
解決的辦法就是把Action設置成多例的,每次請求都會生成一個Action的實例,這樣多次提交的參數值就不會相互影響了。處理結束以後,Action的實例會被自動回收。和單例相比,多例可能會占用更多的記憶體,但是不會出bug。
把Bean設置成單例的方法:
<bean id="XXXAction" class="com.XXX.action.XXXAction" scope="singleton">
把Bean設置成多例的方法:
<bean id="XXXAction" class="com.XXX.action.XXXAction" scope="prototype">