咱們在controller裏面常常這樣return一個ModelAndView。java
return new ModelAndView("userList", "users", userList);
DispatcherServlet 靠 ViewResolver 把 userList 解析爲 /WEB-INF/jsp/userList.jspweb
經常使用的ViewResolver:InternalResourceViewResolverspring
<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"> <property name="prefix" value="/WEB-INF/jsp" /> <property name="suffix" value=".jsp" /> </bean>
繼續上一篇Spring mvc DispatchServlet 實現機制 初始化DispatchServlet的時候,執行了初始化ViewResolver操做。緩存
detectAllHandlerMappings 默認爲true,若是隻想加載本身指定的HandlerMapping,請使用下面的方式指定mvc
若是這樣指定,則Spring MVC 只會加載這個ViewResolver,而不會加載配置的其它的ViewResolver。app
當處理完成Controller的邏輯後,須要給請求用戶一個響應反饋,通常都是返回一個響應的一個頁面。
DispatcherServlet執行完Controller的邏輯後會調用render() 方法進行處理視圖的跳轉工做。jsp
查找合適的ViewResolver來獲取View。ui
而後調用AbstractCachingViewResolver.java的resolveViewName() 方法spa
UrlBasedViewResolver.java.net
在這裏咱們能夠看到,填充View對象中的Url屬性時,自動加上配置中ViewResolver的前綴和後綴,拼裝成一個完整的Url串。