上一篇到440行傳回結果result.
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 傳回result之後,使用result去擷取modelandview,執行方法getmodelandview:
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 該方法主要通過result傳回值來判斷:
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 目前方法是帶responsebody注解的,是以執行到這裡:
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 進去方法:
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 這裡是根據http類型做出相應的輸出:
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 使用者配置的:
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 接收的類型:
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 寫的方法:
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 這裡配置的json格式,是以會進入json方法:
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 寫入responsebody後,傳回mav:
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 最後傳回之前調用handler的地方,之後會有一些不同種類的攔截器方法:
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 攔截器如:
Spring MVC 原理 - DispatcherServlet調用完整過程(下)
Spring MVC 原理 - DispatcherServlet調用完整過程(下)
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 還有一些處理不同異常情況的攔截器。
系統預設都會去執行一個攔截器,這個攔截器基本上都是空方法,是一個private類:
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 傳回調用dodispatch的地方:
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 傳回到doservice的地方:
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 最後回到httpservlet的service方法:
Spring MVC 原理 - DispatcherServlet調用完整過程(下) 到這裡就完成了一次完整的調用過程。
可以發現,整個過程的流程是比較清晰,程式啟動時會根據mvc的配置和spring配置來處理配置資訊和注解的類。
servlet處理請求,通過request(主要是url)來擷取handler,之後最主要的一個部分就是擷取需要注入的參數,最後調用使用者方法,處理傳回結果。
整個過程中麻煩的地方就是在一些細節的處理上,這些細節未必一開始就有的,一開始應該是一個主要的流程,後續發現問題或者為了通用性做的改進。