title: SpringMVC運(yùn)行流程
categories: SpringMVC
tags: SpringMVC
1. SpringMVC的運(yùn)行流程
- 用戶向服務(wù)器發(fā)送請(qǐng)求谭跨,請(qǐng)求被Spring 前端控制Servelt DispatcherServlet捕獲伯顶;
- DispatcherServlet對(duì)請(qǐng)求URL進(jìn)行解析,得到請(qǐng)求資源標(biāo)識(shí)符(URI)呢蛤。然后根據(jù)該URI,調(diào)用HandlerMapping獲得該Handler配置的所有相關(guān)的對(duì)象(包括Handler對(duì)象以及Handler對(duì)象對(duì)應(yīng)的攔截器)棍郎,最后以HandlerExecutionChain對(duì)象的形式返回其障;
- DispatcherServlet 根據(jù)獲得的Handler,選擇一個(gè)合適的HandlerAdapter涂佃;(附注:如果成功獲得HandlerAdapter后励翼,此時(shí)將開始執(zhí)行攔截器的preHandler(...)方法)
- 提取Request中的模型數(shù)據(jù),填充Handler入?yún)⒀怖睿_始執(zhí)行Handler(Controller)抚笔。 在填充Handler的入?yún)⑦^程中扶认,根據(jù)你的配置侨拦,Spring將幫你做一些額外的工作:
① HttpMessageConveter: 將請(qǐng)求消息(如Json、xml等數(shù)據(jù))轉(zhuǎn)換成一個(gè)對(duì)象辐宾,將對(duì)象轉(zhuǎn)換為指定的響應(yīng)信息
② 數(shù)據(jù)轉(zhuǎn)換:對(duì)請(qǐng)求消息進(jìn)行數(shù)據(jù)轉(zhuǎn)換狱从。如String轉(zhuǎn)換成Integer、Double等
③ 數(shù)據(jù)根式化:對(duì)請(qǐng)求消息進(jìn)行數(shù)據(jù)格式化叠纹。 如將字符串轉(zhuǎn)換成格式化數(shù)字或格式化日期等
④ 數(shù)據(jù)驗(yàn)證: 驗(yàn)證數(shù)據(jù)的有效性(長(zhǎng)度季研、格式等),驗(yàn)證結(jié)果存儲(chǔ)到BindingResult或Error中
- Handler執(zhí)行完成后誉察,向DispatcherServlet 返回一個(gè)ModelAndView對(duì)象与涡;
- 根據(jù)返回的ModelAndView,選擇一個(gè)適合的ViewResolver(必須是已經(jīng)注冊(cè)到Spring容器中的ViewResolver)返回給DispatcherServlet 持偏;
- ViewResolver 結(jié)合Model和View驼卖,來渲染視圖;
- 將渲染結(jié)果返回給客戶端鸿秆。
2. springMVC的核心組件
- DispatcherServlet:中央控制器酌畜,把請(qǐng)求給轉(zhuǎn)發(fā)到具體的控制類
- Controller:具體處理請(qǐng)求的控制器
- HandlerMapping:映射處理器,負(fù)責(zé)映射中央處理器轉(zhuǎn)發(fā)給controller時(shí)的映射策略
- ModelAndView:服務(wù)層返回的數(shù)據(jù)和視圖層的封裝類
- ViewResolver:視圖解析器卿叽,解析具體的視圖
- Interceptors :攔截器桥胞,負(fù)責(zé)攔截我們定義的請(qǐng)求然后做處理工作