SpringMVC運行時序圖
SpringMVC工作機制
1.ApplicationContext初始化時用Map保存所有的url和controller對應關係。
2.根據請求URL找到對應的controller,並從controller中找到對應的請求方法。
3.Request參數綁定到方法的形參,執行方法處理請求,並返回結果視圖。
初始化階段
在DispatcherServlet的父類HttpServletBean中可以找到初始化的init()方法,在init()方法中又會調用FrameworkServlet類的initServletBean()方法,最終會調用refresh()方法,這部分代碼最主要的邏輯是初始化IOC容器。
IOC容器初始化完成之後會調用DispatcherServlet類的onRefresh()方法,完成SpringMVC九大組件的初始化
URL和controller建立關係
HandlerMapping的子類AbstractDetectingUrlHandlerMapping實現了initApplicationContext()方法,該方法的作用是通過獲得ApplicationContext對象,得到該容器中所有的beanName,在對beanNames進行遍歷得到bean上的URL,並由registerHandler方法進行註冊。
運行調用階段
當我們從瀏覽器端發出請求時,入口爲DispatcherServlet的核心方法doService(),其中核心邏輯有doDispatch()實現。在doDispatch()方法中調用getHandler方法取得當前請求的controller,getHandler()方法會把request請求包裝成HandlerExecutionChain對象。然後由HandlerExecutionChain對象進行後續操作,最終結果是返回ModelAndView視圖。