天天看點

Struts2和Struts1的差別(轉)

特性 Struts 1 Struts 2
Action類 Struts 1要求Action類要擴充自一個抽象基類。Struts 1的一個共有的問題是面向抽象類程式設計而不是面向接口程式設計。 Struts 2的Action類實作了一個Action接口,連同其它接口一起麳實作可選擇和自定義的服務。Struts 2提供一個名叫ActionSupport的基類麳實作一般使用的接口。雖然,Action接口不是必須的。任何使用execute方法的POJO對象可以被當作Struts 2的Action對象麳使用。
線程模型 Struts 1 Action類是單例類,因為隻有一個示例麳控制所有的請求。單例類政策造成了一定的限制幷且給開發帶來了額外的煩惱。Action資源必須是線程安全或者同步的。 Struts 2 Action對象為每一個請求都執行個體化對象,是以沒有線程安全的問題。(實踐中,servlet容器産生許多丢棄的對象對于每一個請求,多于一個的對象并不影響垃圾收集)
Servlet 依賴 Struts 1的Action類依賴于servlet API以為HttpServletRequest和HttpServletResponse作為參數傳給execute方法當Action被調用時。 Struts 2的Action不和容器有關。Servlet上下文被表現為簡單的Maps,允許Action被獨立的測試。Struts 2的Action可以通路最初的請求和相應,如果需要的話。然而,其它的架構元素減少或者排除直接通路HttpServletRequest或者HttpServletResponse的需要。
易測性 測試Struts 1的主要障礙是execute方法暴露了Servlet API。第三方的擴充,Struts測試用例,提供Struts 1的集合對象。 Struts 2的Action可以通過執行個體化Action麳測試,設定屬性,然後調用方法。依賴注入的支援也是測試變得更簡單。
接受輸入 Struts 1使用ActionForm對象麳捕獲輸入。象Action一樣,所有的ActionForm必須擴充基類。因為其它的JavaBean不能作為ActionForm使用,開發者經常建立多餘的類麳捕獲輸入。DynaBeans可以被用來作為替代ActionForm的類麳建立。但是開發者可以重新描述已經存在的JavaBean。 Struts 2 Action屬性作為輸入屬性,排除第二個輸入對象的需要。輸入屬性可能有豐富的對象類型這些類型有他們自己的屬性。Action的屬性可以通過标簽庫麳通路。Struts 2也支援ActionForm形式。豐富的對象類型,包含業務或者域對象,可以被當作輸入或者輸出對象麳使用。模型驅動特性簡化标簽對POJO輸入對象的引用。
表達式語言 Struts 1整和JSTL,是以它使用JSTL的表達式語言。表達式語言有基本的圖形對象移動,但是相對很弱的集合和被索引的屬性支援。 Struts 2使用JSTL,但是架構也支援更強大和更靈活的表達式,叫做“對象圖形符号語言”(OGNL)。
将值綁定要視圖上 Struts 1使用标準JSP機制來綁定對象到頁面上下文。 Struts 2使用“ValueStack”技術為了标簽庫可以不用連結你的視圖到對象的表現類型麳通路值。ValueStack政策允許重用視圖。
類型轉換 Struts 1的ActionForm屬性經常都是String的。Struts 1使用Commons-Beanutils麳類型轉換。轉換每一個類,幷不是為每一個執行個體配置。 Struts 2使用OGNL麳類型轉換。架構包含轉換器麳為基本的和共同的對象類型和原始類型。
驗證 Struts 1支援手動驗證憑借ActionForm的validate方法,或者通過擴充的公用驗證器。類可以有不同的驗證上下文麳未相同的類,但是不能不能包括驗證子對象。 Struts 2支援手動驗證憑借validate方法和XWork驗證架構。Xwork驗證架構支援一連串的驗證子屬性使用的驗證為了屬性類的類型和嚴正上下文而定義。
Action執行的控制

繼續閱讀