在開始springmvc之旅之前,我們先學習下MVC架構模式。
什么是MVC架構模式?
MVC是MODEL-VIEW-CONTROLLER的縮寫,主要分為MODEL層,VIEW層,CONTROLLER層。
MODEL:模型層,業(yè)務數據的表示,通常是多個業(yè)務實體的組合
VIEW:視圖層,負責將UI和業(yè)務數據的展現(xiàn)
CONTROLLER:控制器,負責處理用戶的請求,業(yè)務數據的抽取,并把數據傳遞給相應的視圖進行展現(xiàn)
由此可見,MVC的核心是將業(yè)務數據的抽取和業(yè)務數據的展現(xiàn)相分離
什么是前端控制器模式?

講解
1.首先用戶的請求到達前端控制器(Front controller), 前端控制器了解這個請求應當被誰處理,所以前端控制器將這個請求代理給相應的控制器(Controller)。
2.控制器了解業(yè)務邏輯的細節(jié),因此調用業(yè)務邏輯生成業(yè)務數據(Model)并將業(yè)務數據返回給前端控制器。
3.前端控制器在將業(yè)務數據分發(fā)給業(yè)務視圖,由視圖(View)呈現(xiàn)最終用戶頁面。
4.業(yè)務視圖將最終用戶頁面返回給前端控制器,前端控制器將頁面返回給瀏覽器。
什么是前端控制器?
舉例如下:前端控制器就相當于我們公司的前臺,當客人來臨時,由前臺指引到各個部門。

Spring MVC是如何來處理請求的呢?
- 了解Spring MVC的基礎概念
1.DispatcherServlet:就是前端控制器,瀏覽器請求通過DispatcherServlet進行分發(fā)到相應的Controller和生產業(yè)務數據Model,Model在通過DispatcherServlet進行傳遞到view來完成最終頁面呈現(xiàn)。
2.Controller:處理業(yè)務邏輯生成合適的數據.
3.HandlerMapping:告訴DispatcherServlet這個請求到來之后由哪個Controller來做處理以及Controller被哪個攔截器攔截。
4.HandlerAdapter:DispatcherServlet是根據handlerMapping傳過來的controller與已經注冊好了的HandlerAdapter一一匹配,看哪一種HandlerAdapter是支持該controller類型的,如果找到了其中一種HandlerAdapter是支持傳過來的controller類型,那么該HandlerAdapter會調用自己的handle方法,handle方法運用Java的反射機制執(zhí)行controller的具體方法來獲得ModelAndView
5.HandlerInterceptor:在被攔截的controller之前、之后、以及完成呈現(xiàn)加入一些處理。
6.HandlerExecutionChain:執(zhí)行鏈條,如下圖
F5068814-4812-4240-9AA6-D5D62BE1EC18.png
7.ModelAndView:Model具體表現(xiàn),無論是用model還是map都會轉成ModelAndView
8.ViewResolver:視圖解析器,根據viewName告訴DispatcherServlet選擇正確的View來呈現(xiàn)頁面
9.View:負責呈現(xiàn)頁面
- 借用網上圖片,來展現(xiàn)spring mvc處理過程

1.請求來臨時,DispatcherServlet進行轉發(fā),調用映射處理器HandlerMapping的配置找到Controller、HandlerInterceptor,把它們形成一個執(zhí)行鏈條(HandlerExecutionChain)
2.DispatcherServlet在調用處理器適配,看哪一種HandlerAdapter是支持該controller類型的,如果找到了其中一種HandlerAdapter是支持傳過來的controller類型,handle方法運用Java的反射機制執(zhí)行controller的具體方法來獲得ModelAndView。
3.DispatcherServlet調用ViewResolver的方法返回view對象
4.將ModelAndView傳遞給view來進行展現(xiàn)
5.最后DispatcherServlet講view的呈現(xiàn)返回給用戶
