咱们在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串。