天天看點

STRUTS系列之 Struts1 和 Struts2的差別

Action

Struts1 要求Action類要擴充一個抽象基類。Struts1 的一個共有的問題是面向抽象類程式設計而不是面向接口程式設計。

Struts2 的Action類實作了一個Action接口,連同其他接口一起來實作可選擇和自定義的服務。Struts2 提供了ActionSupport基類來實作一般使用的接口。

線程模型

Struts1 的Action是單例類,是以要考慮線程安全的問題。

Struts2 為每一個請求執行個體化一個Action類對象,是以不會出現線程安全的問題。

Servlet依賴

Struts1 的Action類依賴Servlet,需要以HttpServletRequest和HttpServletResponse作為參數傳遞給execute方法。

Struts2 的Action和容器無關,Servlet上下文被表現為簡單的Maps,允許Action被獨立的測試。

表達式語言

Struts1 使用JSTL,對集合和索引屬性的支援很弱。

Struts2 不僅支援JSTL,還支援一個更強大和靈活的語言OGNL。

類型轉換

Struts1 的ActionForm屬性經常是String,使用Commins-Beanutils進行類型轉換。

Struts2 使用OGNL進行類型轉換,提供基本和常用對象的轉換器。

驗證

Struts1 在ActionForm的Validate的方法中手動腳丫,或者通過Commons Validator的擴充校驗,同一個類可以有不同的校驗内容。

Struts2 支援Validate方法,也支援XWork校驗架構進行校驗。XWork校驗架構使用為屬性類類型定義的校驗和内容校驗。

測試

Struts1 測試依賴容器,可以用Struts TestCase測試。

Struts2 的Action通過初始化,設定屬性,調用方法來測試。

Action生命周期

Struts1 每一個子產品有單獨的生命周期,但子產品中的所有Action有相同的生命周期。

Struts2 通過攔截器為每個Action建立不同的生命周期。

繼續閱讀