【Struts2基礎】——Struts1 & Struts2 區別

       上一篇文章中說道,Struts2不是Struts1的升級,它們之間並沒有什麼血緣的關係。那麼,它們兩者之間的區別到底是什麼?下面,且聽小編給您娓娓道來。


Action類

  • Struts1要求Action類繼承一個抽象基類。Struts1的一個普遍問題是使用抽象類編程而不是接口
  • Struts2中,Action類可以實現一個Action接口,也可以實現其他接口使可選和定製的服務成爲可能。Struts2提供了一個ActionSupport基類去實現常用的接口。Action接口不是必須的,任何有execute標識的POJO對象都可以用作Struts2的Action對象

線程模式


  • Struts1 Action是單例模式並且必須是線程安全的,因爲僅有Action的一個實例來處理所有的請求,存在線程的安全性問題
  • Struts2 Action對象爲每一個請求產生一個實例,是多實例的,在線程上沒有安全問題

Servlet依賴


  • Struts1 Action依賴於Servlet API,因爲當一個Action被調用時,HttpServletRequest和HttpServletResponse被傳遞給execute方法
  • Struts2 Action不依賴於容器,允許Action脫離容器單獨被測試。如果需要,Struts2 Action仍然可以訪問初始化的Request和response。但是,其他的元素減少或者消除了直接訪問HttpServletRequest和HttpServletResponse的必要性

可測試性


  • Struts1的Action測試性不好,由於Action依賴於Servlet API,所以需要容器支持
  • Struts2的Action測試性好,因爲Struts2的Action是一個POJO對象,所以可以直接寫一個單元測試完成

ActionForm


  • Struts1收集數據通常使用ActionForm,而ActionForm還需要繼承,使ActionForm的複用率降低。另外項目非常大會建立很多ActionForm給維護帶來工作量,但也有好處:數據的收集和控制進行了很好的分離。
  • Struts2直接用Action來收集數據,也可以採用ActionForm。Struts2採用了ModelDriven的方式來支持類似的Struts1的ActionForm方式,比較靈活。

表達式語言


  • Struts1整合了JSTL,這種EL有基本的對象遍歷,但是對集合和索引屬性的支持很弱。
  • Struts2可以使用JSTL,但是也支持一個更強大和靈活的表達式語言——OGNL(Object Graph Notation Language)

綁定值到頁面(View)


  • Struts1使用標準的JSP機制把對象綁定到頁面中來訪問
  • Struts2使用“ValueStack”技術,使taglib能夠訪問而不需要把你的頁面和對象綁定起來。

類型轉換


  • Struts1 ActionForm的類型轉換採用commons-beanutils工具,而定義完成一個轉換器,將對所有的ActionForm起作用,而不能針對某一ActionForm來配置是否使用此類型的轉換器
  • Struts2使用OGNL進行類型轉換,功能更加強大,轉換過程可以針對某個類型進行配置

校驗


  • Struts1支持在ActionForm的validate方法中手動校驗,或者通過Commons Validator的擴展來校驗。同一個類可以有不同的校驗內容,但不能校驗子對象。
  • Struts2支持通過validate方法和XWork校驗框架進行校驗。

Action執行控制


  • Struts1支持每一個模塊有單獨的Request Processors(生命週期),但是模塊中的所有Action必須共享相同的生命週期
  • Struts2支持通過攔截器堆棧爲每一個Action創建不同的生命週期。堆棧能夠根據需要和不同的Action一起使用

       通過上邊的詳細對比,讀着應該對Struts1與Struts2兩者之間的差別,有了一定程度上的瞭解。同時,也應該明白,Struts2是WebWork的升級,而不是Struts1.x的升級。雖然Struts2提供了與Struts1.x的兼容,但已經不是Struts1.x的升級。對於已有已有Struts1.x開發經驗的開發者而言,Struts1.x的開發經驗對於Struts2並沒有太大的幫助;相反,對於已經有WebWork開發經驗的開發者而言,WebWork的開發經驗對Struts2的開發將有很好的借鑑意義。


發佈了122 篇原創文章 · 獲贊 28 · 訪問量 25萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章