簡單來說,兩者的區別在於:
壹個是Stuts1,壹個是Stuts2,這是最大的區別。從技術上來說,Stuts1有壹個核心控制器,但它只提供了壹個接口,即execute,而且配置actionform比較麻煩,因此有很強的依賴性。Stuts2是為攔截器開發的,也就是所謂的AOP思想。可以配置多個action,使用方便,但是速度比Stuts1慢壹點是因為請求之前的攔截器有壹些註入操作。
壹、MVC簡介
Struts2是壹個兼容Struts1和WebWork的MVC框架。既然提到了MVC框架,我們就要對它做壹個簡單的介紹,僅限於簡單介紹。如果想了解更多關於MVC的知識,可以查閱相關文檔或者找壹本關於Struts1的書。我相信MVC上會有很大的空間。言歸正傳,其實目前Java中出現的這些框架的最終目的都是接觸耦合,無論是Spring、Hibernate還是MVC框架,目的都是為了接觸耦合增加復用。MVC聯系了視圖和模型之間的耦合。
MVC由三個基本部分組成:模型、視圖和控制器,它們以最小的耦合協同工作,以增加程序的可伸縮性和可維護性。各部分的實現技術可以概括如下:
1)型號:JavaBean,EJB的EntityBean。
2)視圖:JSP和Struts的TagLib。
3)控制器:ActionServlet和Struts的Action。
綜上所述,MVC的優勢主要包括以下幾個方面:
1)多個視圖可以對應壹個模型。根據MVC設計模式,壹個模型對應多個視圖,可以減少代碼重復和代碼維護,並且壹旦模型發生變化,易於維護。
2)模型返回的數據與顯示邏輯分離。任何顯示技術都可以應用於模型數據,例如,使用JSP頁面、Velocity模板或直接生成Excel文檔。
3)應用分為三層,降低了層與層之間的耦合,提供了應用的可擴展性。
4)控制層的概念也很有效,因為它結合了不同的模型和不同的視圖來完成不同的請求。因此,控制層可以說包含了用戶請求權限的概念。
5)MVC更符合軟件工程管理的精神。不同層有各自的功能,每層的組件具有相同的特性,有利於通過工程化和工具化生成管理程序代碼。
MVC概念性的東西就到此為止了,重點是各個模塊的實現技術是什麽。
其次,簡要介紹Struts2
Struts2是由Struts1發展而來,但實際上Struts2和Struts1在框架設計思路上還是有很大區別的。Struts2基於WebWork的設計思想。Struts2為什麽不遵循Struts1的設計思路?畢竟Struts1在目前的企業應用中還是有非常大的市場的。所以,讓我們看看Struts 65438。
1)支持單表示層技術。
2)與Servlet API嚴重耦合,從Execute of Action的方法聲明就能看出來。
3)代碼依賴Struts1 API,具有侵入性,從編寫Action類和FormBean的時候就可以看出來。操作必須實現Struts的操作類。
Struts2之所以以WebWork為核心,是因為最近WebWork正在興起,WebWork沒有Struts1的缺點,更符合MVC設計思想,更有利於代碼重用。
基於上面的介紹,可以看出Struts2的架構和Struts1的架構有很大的不同。Struts1使用ActionServlet作為其中央處理器,而Struts2使用FilterDispatcher作為其中央處理器。這樣做的壹個好處是Action類和Servlet API是分開的。
Struts2的簡單處理流程如下:
1)瀏覽器發送請求。
2)中央處理器根據struts.xml文件查找相應的處理請求的動作類。
3)WebWork的攔截器鏈自動將通用功能應用於請求,如工作流、驗證等功能。
4)如果在Struts.xml文件中配置了方法參數,則調用方法參數對應的Action類中的方法方法;否則,調用壹般的Execute方法來處理用戶請求。
5)將Action類中相應方法返回的結果響應給瀏覽器。
3.Struts2和Struts1之間的比較
1)動作類實現:
Struts1的Action在實現時必須擴展Action類或其子類。Struts2的Action類可以不用任何類和接口實現。盡管Struts2中提供了ActionSupport類,但這不是必需的。
2)Struts 1的Action類是singleton模式,必須設計成線程安全的,而Struts2為每個請求生成壹個實例。
3)Struts1的Action類依賴於Servlet API。從其execute方法的簽名可以看出,execute方法有兩個servlet參數HttpServletRequest和HttpServletResponse,而Struts2不依賴於Servlet API。
4)認為Struts1依賴於Servlet API,測試Struts1的動作非常困難,需要借助其他測試工具進行測試。Struts2的動作可以像模型層的其他服務類壹樣進行測試。
5)Struts 1的動作和視圖通過ActionForm或其子類傳輸數據。雖然有LazyValidationForm這樣的ActionForms,但是它們仍然無法像其他關卡壹樣通過壹個簡單的POJO來傳輸數據,而Struts2將這樣的奢望變成了現實。
6)Struts1綁定JSTL,為頁面編寫帶來便利。Struts2集成了ONGL,也可以使用JSTL,所以Struts2下的表達式語言更強大。
4.Struts2和WebWork的比較
Struts2實際上是WebWork2.3 .然而,Struts2與WebWork略有不同:
1)Struts2不再支持內置的IOC容器,轉而使用Spring的IOC容器。
2)Struts2用Dojo替代了Webwork的壹些Ajax特性。