Spring mvc : DispatcherServlet

c通過上篇我們知道了Spring mvc是需要配置一個DispatcherServlet,那么一個springmvc是怎么做到把一個請求通過一個Servlet來轉發(fā)到不同的Controller上呢?

我們就需要了解下DispatcherServlet這個類,看看它到底做了什么。

DispatcherServlet的繼承關系:

DispatcherServlet繼承關系

各個Servlet的作用:

  1. HttpServletBean

主要做一些初始化的工作,將web.xml中配置的參數(shù)設置到Servlet中。比如servlet標簽的子標簽init-param標簽中配置的參數(shù)。

  1. FrameworkServlet

將Servlet與Spring容器上下文關聯(lián)。其實也就是初始化FrameworkServlet的屬性webApplicationContext,這個屬性代表SpringMVC上下文,它有個父類上下文,既web.xml中配置的ContextLoaderListener監(jiān)聽器初始化的容器上下文。

  1. DispatcherServlet

初始化各個功能的實現(xiàn)類。比如異常處理、視圖處理、請求映射處理等。

在分析DispatcherServlet處理請求過程之前,我們回顧一下Servlet對于請求的處理。

HttpServlet提供了service方法用于處理請求,service使用了模板設計模式,在內(nèi)部對于http get方法會調用doGet方法,http post方法調用doPost方法...........


Paste_Image.png

進入processRequest方法看下:




其中注冊的監(jiān)聽器類型為ApplicationListener接口類型。

doDispatch方法功能簡單描述一下:

首先根據(jù)請求的路徑找到HandlerMethod(帶有Method反射屬性,也就是對應Controller中的方法),然后匹配路徑對應的攔截器,有了HandlerMethod和攔截器構造個HandlerExecutionChain對象。HandlerExecutionChain對象的獲取是通過HandlerMapping接口提供的方法中得到。有了HandlerExecutionChain之后,通過HandlerAdapter對象進行處理得到ModelAndView對象,HandlerMethod內(nèi)部handle的時候,使用各種HandlerMethodArgumentResolver實現(xiàn)類處理HandlerMethod的參數(shù),使用各種HandlerMethodReturnValueHandler實現(xiàn)類處理返回值。 最終返回值被處理成ModelAndView對象,這期間發(fā)生的異常會被HandlerExceptionResolver接口實現(xiàn)類進行處理。

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容