Spring MVC框架

Spring Mvc原理

Spring MVC結(jié)構(gòu)

控制器(Controller)

前端控制器是DispatcherServlet盐数;應(yīng)用控制器其實拆為處理器映射器(Handler Mapping)進行處理器管理和視圖解析器(View Resolver)進行視圖管理栓霜;頁面控制器/動作/處理器為Controller接口(僅包含ModelAndView handleRequest(request, response) 方法)的實現(xiàn)(也可以是任何的POJO類)鹰祸。

控制器Controller 負責(zé)處理由DispatcherServlet 分發(fā)的請求稚疹,它把用戶請求的數(shù)據(jù)經(jīng)過業(yè)務(wù)處理層處理之后封裝成一個Model ,然后再把該Model 返回給對應(yīng)的View 進行展示冤竹。在SpringMVC 中提供了一個非常簡便的定義Controller 的方法钉寝,你無需繼承特定的類或?qū)崿F(xiàn)特定的接口,只需使用@Controller 標(biāo)記一個類是Controller 管引,然后使用@RequestMapping 和@RequestParam 等一些注解用以定義URL 請求和Controller 方法之間的映射戳葵,這樣的Controller 就能被外界訪問到。此外Controller 不會直接依賴于HttpServletRequest 和HttpServletResponse 等HttpServlet 對象汉匙,它們可以通過Controller 的方法參數(shù)靈活的獲取到拱烁。

Spring MVC的具體工作流程

1.用戶發(fā)起請求到前端控制器(Controller)DispatcherServlet。

2.DispatcherServlet對請求URL進行解析噩翠,得到請求資源標(biāo)識符(URI)戏自。然后根據(jù)該URI,調(diào)用HandlerMapping獲得該Handler配置的所有相關(guān)的對象(包括Handler對象以及Handler對象對應(yīng)的攔截器)伤锚,最后以HandlerExecutionChain對象的形式返回擅笔;
HandlerMapping返回執(zhí)行鏈,包含了2部分內(nèi)容: ① Handler對象、② 攔截器數(shù)組

3.DispatcherServlet 根據(jù)獲得的Handler猛们,選擇一個合適的HandlerAdapter念脯。(附注:如果成功獲得HandlerAdapter后,此時將開始執(zhí)行攔截器的preHandler(...)方法)

4.提取Request中的模型數(shù)據(jù)弯淘,填充Handler入?yún)⒙痰辏_始執(zhí)行Handler(Controller)。 在填充Handler的入?yún)⑦^程中庐橙,根據(jù)你的配置假勿,Spring將幫你做一些額外的工作:
HttpMessageConveter: 將請求消息(如Json、xml等數(shù)據(jù))轉(zhuǎn)換成一個對象态鳖,將對象轉(zhuǎn)換為指定的響應(yīng)信息
數(shù)據(jù)轉(zhuǎn)換:對請求消息進行數(shù)據(jù)轉(zhuǎn)換转培。如String轉(zhuǎn)換成Integer、Double等
數(shù)據(jù)根式化:對請求消息進行數(shù)據(jù)格式化浆竭。 如將字符串轉(zhuǎn)換成格式化數(shù)字或格式化日期等
數(shù)據(jù)驗證: 驗證數(shù)據(jù)的有效性(長度浸须、格式等),驗證結(jié)果存儲到BindingResult或Error中邦泄。

5.Handler執(zhí)行完成后删窒,向DispatcherServlet 返回一個ModelAndView對象;

6.根據(jù)返回的ModelAndView虎韵,選擇一個適合的ViewResolver(必須是已經(jīng)注冊到Spring容器中的ViewResolver)返回給DispatcherServlet ;

7.視圖解析器(ViewResolver)返回真正的視圖對象(View)缸废。
(此時前端控制器中既有視圖又有Model對象數(shù)據(jù))前端控制器根據(jù)模型數(shù)據(jù)和視圖對象包蓝,進行視圖渲染。返回渲染后的視圖(html/json/xml).

8.將渲染結(jié)果返回給客戶端企量。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末测萎,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子届巩,更是在濱河造成了極大的恐慌硅瞧,老刑警劉巖,帶你破解...
    沈念sama閱讀 222,183評論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件恕汇,死亡現(xiàn)場離奇詭異腕唧,居然都是意外死亡,警方通過查閱死者的電腦和手機瘾英,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,850評論 3 399
  • 文/潘曉璐 我一進店門枣接,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人缺谴,你說我怎么就攤上這事但惶。” “怎么了?”我有些...
    開封第一講書人閱讀 168,766評論 0 361
  • 文/不壞的土叔 我叫張陵膀曾,是天一觀的道長县爬。 經(jīng)常有香客問我,道長添谊,這世上最難降的妖魔是什么财喳? 我笑而不...
    開封第一講書人閱讀 59,854評論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮碉钠,結(jié)果婚禮上纲缓,老公的妹妹穿的比我還像新娘。我一直安慰自己喊废,他們只是感情好祝高,可當(dāng)我...
    茶點故事閱讀 68,871評論 6 398
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著污筷,像睡著了一般工闺。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上瓣蛀,一...
    開封第一講書人閱讀 52,457評論 1 311
  • 那天陆蟆,我揣著相機與錄音,去河邊找鬼惋增。 笑死叠殷,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的诈皿。 我是一名探鬼主播林束,決...
    沈念sama閱讀 40,999評論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼稽亏!你這毒婦竟也來了壶冒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,914評論 0 277
  • 序言:老撾萬榮一對情侶失蹤截歉,失蹤者是張志新(化名)和其女友劉穎胖腾,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體瘪松,經(jīng)...
    沈念sama閱讀 46,465評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡咸作,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,543評論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宵睦。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片性宏。...
    茶點故事閱讀 40,675評論 1 353
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖状飞,靈堂內(nèi)的尸體忽然破棺而出毫胜,到底是詐尸還是另有隱情书斜,我是刑警寧澤,帶...
    沈念sama閱讀 36,354評論 5 351
  • 正文 年R本政府宣布酵使,位于F島的核電站荐吉,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏口渔。R本人自食惡果不足惜样屠,卻給世界環(huán)境...
    茶點故事閱讀 42,029評論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望缺脉。 院中可真熱鬧痪欲,春花似錦、人聲如沸攻礼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,514評論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽礁扮。三九已至知举,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間太伊,已是汗流浹背雇锡。 一陣腳步聲響...
    開封第一講書人閱讀 33,616評論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留僚焦,地道東北人锰提。 一個月前我還...
    沈念sama閱讀 49,091評論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像芳悲,于是被迫代替她去往敵國和親立肘。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,685評論 2 360

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