javascript
Spring mvc ViewResolver视图解析器实现机制
概要
我們在controller里面經常這樣return一個ModelAndView。
return new ModelAndView("userList", "users", userList);DispatcherServlet 靠 ViewResolver 把 userList 解析為 /WEB-INF/jsp/userList.jsp
常用的ViewResolver:InternalResourceViewResolver
ViewResolver配置
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"><property name="prefix" value="/WEB-INF/jsp" /><property name="suffix" value=".jsp" /> </bean>ViewResolver 初始化
繼續上一篇Spring mvc DispatchServlet 實現機制 初始化DispatchServlet的時候,執行了初始化ViewResolver操作。
detectAllViewResolvers 設置
detectAllHandlerMappings 默認為true,如果只想加載自己指定的HandlerMapping,請使用下面的方式指定
如果這樣指定,則Spring MVC 只會加載這個ViewResolver,而不會加載配置的其它的ViewResolver。
解析視圖跳轉頁面
當處理完成Controller的邏輯后,需要給請求用戶一個響應反饋,一般都是返回一個響應的一個頁面。
DispatcherServlet執行完Controller的邏輯后會調用render() 方法進行處理視圖的跳轉工作。
resolveViewName() 方法
查找合適的ViewResolver來獲取View。
然后調用AbstractCachingViewResolver.java的resolveViewName() 方法
1. 首先判斷緩存中是否存在View,如果不存在則調用 createView() 方法創建View
2. 如果有則從緩存中獲取View
createView() 方法
loadView() 方法
UrlBasedViewResolver.java
buildView() 方法
在這里我們可以看到,填充View對象中的Url屬性時,自動加上配置中ViewResolver的前綴和后綴,拼裝成一個完整的Url串。
renderMergedOutputModel() 處理頁面跳轉
想了解更多精彩內容請關注我的公眾號
本人簡書blog地址:http://www.jianshu.com/u/1f0067e24ff8????
點擊這里快速進入簡書
GIT地址:http://git.oschina.net/brucekankan/
點擊這里快速進入GIT
總結
以上是生活随笔為你收集整理的Spring mvc ViewResolver视图解析器实现机制的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Spring mvc HandlerM
- 下一篇: Spring mvc HTTP协议之缓存