2 回答

TA貢獻(xiàn)1810條經(jīng)驗 獲得超4個贊
SpringMVC工作流程描述
向服務(wù)器發(fā)送HTTP請求,請求被前端控制器 DispatcherServlet 捕獲。
DispatcherServlet 根據(jù) <servlet-name>-servlet.xml 中的配置對請求的URL進行解析,得到請求資源標(biāo)識符(URI)。 然后根據(jù)該URI,調(diào)用 HandlerMapping 獲得該Handler配置的所有相關(guān)的對象(包括Handler對象以及Handler對象對應(yīng)的攔截器),最后以 HandlerExecutionChain 對象的形式返回。
DispatcherServlet 根據(jù)獲得的Handler,選擇一個合適的 HandlerAdapter。(附注:如果成功獲得HandlerAdapter后,此時將開始執(zhí)行攔截器的preHandler(…)方法)。
提取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中。
Handler(Controller)執(zhí)行完成后,向 DispatcherServlet 返回一個 ModelAndView 對象;
根據(jù)返回的ModelAndView,選擇一個適合的 ViewResolver(必須是已經(jīng)注冊到Spring容器中的ViewResolver)返回給DispatcherServlet。
ViewResolver 結(jié)合Model和View,來渲染視圖。
視圖負(fù)責(zé)將渲染結(jié)果返回給客戶端。
SpringMVC運行原理
1. 客戶端請求提交到DispatcherServlet
2. 由DispatcherServlet控制器查詢一個或多個HandlerMapping,找到處理請求的Controller
3. DispatcherServlet將請求提交到Controller
4. Controller調(diào)用業(yè)務(wù)邏輯處理后,返回ModelAndView
5. DispatcherServlet查詢一個或多個ViewResoler視圖解析器,找到ModelAndView指定的視圖
6. 視圖負(fù)責(zé)將結(jié)果顯示到客戶端
添加回答
舉報