和Struts2的人來講,你們都知道SpringMVC是基於方法的攔截,而Struts2是基於類的攔截。spring
對於Struts2來講,由於每次處理一個請求,struts就會實例化一個對象;這樣就不會有線程安全的問題了(如安全
果變量不是靜態的);prototype
對於SpringMVC來講,默認是單實例,每一個request過來,系統都會用原有的instance去處理。當多個線程調用線程
它的時候,它裏面的instance變量就不是線程安全的了,會發生竄數據的問題。code
在Controller中使用ThreadLocal變量對象
// ThreadLocal類能夠去查一下,解決線程安全,保證幾個線程互不影響 private static final ThreadLocal<String> contextHolder = new ThreadLocal<String>();
最根本的解決辦法仍是儘可能不要在Controller裏面定義變量struts2