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

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