上一章 ? 詳解SSJ(Spring3.x mvc + Spring3.x Core + JPA2.x)輕量級集成開發—第6章 剖析Spring3.x AOP特性02
下一章 詳解SSJ(Spring3.x mvc + Spring3.x Core + JPA2.x)輕量級集成開發—第8章 Spring3.x mvc核心類庫及基礎構建
?
目錄
一、MVC模型介紹;
二、Spring MVC簡介;
三、剖析Spring MVC工作流程;
四、使用Maven工程構建Spring MVC應用;
?
前言
筆者的前幾章博文都陸續得到了大家的 支持 和 認同 ,尤其是《 筆者帶你剖析Java7.x新特性 》博文更是深受大家歡迎,在此筆者由衷的感謝ITeye上所有支持筆者的朋友。從系列博文的第一章至第六章,筆者已經完成了對Spring3.x Core的 詳細 講解,所以從本章開始請跟隨筆者一起學習有關Spring Web領域的相關知識。如果你以前使用過Struts、WebWork等MVC Frameworks來構建你的Web應用,那么你將能夠很快的接受本章及后續章節的內容。當然本章內容更多的是圍繞Spring MVC的 架構 進行介紹,對于不太喜歡 理論知識 的朋友,請關注筆者后續章節。反之請耐心閱讀本章內容,或許你會有意想不到的收獲。
?
一、MVC模型介紹
MVC(Model、View、Controller)是在程序開發過程中衍生出的一套
程序設計思想
,它由三個單詞的縮寫組成,分別為:模型層(Model)、表現層(View)和控制層(Controller)。至于使用MVC的目的,就在于它能夠更
明確
的定義Web系統的
組件分工
。
在早期的Java Web應用開發過程中,JSP既要負責頁面的顯示工作,同時也要負責實際的業務處理。從而導致了整個JSP頁面出現高耦合、低復用等諸多弊端因素。筆者相信這些
痛苦
對于每個Web 程序員來說都是不言而喻的,但隨著MVC架構的出現,程序的擴展性和伸縮性都將得到更好的保障。
MVC架構工作流程圖:
?
通過上述視圖我們可以發現,View層組件僅負責頁面顯示工作,數據的預處理工作(類型轉換、DTO封裝、數據效驗、數據交互)則由Controller層組件負責,至于具體的業務實現則交由Model層組件負責。只要滿足這種規范的設計我們都可以稱之為MVC( 并不要求采用指定的技術實現 )。但是在實際的開發過程中,開發人員往往需要使用一些 規范實現 來簡化日常工作,這樣便促使了WebWork、Struts2等諸多優秀MVC Frameworks的誕生。
?
提示 :
對于開發人員來說,使用任何Framework進行業務解耦是目的(理論而言)。但 實現企業快速開發,提高員工生產力 才是主要。
?
二、Spring MVC簡介
Spring MVC屬于Spring平臺整體的一部分,由于它 分離 了View層組件、Controller層組件、Model層組件以及分發器等,所以Spring MVC被定義為一個標準的企業級MVC規范實現。并提供有豐富的功能,只為構建強大且健壯的Java Web應用。與早期版本相比,Spring3.x MVC將具備更強的 靈活性 和 配置性 。在實際的開發過程中,Spring MVC并沒有強制要求開發人員只能選用JSP作為View層組件(可以選則Velocity、Tiles、iText等其他技術),這種 開放性 打破了以往的常規式選擇。并且一旦在項目中使用了Spring提供的相關Annotations,一切事情將變得非常簡單和有趣。開發人員將再不必為Controller實現任何接口,也無需在配置文件中定義冗長且繁瑣的 映射關系 ,對于支持Restful風格的Spring MVC來說,未來將注定成為主流趨勢。你沒聽錯,這些都是Spring3.x MVC所帶給開發人員的改變。當然這僅僅只是一部分。關于其它特性,筆者在后續章節會進行著重講解。
?
三、剖析Spring MVC工作流程
在早期大行其道的SSH(Struts2.x + Spring + Hibernate)集成開發模式中,Struts2.x是開發人員最為熟悉的一種MVC Framework。不知大家是否還記得Struts2.x的工作流程機制?當客戶端提交請求至服務端時,Struts2的FileterDispatcher(核心控制器)會負責攔截,并且內置攔截器會負責對請求中的參數做一系列的 預處理 工作(包含:解析參數、類型轉換、DTO封裝等)。然后提交給具體的Action(業務控制器)調用業務實現直至返回處理結果,最后Action根據處理結果forward到具體的View層組件。
上述筆者簡單的闡述了Struts2的工作流程機制,不得不承認,Struts2.x的確是一個 設計精良 的MVC框架,它將表現層(Model)、模型層(View)、控制層(Controller)等3個模塊的組件分工劃分的極為清晰。既然Struts2.x這么完美,那么為什么大家還需要使用Spring MVC呢?對于這個問題即便是擁有多年開發經驗的開發人員或許也會存在疑問,他們都有一個統一的答案:客戶決說了算。的確商業化的項目構建確實不用開發人員思考太多,但這卻令人感到一種無奈。當然筆者在此篇博文中并不會針對Struts2.x的缺陷大做文章,因為任何一種技術都伴隨著 缺陷 ,這是不可避免的,其中同樣也包括Spring。
Spring MVC的工作流程機制 參考 于Struts2.x,但整體構架卻 大相庭徑 。簡單來說Struts2.x的內核中充斥著大量的 內置 攔截器 (約70%),但Spring MVC卻并沒有選擇這么做。在Spring MVC的工作流程機制中,客戶端的請求響應/分發工作全由DispatcherServlet(前端控制器)負責,DispatcherServlet僅只是一個普通的Servlet。當DispatcherServlet成功攔截客戶端請求后,便會加載WEB-INF目錄下的Spring MVC配置文件。然后 根據 HandlerMapping 的實例(配置文件中的映射信息)分發給對應的 Controller(業務控制器)處理。Controller在調用具體的業務實現之前,會負責一系列的參數預處理工作(包含:解析參數、類型轉換、封裝DTO等)。最后Controller根據處理結果forward到具體的View層組件。
Spring工作流程圖示例:
?
提示 :
對于從未接觸過Struts2.x的開發人員而言,筆者不建議你重新學習一遍。如果大家非要問為什么,那么筆者的答案就是Spring MVC 構建簡單 。Struts2.x的確擁有太多令人驚艷的功能,但這些功能在實際開發過程中,已經多到成為“雞肋”。
?
四、使用Maven工程構建Spring MVC應用
Maven是一種基于 項目對象模型(POM)的項目管理工具 (純Java開發),它可以通過一小段描述信息來管理 項目的構建 及 類庫依賴 。相對于Ant等傳統項目純構建工具而言,Maven所包含的功能更像是一個功能的超集。至于如何使用Maven請參考筆者的《 Use Maven3.x 》系列博文。
在此,筆者推薦的IDE工具并非是eclipse或MyEclipse,而是STS(Spring Tool Suite),因為STS工具專為構建Spring應用而生。STS在eclipse的基礎之上進行了二次開發,所以熟悉eclipse的開發人員將會非常容易上手STS。值得慶幸的是,STS同樣也是開源的,你可以登陸 http://www.springsource.org/sts 站點進行最新版本的下載。
選擇File->new->Spring->Spring Template Project構建Spring應用工程:
?
選擇Spring MVC Project點擊Next:
?
接下來我們要做的事情就是指定項目名稱和定義項目經緯,最后點擊Finish完成創建:
?
當使用STS工具成功創建Spring MVC項目后,我們可以發現。項目的管理缺省是基于Maven進行管理的,并且STS工具已經自動為開發人員生成了Spring所需的各項配置文件,我們只需要在后續的開發過程中進行 擴充 既可。
?
本章內容到此結束,由于時間倉庫,本文或許有很多不盡人意的地方,希望各位能夠理解和體諒。關于下一章的內容,筆者打算繼續講解Spring MVC的相關內容。
至于后續章節博文的更新周期,筆者會在本月15號以后才會進行更新,希望大家諒解。
詳解SSJ(Spring3.x mvc + Spring3.x Core + JPA2.x)輕量級集成開發—第7章 筆者帶走進Spring3.x MVC的世界
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
