發(fā)表時(shí)間:昨天  
Action類
Struts 1要求Action類要擴(kuò)展自一個(gè)抽象基類。Struts 1的一個(gè)共有的問題是面向抽象類編程而不是面向接口編程。
Struts 2的Action類實(shí)現(xiàn)了一個(gè)Action接口,連同其他接口一起實(shí)現(xiàn)可選擇和自定義的服務(wù)。Struts 2提供一個(gè)名叫ActionSupport的基類實(shí)現(xiàn)一般使用的接口。雖然,Action接口不是必須的。任何使用execute方法的POJO對(duì)象可以被當(dāng)作Struts 2的Action對(duì)象使用。

程模型
Struts 1 Action類是單例類,因只有一個(gè)示例控制所有的請求。單例類策略造成了一定的限制且給開發(fā)帶來了額外的煩惱。Action資源必須是程安全或者同步的。
Struts 2 Action對(duì)象每一個(gè)請求都實(shí)例化對(duì)象,所以沒有程安全的問題。(實(shí)踐中,servlet容器生許多丟的對(duì)象對(duì)于每一個(gè)請求,多于一個(gè)的對(duì)象并不影響垃圾收集)

Servlet 依賴
Struts 1的Action類依賴于servlet API以HttpServletRequest和HttpServletResponse作參數(shù)傳給execute方法當(dāng)Action被調(diào)用時(shí)。
Struts 2的Action不和容器有關(guān)。Servlet上下文被表現(xiàn)簡單的Maps,允許Action被獨(dú)立的測試。Struts 2的Action可以訪問最初的請求和相應(yīng),如果需要的話。然而,其他的架構(gòu)元素少或者排除直接訪問HttpServletRequest或者HttpServletResponse的需要。

易測性
測試Struts 1的主要障礙是execute方法暴露了Servlet API。第三方的擴(kuò)展,Struts測試用例,提供Struts 1的集合對(duì)象。
Struts 2的Action可以通過實(shí)例化Action測試,設(shè)置屬性,然后調(diào)用方法。依賴注入的支持也是測試變得更簡單。

接受輸入
Struts 1使用ActionForm對(duì)象捕獲輸入。象Action一樣,所有的ActionForm必須擴(kuò)展基類。因其他的JavaBean不能作ActionForm使用,開發(fā)者經(jīng)常創(chuàng)建多余的類捕獲輸入。DynaBeans可以被用來作替代ActionForm的類創(chuàng)建。但是開發(fā)者可以重新描述已經(jīng)存在的JavaBean。
Struts 2 Action屬性作輸入屬性,排除第二個(gè)輸入對(duì)象的需要。輸入屬性可能有豐富的對(duì)象類型這些類型有他們自己的屬性。Action的屬性可以通過標(biāo)簽庫訪問。Struts 2也支持ActionForm形式。豐富的對(duì)象類型,包含業(yè)務(wù)或者域?qū)ο螅梢员划?dāng)作輸入或者輸出對(duì)象使用。饃型驅(qū)動(dòng)特性簡化標(biāo)簽對(duì)POJO輸入對(duì)象的引用。

表達(dá)式語言
Struts 1整和JSTL,所以它使用JSTL的表達(dá)式語言。表達(dá)式語言有基本的圖形對(duì)象移動(dòng),但是相對(duì)很弱的集合和被索引的屬性支持。
Struts 2使用JSTL,但是框架也支持更大和更靈活的表達(dá)式,叫做“對(duì)象圖形符號(hào)語言”(OGNL)。

將值綁定要視圖上
Struts 1使用標(biāo)準(zhǔn)JSP機(jī)制來綁定對(duì)象到頁面上下文。
Struts 2使用“ValueStack”技術(shù)了標(biāo)簽庫可以不用鏈接你的視圖到對(duì)象的表現(xiàn)類型訪問值。ValueStack策略允許重用視圖。

類型轉(zhuǎn)換
Struts 1的ActionForm屬性經(jīng)常都是String的。Struts 1使用Commons-Beanutils類型轉(zhuǎn)換。轉(zhuǎn)換每一個(gè)類,不是每一個(gè)實(shí)例配置。
Struts 2使用OGNL類型轉(zhuǎn)換。框架包含轉(zhuǎn)換器基本的和共同的對(duì)象類型和原始類型。

驗(yàn)證
Struts 1支持手動(dòng)驗(yàn)證憑借ActionForm的validate方法,或者通過擴(kuò)展的公用驗(yàn)證器。類可以有不同的驗(yàn)證上下文未相同的類,但是不能不能包括驗(yàn)證子對(duì)象。
Struts 2支持手動(dòng)驗(yàn)證憑借validate方法和XWork驗(yàn)證框架。Xwork驗(yàn)證框架支持一連串的驗(yàn)證子屬性使用的驗(yàn)證了屬性類的類型和嚴(yán)正上下文而定義。

Action執(zhí)行的控制
Struts 1支持獨(dú)立的請求處理器對(duì)于每一個(gè)模型,但是所有在模型中的Action必須共享同一個(gè)生命周期。
Struts 2支持在每一個(gè)Action基礎(chǔ)上憑借攔截棧創(chuàng)建不同的生命周期。自定義??梢员粍?chuàng)建且使用不同的所需 的Action