Spring MVC有哪些核心組件?
- DispatcherServlet:前端控制器,所有HTTP請求首先經過它,分發請求到正確的處理器,并與其他組件協調。
- HandlerMapping:維護URL和處理器的映射關系
- Handler:處理器,完成具體的業務邏輯,相當于 Servlet 或 Action。
- HandlerInterceptor:處理器攔截器,是一個接口,如果需要完成一些攔截處理,可以實現該接口。
- HandlerExecutionChain:處理器執行鏈,包括一系列處理器攔截器和其應用的Handler
- HandlerAdapter:處理器適配器,Handler執行業務方法前,要對請求的數據進行一系列操作,比如將表單數據封裝到Java Bean,表單數據的驗證,數據類型的轉換,這些操作都由適配器進行,HandlerAdapter 確保 DispatcherServlet 可以以統一的方式調用不同類型的處理器,無需關心具體的執行細節。
- ModelAndView:裝載了模型數據和視圖信息,作為 Handler 的處理結果,返回給 DispatcherServlet。
- ViewResolver:視圖解析器,DispatcheServlet 通過它將邏輯視圖解析為物理視圖,最終將渲染結果響應給客戶端。
Spring MVC的工作流程
DispatcherServlet攔截請求,通過HandlerMapping獲取執行鏈,然后通過HandlerAdapter調用控制器執行業務邏輯,DispatcherServlet得到ModelAndView類型的結果,通過視圖解析器轉化為物理視圖,渲染后返回給前端
Spring MVC Restful風格的接口的流程是什么樣的?
現在都是前后端分離,后臺一般不用處理視圖,不需要視圖解析。
Restful接口,響應數據的類型是json,這就用到了一個常用注解:@ResponseBody
Controller處理器被封裝成了ServletInvocableHandlerMethod,HandlerAdapter 處理器適配器去執行 invokeAndHandle 方法,完成對 Controller 的請求處理
HandlerAdapter 執行完對 Controller 的請求,會調用一個方法返回值處理器去處理返回值,主要的過程是:創建一個HTTPResponse的實例,然后將返回值寫入這個實例的OutputStream中,在寫入過程中對返回值進行Json序列化。
執行完請求后,返回的 ModealAndView 為 null,而最終返回的是Json格式的數據