Struts2與Struts1的對比
- 在Action實現類方面的對比:
Struts1要求Action類繼承一個抽象基類;Struts1的一個具體問題是使用抽象類編程而不是使用接口。
Struts2 Action類能夠實現一個Action接口,也能夠實現其餘接口,使可選和定製的服務成爲可能。Struts2提供了一個ActionSupport 基類去實現經常使用的接口。即Action接口不是必須實現的,只有一個包含execute方法的POJO類均可以用做Struts2的Action。
- 線程模式方面的對比:
Struts1 Action是單例模式而且必須是線程安全的,由於僅有Action的一個I餓實例來處理全部的請求。單例策略限制了Struts1 Action能作的事,而且在開發時須要特別當心。Action資源必須是線程安全的或同步的。
Struts2 Action對象爲每一個請求產生一個實例,所以沒有線程安全問題。
- Servlet依賴方面的對比
Struts1 Action依賴於Servlet API,由於Struts1 Action的execute方法中有HttpServletRequest和HttpServletResponse方法。
Struts2 Action不在依賴於Servlet API,從而容許Action脫離Web容器運行,從而下降了測試Action的難度。
- 測試性方面的對比:
由於Struts1 Action依賴Servlet API,因此測試依賴於Web容器。爲了脫離Web容器測試Struts1的Action,必須藉助第三方擴展Struts TestCase
- 封裝請求參數的對比:
Struts1 使用ActionForm對象封裝用戶的請求參數,全部的ActionForm必須繼承一個基類:AcitonForm。普通的JavaBean不能用做ActionForm,所以,開發者必須建立大量的ActionForm類封裝用戶的請求參數。雖然Struts1提供了動態ActionForm來簡化ActionForm的開發,但依然須要在配置文件中定義ActionForm。
Struts2直接使用Action屬性來封裝用戶的請求屬性,避免了開發者須要大量開發ActionForm類的繁瑣,實際上,這些屬性還能夠是包含子屬性的Rich對象類型。若是開發者依然懷念Struts1 ActionForm的模式,Struts2提供了ModelDriven模式,可讓開發者使用單獨的Model對象來封裝用戶請求參數,但改Model對象無需繼承任何Struts2基類,是一個POJO,從而下降了代碼污染。
- 表達式語言方面的對比:
Struts1整合了JSTL,所以可使用JSTL表達式語言。這種表達式語言有基本對象圖遍歷,但在對集合索引屬性的支持上則功能不強。
Strut2可使用JSTL,但它整合了一種更強大和靈活的表達式語言。
- 綁定值到視圖的對比:
Strut1使用標準JSP機制把對象綁定到視圖頁面。
Strut2使用「ValueStack」技術,使標籤庫可以訪問值,而不須要吧對象和視圖頁面綁定在一塊兒。
- 類型轉換的對比:
Strut1 ActionForm屬性一般都是String類型。Strut1使用Commons-Beanutils進行類型轉換,支持基本數據類型和經常使用對象直接的轉換。
- 數據校驗的對比:
Struts1支持在ActionFrom重寫validate方法中手動校驗,或者經過整合Commons alidator框架來完成數據的校驗。
Struts2支持經過重寫validate方法進行校驗,也支持整合XWork校驗框架進行校驗。
- Action執行控制的對比:Struts1支持每個模塊對應一個請求處理,可是在模塊中的全部Action必須共享相同的生命週期Struts2支持經過攔截器堆棧爲每個Action建立不一樣的生命週期。開發者能夠根據須要建立相應的堆棧,從而和不一樣的Action一塊兒使用。
歡迎關注本站公眾號,獲取更多信息