InternalResourceViewResolver請求流程

當用戶對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,進入InternalResourceViewrenderMergedOutputModel方法,

上面紅框代碼可知該響應爲request轉發。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章