Struts1與Struts2的區別

一、Servlet依賴性

   由於Action在被調用的時候,HttpServletRequest和HttpServletResponse被傳遞到execute()方法,struts1的Action對Servlet API有依賴   性,但如果在struts2中,Action就不會對容器有依賴性了,因爲struts2的Action是由簡單的POJO組成,在struts2中,Servlet上下文以簡單的Map的形式表現出來,這使得Action可以得到獨立的測試,如果需要,struts2也可以訪問原始的請求與響應。

二、 Action類

    struts1要求action類繼承一個基類,struts2 Action要求繼承ActionSupport基類

三、驗證

   struts1和struts2都支持通過validate方法的手動驗證,struts1使用ActionForm中的validate方法,而struts2支持通過Validate方法和Xwork校驗框架的手動驗證

四、線程

    struts1是單例模式的並且必須是線程安全的,因爲僅有一個Action的實例來處理所有請求,而struts2爲每一個請求產生一個實例

五、易測性

   struts1一個主要問題是execute方法暴露了Servlet API,一個叫Struts TestCase的第三方擴展,提供了一個struts1測試用的模擬對象,但是struts2中,Action可以經由創建Action實例,設置屬性,和調用方法來得到測試

六、獲取輸出

   struts1使用ActionForm來捕獲輸入,而所有的ActionForm需要繼承一個框架依賴的基類,由於javabean不能當作ActionForm來用,開發人員不得不創建冗繁的類來獲取出入,不過struts2用Action屬性,這避免了需要創建第二個輸入對象

七、表達式語言

    struts1與JSTL整合,struts2不僅支持jstl 還支持OGNL

八、將綁定值到視圖中

   在視圖層,struts1使用標準的JSP來綁定對象到頁面上下文來訪問,然而struts2使用一種叫值棧的技術,這使得標籤可以訪問值而不需將視圖與正在呈遞的對象類型連接起來,值棧允許重用一些屬性名相同但類型不同的視圖類型

九、類型轉換

   通常struts1的ActionForm屬性都是string類型的,struts1使用Commons-Beanutils進行類型轉換,這些針對每一個類的類型轉換無法爲每一個實例配置,然而struts2使用OGNL來進行類型轉換,框架包含了針對基礎類型,常見對象類型與原始類型的轉換器

十、Action執行控制

   struts1支持每一個模塊的請求處理器的分離,但是同一模塊下的所有Action必須共享相同的生命週期,struts2支持通過攔截器棧爲每一個Action創建不同的生命週期,自定義棧可以視需要對不同的Action使用

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