SpringBoot對(duì)比SpringMVC醋奠,SpringMVC 處理請(qǐng)求過(guò)程

Spring,Spring MVC伊佃,Spring Boot 三者比較

Spring 框架就像一個(gè)家族窜司,有眾多衍生產(chǎn)品例如 boot、security航揉、jpa等等塞祈。但他們的基礎(chǔ)都是Spring 的 ioc和 aop ioc 提供了依賴注入的容器 aop ,解決了面向橫切面的編程帅涂,然后在此兩者的基礎(chǔ)上實(shí)現(xiàn)了其他延伸產(chǎn)品的高級(jí)功能议薪。Spring MVC是基于 Servlet 的一個(gè) MVC 框架 主要解決 WEB 開發(fā)的問(wèn)題胀葱,因?yàn)?Spring 的配置非常復(fù)雜,各種XML笙蒙、 JavaConfig抵屿、hin處理起來(lái)比較繁瑣。于是為了簡(jiǎn)化開發(fā)者的使用捅位,從而創(chuàng)造性地推出了Spring boot轧葛,約定優(yōu)于配置,簡(jiǎn)化了spring的配置流程艇搀。

說(shuō)得更簡(jiǎn)便一些:Spring 最初利用“工廠模式”(DI)和“代理模式”(AOP)解耦應(yīng)用組件尿扯。大家覺得挺好用,于是按照這種模式搞了一個(gè) MVC框架(一些用Spring 解耦的組件)焰雕,用開發(fā) web 應(yīng)用( SpringMVC )衷笋。然后有發(fā)現(xiàn)每次開發(fā)都寫很多樣板代碼,為了簡(jiǎn)化工作流程矩屁,于是開發(fā)出了一些“懶人整合包”(starter)辟宗,這套就是 Spring Boot。

Spring MVC的功能

Spring MVC提供了一種輕度耦合的方式來(lái)開發(fā)web應(yīng)用吝秕。

Spring MVC是Spring的一個(gè)模塊泊脐,是一個(gè)web框架。通過(guò)Dispatcher Servlet, ModelAndView 和 View Resolver烁峭,開發(fā)web應(yīng)用變得很容易容客。解決的問(wèn)題領(lǐng)域是網(wǎng)站應(yīng)用程序或者服務(wù)開發(fā)——URL路由、Session约郁、模板引擎缩挑、靜態(tài)Web資源等等。

Spring Boot的功能

Spring Boot實(shí)現(xiàn)了自動(dòng)配置鬓梅,降低了項(xiàng)目搭建的復(fù)雜度供置。(遵循約定大于配置

眾所周知Spring框架需要進(jìn)行大量的配置,Spring Boot引入自動(dòng)配置的概念己肮,讓項(xiàng)目設(shè)置變得很容易士袄。Spring Boot本身并不提供Spring框架的核心特性以及擴(kuò)展功能悲关,只是用于快速谎僻、敏捷地開發(fā)新一代基于Spring框架的應(yīng)用程序。也就是說(shuō)寓辱,它并不是用來(lái)替代Spring的解決方案艘绍,而是和Spring框架緊密結(jié)合用于提升Spring開發(fā)者體驗(yàn)的工具。同時(shí)它集成了大量常用的第三方庫(kù)配置(例如Jackson, JDBC, Mongo, Redis, Mail等等)秫筏,Spring Boot應(yīng)用中這些第三方庫(kù)幾乎可以零配置的開箱即用(out-of-the-box)诱鞠,大部分的Spring Boot應(yīng)用都只需要非常少量的配置代碼挎挖,開發(fā)者能夠更加專注于業(yè)務(wù)邏輯。

Spring Boot只是承載者航夺,輔助你簡(jiǎn)化項(xiàng)目搭建過(guò)程的蕉朵。如果承載的是WEB項(xiàng)目,使用Spring MVC作為MVC框架阳掐,那么工作流程和你上面描述的是完全一樣的始衅,因?yàn)檫@部分工作是Spring MVC做的而不是Spring Boot。

對(duì)使用者來(lái)說(shuō)缭保,換用Spring Boot以后汛闸,項(xiàng)目初始化方法變了,配置文件變了艺骂,另外就是不需要單獨(dú)安裝Tomcat這類容器服務(wù)器了诸老,maven打出jar包直接跑起來(lái)就是個(gè)網(wǎng)站,但你最核心的業(yè)務(wù)邏輯實(shí)現(xiàn)與業(yè)務(wù)流程實(shí)現(xiàn)沒有任何變化钳恕。

所以别伏,用最簡(jiǎn)練的語(yǔ)言概括就是:

Spring 是一個(gè)“引擎”;

Spring MVC 是基于Spring的一個(gè) MVC 框架 忧额;

Spring Boot 是基于Spring4的條件注冊(cè)的一套快速開發(fā)整合包畸肆。

因?yàn)?Spring 的配置非常復(fù)雜,各種xml宙址,properties處理起來(lái)比較繁瑣轴脐。于是為了簡(jiǎn)化開發(fā)者的使用,Spring社區(qū)創(chuàng)造性地推出了Spring Boot抡砂,它遵循約定優(yōu)于配置大咱,極大降低了Spring使用門檻,但又不失Spring原本靈活強(qiáng)大的功能注益,下面用一張圖來(lái)描述三者的關(guān)系:

image

總結(jié):
Spring 最初利用“工廠模式”( DI )和“代理模式”( AOP )解耦應(yīng)用組件碴巾。按照這種模式搞了一個(gè) MVC 框架(一些用 Spring 解耦的組件),用開發(fā) web 應(yīng)用( SpringMVC )丑搔。后來(lái)發(fā)現(xiàn)每次開發(fā)都要搞很多依賴厦瓢,寫很多樣板代碼,使代碼臃腫而麻煩啤月,于是聰明的前人整理了一些懶人整合包( starter )煮仇,這套就是 Spring Boot 。

https://www.zhihu.com/question/64671972

SpringMVC 處理請(qǐng)求過(guò)程

SpringMVC框架是一個(gè)基于請(qǐng)求驅(qū)動(dòng)的Web框架谎仲,并且使用了‘前端控制器’模型來(lái)進(jìn)行設(shè)計(jì)浙垫,再根據(jù)‘請(qǐng)求映射規(guī)則’分發(fā)給相應(yīng)的頁(yè)面控制器進(jìn)行處理。

(一)整體流程

image

具體步驟:

    1、  首先用戶發(fā)送請(qǐng)求————>前端控制器夹姥,前端控制器根據(jù)請(qǐng)求信息(如 URL)來(lái)決定選擇哪一個(gè)頁(yè)面控制器進(jìn)行處理并把請(qǐng)求委托給它杉武,即以前的控制器的控制邏輯部分;圖 2-1 中的 1辙售、2 步驟轻抱;

    2、  頁(yè)面控制器接收到請(qǐng)求后旦部,進(jìn)行功能處理十拣,首先需要收集和綁定請(qǐng)求參數(shù)到一個(gè)對(duì)象,這個(gè)對(duì)象在 Spring Web MVC 中叫命令對(duì)象志鹃,并進(jìn)行驗(yàn)證夭问,然后將命令對(duì)象委托給業(yè)務(wù)對(duì)象進(jìn)行處理;處理完畢后返回一個(gè) ModelAndView(模型數(shù)據(jù)和邏輯視圖名)曹铃;圖 2-1 中的 3缰趋、4、5 步驟陕见;

    3秘血、  前端控制器收回控制權(quán),然后根據(jù)返回的邏輯視圖名评甜,選擇相應(yīng)的視圖進(jìn)行渲染灰粮,并把模型數(shù)據(jù)傳入以便視圖渲染;圖 2-1 中的步驟 6忍坷、7粘舟;

    4、  前端控制器再次收回控制權(quán)佩研,將響應(yīng)返回給用戶柑肴,圖 2-1 中的步驟 8;至此整個(gè)結(jié)束旬薯。

(二)核心流程

image

大圖:注意編號(hào)順序:

image

具體步驟:

    1晰骑、  首先用戶發(fā)送請(qǐng)求——>DispatcherServlet,前端控制器收到請(qǐng)求后自己不進(jìn)行處理绊序,而是委托給其他的解析器進(jìn)行處理硕舆,作為統(tǒng)一訪問(wèn)點(diǎn),進(jìn)行全局的流程控制骤公;

   2抚官、  DispatcherServlet——>HandlerMapping,HandlerMapping 將會(huì)把請(qǐng)求映射為 HandlerExecutionChain 對(duì)象(包含一個(gè) Handler 處理器(頁(yè)面控制器)對(duì)象淋样、多個(gè) HandlerInterceptor 攔截器)對(duì)象耗式,通過(guò)這種策略模式胁住,很容易添加新的映射策略趁猴;

   3刊咳、  DispatcherServlet——>HandlerAdapter,HandlerAdapter 將會(huì)把處理器包裝為適配器儡司,從而支持多種類型的處理器娱挨,即適配器設(shè)計(jì)模式的應(yīng)用,從而很容易支持很多類型的處理器捕犬;

   4跷坝、  HandlerAdapter——>處理器功能處理方法的調(diào)用,HandlerAdapter 將會(huì)根據(jù)適配的結(jié)果調(diào)用真正的處理器的功能處理方法碉碉,完成功能處理柴钻;并返回一個(gè) ModelAndView 對(duì)象(包含模型數(shù)據(jù)、邏輯視圖名)垢粮;

   5贴届、  ModelAndView 的邏輯視圖名——> ViewResolver, ViewResolver 將把邏輯視圖名解析為具體的 View蜡吧,通過(guò)這種策略模式毫蚓,很容易更換其他視圖技術(shù);

   6昔善、  View——>渲染元潘,View 會(huì)根據(jù)傳進(jìn)來(lái)的 Model 模型數(shù)據(jù)進(jìn)行渲染,此處的 Model 實(shí)際是一個(gè) Map 數(shù)據(jù)結(jié)構(gòu)君仆,因此很容易支持其他視圖技術(shù)翩概;

   7、  返回控制權(quán)給 DispatcherServlet返咱,由 DispatcherServlet 返回響應(yīng)給用戶氮帐,到此一個(gè)流程結(jié)束。

(三)總結(jié)核心開發(fā)步驟

1洛姑、 DispatcherServlet 在 web.xml 中的部署描述上沐,從而攔截請(qǐng)求到 Spring Web MVC

2、 HandlerMapping 的配置楞艾,從而將請(qǐng)求映射到處理器

3参咙、 HandlerAdapter 的配置,從而支持多種類型的處理器

4硫眯、 ViewResolver 的配置蕴侧,從而將邏輯視圖名解析為具體視圖技術(shù)

5、 處理器(頁(yè)面控制器)的配置两入,從而進(jìn)行功能處理

原文:https://blog.csdn.net/zhaolijing2012/article/details/41596803

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末净宵,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌择葡,老刑警劉巖紧武,帶你破解...
    沈念sama閱讀 218,284評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異敏储,居然都是意外死亡阻星,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,115評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門已添,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)妥箕,“玉大人,你說(shuō)我怎么就攤上這事更舞∑璐保” “怎么了?”我有些...
    開封第一講書人閱讀 164,614評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵缆蝉,是天一觀的道長(zhǎng)呛讲。 經(jīng)常有香客問(wèn)我,道長(zhǎng)返奉,這世上最難降的妖魔是什么贝搁? 我笑而不...
    開封第一講書人閱讀 58,671評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮芽偏,結(jié)果婚禮上雷逆,老公的妹妹穿的比我還像新娘。我一直安慰自己污尉,他們只是感情好膀哲,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,699評(píng)論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著被碗,像睡著了一般某宪。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锐朴,一...
    開封第一講書人閱讀 51,562評(píng)論 1 305
  • 那天兴喂,我揣著相機(jī)與錄音,去河邊找鬼焚志。 笑死衣迷,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的酱酬。 我是一名探鬼主播壶谒,決...
    沈念sama閱讀 40,309評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼膳沽!你這毒婦竟也來(lái)了汗菜?” 一聲冷哼從身側(cè)響起让禀,我...
    開封第一講書人閱讀 39,223評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎陨界,沒想到半個(gè)月后巡揍,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,668評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡普碎,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,859評(píng)論 3 336
  • 正文 我和宋清朗相戀三年吼肥,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了录平。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片麻车。...
    茶點(diǎn)故事閱讀 39,981評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖斗这,靈堂內(nèi)的尸體忽然破棺而出动猬,到底是詐尸還是另有隱情,我是刑警寧澤表箭,帶...
    沈念sama閱讀 35,705評(píng)論 5 347
  • 正文 年R本政府宣布赁咙,位于F島的核電站,受9級(jí)特大地震影響免钻,放射性物質(zhì)發(fā)生泄漏彼水。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,310評(píng)論 3 330
  • 文/蒙蒙 一极舔、第九天 我趴在偏房一處隱蔽的房頂上張望凤覆。 院中可真熱鬧,春花似錦拆魏、人聲如沸盯桦。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,904評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)拥峦。三九已至,卻和暖如春卖子,著一層夾襖步出監(jiān)牢的瞬間略号,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,023評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工洋闽, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留璃哟,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,146評(píng)論 3 370
  • 正文 我出身青樓喊递,卻偏偏與公主長(zhǎng)得像随闪,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子骚勘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,933評(píng)論 2 355

推薦閱讀更多精彩內(nèi)容