當用戶對SpringMVC應用程序發起請求時,這些請求都會被 DispatcherServle t處理,通過處理器找到最爲合適的 HandlerMapping定義的請求映射中最爲合適的映射,然後通過HandlerMapping找到相對應的Handler,然後再通過相對應的 HandlerAdapter 處理該Handler。返回結果是一個ModelAndView對象,當該ModelAndView對象中不包含真正的視圖,而是一個邏輯視圖路徑的時候,InternalResourceViewResolver就會把該邏輯視圖路徑解析爲真正的View視圖對象,然後通過View的渲染,將最終結果返回給用戶。
我們通過在Spring配置文件中配置如下代碼使用InternalResourceViewResolver
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"
p:prefix="/WEB-INF/view/" p:suffix=".jsp"></bean>
視圖解釋器將邏輯視圖轉換爲物理視圖:將handler方法(如UserInfoController中的do方法)返回值解析爲實際的物理視圖,InternalResourceViewResolver視圖解析器將handler方法返回值解析爲"prefix+返回值+suffix"物理視圖,並做請求轉發操作
當發起請求時到達 DispatcherServlet 類裏的 doService()
在向request裏放如衆多信息之後執行DispatcherServlet 類 的doDispatch()方法
在第一個方框中,ha是一個HandlerAdapter,該方法調用目標方法,返回一個ModelAndView對象,無論目標方法返回String類型、ModelMap類型、ModelAndView類型還是View類型,SpringMVC都會轉化成一個ModelAndView類型對象。
在第二個方框中,代碼用於處理視圖,進入該方法
在第一個方框中 如果出現異常,則進入異常映射。
在第二方框中,該方法用於渲染視圖
在第一個方框中,View是一個接口,在方框中定義的是一個抽象類。而在改行代碼下,則是依次按情況對view賦值。
在第二個方框中,執行該代碼,通過解析ViewName(視圖名)得到視圖。
在第三個方框中,該方法用於真正地渲染視圖。鼠標點擊該行代碼,點擊Ctrl+t,選擇AbstractView,進入AbstractView抽象類的render方法
在執行上述紅框中,該方法用於合併結果和模型,依舊鼠標點擊該行代碼,點擊Ctrl+t,選擇InternalResourceView,進入InternalResourceView類renderMergedOutputModel方法,
上面紅框代碼可知該響應爲request轉發。