sprngMVC:用餐具更文明

關(guān)鍵字:Handler處理器,DispatchServlet它匕,POJO吩跋,Json寞射,@RequestBody,@ResponseBody钞澳,攔截/監(jiān)聽/過濾

SpringMVC和spring怠惶,springboot他們是什么關(guān)系呢?

光看名字感覺像轧粟,但實際上并不是這樣的。


使用到它的框架是ssm脓魏,就是spring+springMVC+mybatis兰吟;

更早的是ssh,就是spring+struts+hibernate茂翔,mybatis和hibernate都是連接數(shù)據(jù)庫的混蔼,springMVC就是用來代替struts的,它是一個前端框架珊燎。

經(jīng)典三層架構(gòu)

先說一下經(jīng)典的三層架構(gòu)

表現(xiàn)層:web層惭嚣,和用戶交互。

業(yè)務(wù)層:service層悔政,處理業(yè)務(wù)晚吞。

持久層:dao層,對數(shù)據(jù)庫操作谋国。


MVC在表現(xiàn)層又分了三層槽地,全名是 Model View Controller

模型Mode:業(yè)務(wù)模型(業(yè)務(wù)邏輯)和數(shù)據(jù)模型(傳來傳去的那些參數(shù),比如一個user)

視圖View:jsp捌蚊,html集畅,現(xiàn)在流行的是vue,就是頁面缅糟。

控制器Controller:controller層挺智,少量邏輯,一般寫點權(quán)限控制窗宦。

竹簽和筷子(原生servlet和DispatchServlet)

書接上回Spring:從就地燒烤到上桌吃飯 - 簡書 (jianshu.com)逃贝,原始的烤串模式每個菜都需要一根竹簽,既然我們現(xiàn)在已經(jīng)上桌了迫摔,我們就不需要浪費竹子了沐扳,只需要用竹子做一雙筷子,就可以重復使用句占。

原生的servlet模式沪摄,每有一個業(yè)務(wù)就需要一個servlet;

SpringMVC全局只有一個servlet處理所有需求纱烘,這就是DispatchServlet前端控制器杨拐。

DispatchServlet連接controller層(使用springMVC框架后已經(jīng)很久沒寫過servlet了,jsp也不用了)擂啥,多個業(yè)務(wù)只需要寫多個controller哄陶。

一桌菜(Handler處理器)

現(xiàn)在有筷子了,就該開吃了哺壶?

用springMVC怎么能吃這么簡單的席屋吨,最起碼要自助餐。

1,首先用戶拿著筷子(DispatchServlet前端控制器)山宾;

2,看了一眼自助餐廳的桌子上的牌子(HandlerMapping處理器映射器)知道了龍蝦在哪至扰,

3,然后拿著小餐盤(HandlerAdapter處理器適配器),如果要果汁的話需要用杯子(不同的適配器處理不同的Handler)资锰,

4,直奔海鮮區(qū)弄了幾只龍蝦(Handler)回來(至于龍蝦是怎么做的那是spring的事)敢课,

5,回來之后用筷子夾起來看看(ViewResolver視圖解析器)再吃(響應(yīng)用戶)。

這就是springMVC的請求處理流程(重點記憶)


這個場景下DispatchServlet比喻成筷子有點牽強绷杜,或者可以把他想象成幫你去加菜的男朋友直秆,

這樣就合理多了,所有事都是他在做鞭盟,最后給個反饋圾结。


HandlerMapping處理器映射器:springMVC初始化時將<url,Handler方法>保存到HandlerMapping中,只需要有url地址就能訪問到方法懊缺。

HandlerAdapter處理器適配器:處理器適配器接口中有個方法會判斷該適配器是否適合當前Handler疫稿,用來找到一個適合當前Handler的適配器子類培他,目的就是把不同的Handler包裝成統(tǒng)一口徑。

Handler就是Controller層的方法遗座,執(zhí)行完Handler方法后返回ModelAndView舀凛;

ModelAndView是springMVC的一個底層對象,估計大家都只見過封裝后的返回類途蒋。

菜名(POJO包裝對象)

隨著菜品越來越復雜猛遍,配料越來越多,你不會再說我要吃一塊豬肉加點梅菜号坡,我要吃帶骨羊肉加點孜然等等懊烤,這樣說效率太低,容易搶不到菜宽堆;而是說我要吃梅菜扣肉腌紧,我要吃烤羊排。


項目也是一樣越來越大畜隶,越來越復雜壁肋,參數(shù)也越來越多,原始的傳參方式已經(jīng)不好用了籽慢;需要使用POJO包裝對象浸遗,

例如你要傳一個id,一個name箱亿,一個age跛锌;現(xiàn)在只需要傳一個user,里面包含user.id,user.name,user.age届惋;寫代碼的時候很省事髓帽,但是實際上效果是一樣的。

具體實現(xiàn)估計和json還有反射有關(guān)盼樟,Mybatis也有POJO

@RequstBody:后臺接收POJO類型需要加上注解@RequstBody

@ResponseBody:向前端直接返回POJO類型需要加上注解@ResponseBody

順便說下json氢卡,json是一種簡化的document,沒有了<>標簽晨缴,數(shù)據(jù)量更小峡捡;


你的媽媽(攔截/監(jiān)聽/過濾)

吃飯的時候總有一個人告訴你什么能吃什么不能吃击碗,這個應(yīng)該這樣吃那個應(yīng)該那樣吃。

過濾器(filter):濾掉一些不該吃的東西们拙;

對Requst請求起到過濾作用稍途,作用在servlet之前。

監(jiān)聽器(listener):從你動筷子的時候就盯著你了砚婆;

應(yīng)用啟動的時候啟動械拍,只初始化一次突勇,應(yīng)用銷毀時銷毀;一般做一些初始化工作坷虑,springboot的run方法中有很多地方用到了監(jiān)聽(下次說springboot時再說)甲馋;監(jiān)聽一些特定事件,做在線人數(shù)統(tǒng)計迄损。

攔截器(interceptor):你媽媽會在你準備夾菜時定躏,夾到菜時和吃進菜前嘮叨你幾句。

只會攔截控制器方法(Handler)芹敌,攔截器有三次執(zhí)行機會痊远,

1.在Handler業(yè)務(wù)邏輯執(zhí)行前攔截,

2.在Handler業(yè)務(wù)邏輯執(zhí)行結(jié)束后攔截氏捞,

3.在跳轉(zhuǎn)頁面前攔截碧聪。


一個小發(fā)現(xiàn):Rest風格中put和delete都是本質(zhì)都是post方法

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市液茎,隨后出現(xiàn)的幾起案子逞姿,更是在濱河造成了極大的恐慌,老刑警劉巖豁护,帶你破解...
    沈念sama閱讀 218,204評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件哼凯,死亡現(xiàn)場離奇詭異,居然都是意外死亡楚里,警方通過查閱死者的電腦和手機断部,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,091評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來班缎,“玉大人蝴光,你說我怎么就攤上這事〈镏罚” “怎么了蔑祟?”我有些...
    開封第一講書人閱讀 164,548評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長沉唠。 經(jīng)常有香客問我疆虚,道長,這世上最難降的妖魔是什么满葛? 我笑而不...
    開封第一講書人閱讀 58,657評論 1 293
  • 正文 為了忘掉前任径簿,我火速辦了婚禮,結(jié)果婚禮上嘀韧,老公的妹妹穿的比我還像新娘篇亭。我一直安慰自己,他們只是感情好锄贷,可當我...
    茶點故事閱讀 67,689評論 6 392
  • 文/花漫 我一把揭開白布译蒂。 她就那樣靜靜地躺著曼月,像睡著了一般。 火紅的嫁衣襯著肌膚如雪柔昼。 梳的紋絲不亂的頭發(fā)上哑芹,一...
    開封第一講書人閱讀 51,554評論 1 305
  • 那天,我揣著相機與錄音岳锁,去河邊找鬼绩衷。 笑死,一個胖子當著我的面吹牛激率,可吹牛的內(nèi)容都是我干的咳燕。 我是一名探鬼主播,決...
    沈念sama閱讀 40,302評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼乒躺,長吁一口氣:“原來是場噩夢啊……” “哼招盲!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嘉冒,我...
    開封第一講書人閱讀 39,216評論 0 276
  • 序言:老撾萬榮一對情侶失蹤曹货,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后讳推,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體顶籽,經(jīng)...
    沈念sama閱讀 45,661評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,851評論 3 336
  • 正文 我和宋清朗相戀三年银觅,在試婚紗的時候發(fā)現(xiàn)自己被綠了礼饱。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,977評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡究驴,死狀恐怖镊绪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情洒忧,我是刑警寧澤蝴韭,帶...
    沈念sama閱讀 35,697評論 5 347
  • 正文 年R本政府宣布,位于F島的核電站熙侍,受9級特大地震影響榄鉴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜蛉抓,卻給世界環(huán)境...
    茶點故事閱讀 41,306評論 3 330
  • 文/蒙蒙 一牢硅、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧芝雪,春花似錦、人聲如沸综苔。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,898評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至堡牡,卻和暖如春抒抬,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背晤柄。 一陣腳步聲響...
    開封第一講書人閱讀 33,019評論 1 270
  • 我被黑心中介騙來泰國打工擦剑, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人芥颈。 一個月前我還...
    沈念sama閱讀 48,138評論 3 370
  • 正文 我出身青樓惠勒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親爬坑。 傳聞我的和親對象是個殘疾皇子纠屋,可洞房花燭夜當晚...
    茶點故事閱讀 44,927評論 2 355

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

  • Spring MVC是Spring給我們提供的一個用于簡化Web開發(fā)的框架 簡介 MVC體系 常用的開發(fā)框架一般基...
    Zeppelin421閱讀 315評論 0 1
  • 1.SpringMVC 1.1SpringMVC簡介 1.1.1MVC框架介紹 在項目中按照代碼架構(gòu)劃分:表現(xiàn)層(...
    HelloWorld打斷點閱讀 316評論 0 0
  • 一、Spring篇 1盾计、什么是Spring框架售担? Spring是一種輕量級框架,提高開發(fā)人員的開發(fā)效率以及系統(tǒng)的可...
    鄙人_阿K閱讀 4,800評論 3 5
  • MVC三層架構(gòu) MVC三層架構(gòu)前面也都了解過了署辉,在這里想說的是族铆,在實際的開發(fā)中Model層可能有dao、servi...
    在error邊緣瘋狂試探閱讀 228評論 0 1
  • 90. 為什么要使用 spring哭尝? Spring是一個輕量級的控制反轉(zhuǎn)(IoC)和面向切面(AOP)的容器框架哥攘;...
    雪飄千里閱讀 1,081評論 0 5