视图解析
SpringMVC视图解析
1、方法执行后的返回值会作为页面地址参考,转发或者重定向到页面
2、视图解析器可能会进行页面地址的拼串;
1、任何方法的返回值,最终都会被包装成ModelAndView对象
2、processDispatchResult(processedRequest, response, mappedHandler, mv, dispatchException);来到页面的方法
视图渲染流程:将域中的数据在页面展示;页面就是用来渲染模型数据的;
3、调用render(mv, request, response);渲染页面
4、View与ViewResolver;
ViewResolver的作用是根据视图名(方法的返回值)得到View对象;
5、怎么能根据方法的返回值(视图名)得到View对象?
protected View resolveViewName(String viewName, Map<String, Object> model, Locale locale,
HttpServletRequest request) throws Exception {
//遍历所有的ViewResolver;
for (ViewResolver viewResolver : this.viewResolvers) {
//viewResolver视图解析器根据方法的返回值,得到一个View对象;
View view = viewResolver.resolveViewName(viewName, locale);
if (view != null) {
return view;
}
}
return null;
}
resolveViewName实现
返回View对象;
1、视图解析器得到View对象的流程就是,所有配置的视图解析器都来尝试根据视图名(返回值)得到View(视图)对象;如果能得到就返回,得不到就换下一个视图解析器;
2、调用View对象的render方法;
InternalResourceView有这个方法renderMergedOutputModel;
将模型中的所有数据取出来全放在request域中
一句话:
视图解析器只是为了得到视图对象;视图对象才能真正的转发(将模型数据全部放在请求域中)或者重定向到页面
视图对象才能真正的渲染视图;