


摘要:本文主要介紹了當前比較流行的兩個MVC框架,Struts和Spring MVC,本文中主要分為三部分,第一部分主要介紹了Struts框架的基本體系結構和工作原理,并簡單總結了Struts的優缺點,第二部分主要介紹Spring框架的組成,并簡單總結了Spring的優缺點,第三部分,通過對于兩個框架的總結,進行了簡單對比。
關鍵詞:MVC Struts Spring
0 引言
MVC框架是Xerox PARC在20世紀80年代為編程語言Smalltalk-80發明的一種軟件設計模式,其中M是指數據模型,V是指視圖界面,C是指控制器,使用MVC的目的是將數據模型和視圖界面實現代碼分離,從而使同一個應用程序可以使用不同的表現形式,目前MVC在Java EE里已經廣泛使用,并不斷有新的MVC框架發布。各個MVC框架都有各自的優勢和不足,在進行項目開發的過程中,如何選擇一個合適開發框架就是需要重點考慮的問題,選擇了合適開發框架可以提高開發的效率。本文將主要對于目前最流行、最常用的兩類MVC框架Struts、Spring MVC進行簡要介紹,并對比兩者的不同之處。
1 struts簡介
Struts是Apache軟件基金下Jakarta項目的一部分。Struts框架的主要架構設計和開發者是Craig R.McClanahan。Struts是目前Java Web MVC框架中不爭的王者。經過多年的發展Struts已經逐漸成長為一個穩定、成熟的框架,并且占有了MVC框架中最大的市場份額。
1.1 struts的體系結構 struts是一個基于Sun J2ee平臺的MVC框架,它將Servlet和JSP標簽作為實現自身功能的一部分。MVC的每個特征Struts都有,而且還在他的基礎上有了進一步的創新,它的體系結構如1-1所示。
圖1-1向我們展示了Struts的體系結構的三部分:視圖(View),模型(Model)和控制器(Controller)。
視圖(View):Struts的視圖主要是JSP文件。Struts提供了許多定制JSP標簽,它們使用起來簡單、功能強大,在創建視圖界面的時候使用Struts標簽可達到事半功倍的效果。模型(Model):模型組件代表應用的業務數據和邏輯。Struts中的系統模型的狀態主要由ActionForm Bean和值對象來體現。控制器(Controller):Struts的控制器主要是ActionServlet,但是操作業務邏輯的則是Action、ActionMapping和ActionForward,業務邏輯工作主要是在他們的相互作用下實現的。其中Action是真正的業務邏輯的實現者,ActionMapping與ActionForward的任務是指定不同的業務邏輯或流程的運行方向。
1.2 struts的工作原理 在Struts中,擔任控制器工作的是ActionServlet,所有的請求都會發送給ActionServlet,當ActionServlet接受到一個請求時,會根據URI來決定使用哪一個Action處理請求。如圖1-2所示:
在上圖中,當ActionServlet接受一個來自客戶端的請求時,執行以下操作:①檢索和請求相匹配ActionMapping實例,若是匹配就進行下一步創建ActionForm,但是若不存在則返回請求路徑無效500錯誤信息。②檢查是不是存在ActionFrom實例,若不存在,就創建一個ActionForm 對象,在ActionFrom中保存好用戶提交的表單數據。③是否需要表單驗證(validate)是由其配置決定的,驗證時采用的是ActionForm的validate()方法。④ActionServlet從ActionMapping實例所包含的映射信息出發,最終決定由哪個Action接收,如果不存在相應的Action實例,那就要先創建一個合適的Action實例,然后調用Action的execute()方法。⑤Action的execute()方法返回一個ActionForward對象。ActionServlet把轉發給ActionForward對象指向的jsp組件。⑥ActionForward對象指向的jsp組件生成的動態網頁,返回給客戶端。
1.3 struts的優缺點
1.3.1 優點 ①實現MVC模式,結構清晰,這樣開發者只關注業務邏輯的實現。②可使用的tag有很多,Struts的標記庫(Taglib),如能靈活動用,就會使開發效率變得高很多。③頁面導航。這一功能在以后的發展中表現出了良好的前景,實際上,這樣可使系統的脈絡更清晰。④提供Exception處理機制。⑤數據庫鏈接池管理。⑥支持I18N。
1.3.2 缺點 ①Struts的Action必需是thread-safe方式,它要求只需一個實例處理全部請求。②Struts的每個Action都會跟Web層耦合起來,進行測試時離不開Web容器,也不容易進行單元測試。③Struts的FormBean將全部數據都看做String類型,它可借助工具Commons-Beanutils做類型轉化。但它的轉化都是在Class級別,而且轉化的類型是不可配置的。不容易將類型轉化時的錯誤信息返回給用戶。④Struts處理Action時離不開ServletRequest 和ServletResponse,所以必須要有Servlet容器。⑤Struts創建一個Action,極其不容易控制它的執行順序,而且要想實現這一功能,很可能需要重新去寫Servlet。⑥Struts處理Action以class的hierarchies為基礎,不容易在action處理前和后進行操作。
2 Spring簡介
2.1 Spring概述 Spring是一個提供了解決Java EE問題的一站式框架。Spring的核心是控制反轉,通過配置文件來完成業務對象之間的依賴注入,它是對接口編程而不是對類編程。
2.2 Spring框架組成 Spring框架由7個模塊組成,Spring框架如圖2-1所示。
2.3 Spring優缺點。
2.3.1 優點 ①它為我們找到了一種管理對象的方法,能將中間層對象進行有效的組織。②主要運用的是分層結構,在項目中可實現增量引入。③對于面向接口編程習慣的養成是十分有幫助的。④要達到的一個目標是寫出更容易進行測試的代碼。⑤非侵入性,可最大程度減小應用程序對Spring API的依賴。
2.3.2 缺點 ①使應用程序的邏輯不具連續性,造成代碼不完整,不夠具體。這時僅僅從Source是不能完全把握應用的全部行為的。②將原本應該代碼化的邏輯配置化,這樣就可能出錯的幾率更大,額外負擔會變多。③調試階段比較抽象,后期的bug對應階段,很難找出問題在哪里。
3 Struts與Spring MVC的比較
下面對于Struts和Spring進行簡單對比總結。通過對比可以使我們更好的理解Struts和Spring框架。Struts只是一個MVC框架,主要是用來開發Java Web應用,效率較高。Struts實現的重點在C(Controller)。但Struts基本上是不涉及M(Model),所以Struts可以采用JAVA實現的任何形式的商業邏輯。Spring是一個輕型容器,它的主干是Bean工廠,用以構造我們所需要的M(Model)。在此基礎之上,Spring提供了AOP的實現;對Bean工廠的擴展ApplicationContext對于實現J2EE的應用是很有利的。
4 結束語
上面所介紹的兩類MVC框架,都有著自己的優點和不足,在進行項目開發的過程中,應該多方面考慮,均衡兩者利弊選擇合適的框架進行項目開發。也可以將兩者進行整合,綜合使用兩類框架,這樣可以使兩者的特點得到互補。
參考文獻:
[1]楊磊,陳凌云著.精通Eclipse Web開發-Java體系結構、工具、框架及整合應用.人民郵電出版社.
[2]三洋科技著.Struts+Spring+Hibernate開發入行真功夫.電子工業出版社.
[3]鄔繼成著.J2EE開源編程精要15講-整合Eclipse、Struts、Hibernate和Spring的Java Web開發.電子工業出版社.