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 是否为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视图解析器实现机制相关推荐
- Restful 风格开发 Spring MVC 的视图解析器---使用 beetl 模板引擎
一.restful 风格 restful 的目的 将用户的行为当成是对数据库中记录的操作: 增加用户:/user post(post方式) 删除用户:/user/2 delete(删除第2条记录) 修 ...
- 详解Spring MVC 4之ViewResolver视图解析器
所有的We MVC框架都有一套它自己的解析视图的机制,Spring MVC也不例外,它使用ViewResolver进行视图解析,让用户在浏览器中渲染模型.ViewResolver是一种开箱即用的技术, ...
- spring多个视图解析器_在Spring中配置多个View解析器
spring多个视图解析器 1.简介 在Spring中,提供了View Resolver来使用模型中可用的数据来解析视图,而无需与JSP,Velocity或Thymeleaf等View技术紧密绑定. ...
- 几种常见的ViewResolver视图解析器
1.几种常见的ViewResolver视图解析器 在Spring MVC 4控制器中,所有的处理方法必须返回一个逻辑视图名称,无论是显式的(返回String,View或ModelAndView)还是隐 ...
- Spring Boot配置视图解析器
2019独角兽企业重金招聘Python工程师标准>>> 在SpringBoot中,视图解析器的配置可以参考 Spring Boot数据源配置 #方式一:直接在属性文件中,加入 spr ...
- 学习SpringMVC——说说视图解析器
各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请求参数篇中都已经领略到了spring mvc注 ...
- java 视图解析器_SpringMVC——视图和视图解析器
请求处理方法执行完成后,最终返回一个 ModelAndView对象.对于那些返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个Mode ...
- Spring5利用视图解析器生成Excel文件
介绍 请求处理方法执行完成后,最终返回一个ModelAndView对象.对于那些返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个 M ...
- 开发 Spring 自定义视图和视图解析器
Spring 视图和视图解析器简介 什么是 Spring 视图和视图解析器 Spring MVC(Model View Controller)是 Spring 中一个重要的组成部分,而 Spring ...
最新文章
- Node.js实现本地客户端上传单个或者多个文件Excel文件(xls格式、xlsx格式文件)到服务器端,并且解析对应的Excel内容反馈到请求报文中
- Linux下的Memcache安装(含libevent的安装)
- 给你两个经纬度,计算他们之间的距离
- 有关fwrite语句的用法
- SQL取最大值编码(自动编码)
- linux log是什么意思,大家来帮我看看这个LOG是什么意思 英文不好看不懂
- 一个家庭女人太强势,这个家庭会怎样?
- 模板建网站-开源工具
- python数字右对齐_python用format把float、int等数字字符串化设置左对齐右对齐居中对齐,宽度,保留几位...
- 分析oracle索引空间使用情况,以及索引是否须要重建
- minecraftjava版光追_《我的世界》加入光追,“马赛克”游戏真有必要这样做?...
- 雷达威力图绘制matlab,用Matlab语言实现雷达探测范围图的绘制
- w ndows7旗舰版网卡驱动,Win7网卡驱动64位离线安装包 免费版
- Echart 四象限图
- 天行健---宇宙的生与死
- 在html中加入网址,网页超链接怎么做,添加超链接网址的的详细步骤
- 南京:探索实施“电子围栏”管理新模式 缓解商圈周边道路交通拥堵
- Mock.mock()生成模拟数据
- 浅谈一下在阿里工作的前端性能优化的全链路经验
- Spring 测试(第一部分)
热门文章
- java枚举可以int值不_java – 如何通过int值迭代枚举?
- 学习视觉和语言的多粒度对齐?字节提出新多模态预训练方法 X-VLM:代码已开源!...
- 漫谈度量学习(Distance Metric Learning)那些事儿
- IET Cyber-Systems Robotics线上研讨会:聚焦人工智能与机器人前沿
- 实用教程:如何制作学术会议Oral/Spotlight Video?
- 公开课 | 如何轻松上手华为最新开源框架MindSpore?
- 微软最新论文解读 | 基于预训练自然语言生成的文本摘要方法
- 直播实录 | 哈工大博士生周青宇:从编码器与解码器端改进生成式句子摘要
- 【Linux环境部署】最新版 elasticsearch + kibana(7.15.0)安装、配置、启动(多个问题处理 + kibana仪表盘使用)
- java.lang.IllegalStateException: PathVariable/RequestParam annotation was empty on param 0.