Spring mvc ViewResolver视图解析器实现机制
来源:互联网 发布:java获得项目绝对路径 编辑:程序博客网 时间:2024/05/24 01:56
概要
我们在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 是否为true,如果为true,则加载当前系统中所有实现了ViewResolver接口的bean。
- 如果为false,则加载bean名称为“viewResolver”的ViewResolver实现类。
- 如果还没有找到ViewResolver,则加载SpvingMVC 配置文件中,默认配置的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() 处理页面跳转
- exposeModelAsRequestAttributes() 把ModelAndView中存放的对象,添加到request中
- 根据响应的资源获取Servlet中的RequestDispatcher对象
- 调用RequestDispatcher的 include 或forward 方法进行响应结果。
本人简书blog地址:http://www.jianshu.com/u/1f0067e24ff8
点击这里快速进入简书
GIT地址:http://git.oschina.net/brucekankan/
点击这里快速进入GIT
- Spring mvc ViewResolver视图解析器实现机制
- Spring MVC 视图解析器(ViewResolver )
- Spring MVC 视图解析器(ViewResolver )
- Spring MVC 视图解析器(ViewResolver )
- Spring MVC 4之ViewResolver视图解析器
- Spring MVC 4之ViewResolver视图解析器
- Spring web MVC 框架之 视图解析器(ViewResolver)
- 详解Spring MVC 4之ViewResolver视图解析器
- 详解Spring MVC 4之ViewResolver视图解析器
- Spring Web MVC 多viewResolver视图解析器解决方案
- Spring MVC中的视图解析ViewResolver
- Spring MVC中的视图解析ViewResolver
- Spring MVC中的视图解析ViewResolver
- Spring MVC中的视图解析ViewResolver
- Spring MVC中的视图解析ViewResolver
- Spring MVC中的视图解析ViewResolver
- Spring MVC中的视图解析ViewResolver
- 视图解析器ViewResolver
- SVG中stroke-dasharray及stroke-dashoffset属性
- Python小练习
- 心塞的电路实践
- -要成为精力的管理者,而不是时间的管理者
- Codeforces Round #443 (Div. 2)
- Spring mvc ViewResolver视图解析器实现机制
- 快速生成 markdown 表格:针对文件列表和文件大小
- js小球碰撞反弹
- 欢迎使用CSDN-markdown编辑器
- JAVA 23种设计模式
- 大型3D九界一键端+视频教程
- CAS操作实现并发的优势、以及实现一个无锁队列、怎样解决ABA 问题
- Spring mvc HTTP协议之缓存机制
- Spirng4-快速入门之Bean的生命周期