淺析Struts1和Struts2的Action線程安全問題

網址:http://blog.csdn.net/virgoboy2004/article/details/5876133


2、struts2

上面我們瞭解了Struts1裏面的多線程問題,那Struts2是怎麼解決這個問題的呢?其實道理非常簡單,原因就是Strtus2會獲取到用戶的http請求,然後負責給每個請求實例化一個Action 對象,但是大家注意,這裏的action對象和Struts1裏面的action對象完全不是一個概念,struts1裏面的action類就是一個servlet類,而這裏的action類只是一個普通的java class。這也就是爲什麼Struts1裏面的action是線程不安全的,而struts2裏面的action是線程安全的原因。

那我們在回頭來看看struts2對servlet的處理和struts1有什麼不同。看過前面分析的讀者肯定知道,struts1的 action對servlet沒有進行任何的包裝,它是直接實現的Java WEB API 裏面的servlet 接口。所以纔會有線程安全的問題,但是struts2底層幫我們封裝了Servlet,使開發人員不用直接接觸Servlet。具體做法是:

Strtus2截獲servlet請求,然後給每個請求實例化一個Action對象,請求結束之後銷燬Action對象。至於Strtus2具體是怎麼做的,我這裏不贅敘,大家可以去參看Struts2的有關介紹。

在Struts2中由於 Action和普通的Java類沒有任何區別(也就是不用像Struts1裏面那樣去實現一個Struts的接口,有興趣的朋友可以自己去了解),所以我們可以用Spring去管理Struts2的Action,這個時候我們就要注意了,因爲當我們在spring裏面去定義bean的時候,spring默認用的是單例模式。所以在這個時候,你就要修改Spring的配置文件---即修改scope爲prototype


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章