概要

我们在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操作。

  1. 判断 detectAllViewResolvers 是否为true,如果为true,则加载当前系统中所有实现了ViewResolver接口的bean。
  2. 如果为false,则加载bean名称为“viewResolver”的ViewResolver实现类。
  3. 如果还没有找到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() 处理页面跳转

  1. exposeModelAsRequestAttributes() 把ModelAndView中存放的对象,添加到request中
  2. 根据响应的资源获取Servlet中的RequestDispatcher对象
  3. 调用RequestDispatcher的 include 或forward 方法进行响应结果。

想了解更多精彩内容请关注我的公众号

本人简书blog地址:http://www.jianshu.com/u/1f0067e24ff8    
点击这里快速进入简书

GIT地址:http://git.oschina.net/brucekankan/
点击这里快速进入GIT

Spring mvc ViewResolver视图解析器实现机制相关推荐

  1. Restful 风格开发 Spring MVC 的视图解析器---使用 beetl 模板引擎

    一.restful 风格 restful 的目的 将用户的行为当成是对数据库中记录的操作: 增加用户:/user post(post方式) 删除用户:/user/2 delete(删除第2条记录) 修 ...

  2. 详解Spring MVC 4之ViewResolver视图解析器

    所有的We MVC框架都有一套它自己的解析视图的机制,Spring MVC也不例外,它使用ViewResolver进行视图解析,让用户在浏览器中渲染模型.ViewResolver是一种开箱即用的技术, ...

  3. spring多个视图解析器_在Spring中配置多个View解析器

    spring多个视图解析器 1.简介 在Spring中,提供了View Resolver来使用模型中可用的数据来解析视图,而无需与JSP,Velocity或Thymeleaf等View技术紧密绑定. ...

  4. 几种常见的ViewResolver视图解析器

    1.几种常见的ViewResolver视图解析器 在Spring MVC 4控制器中,所有的处理方法必须返回一个逻辑视图名称,无论是显式的(返回String,View或ModelAndView)还是隐 ...

  5. Spring Boot配置视图解析器

    2019独角兽企业重金招聘Python工程师标准>>> 在SpringBoot中,视图解析器的配置可以参考 Spring Boot数据源配置 #方式一:直接在属性文件中,加入 spr ...

  6. 学习SpringMVC——说说视图解析器

    各位前排的,后排的,都不要走,咱趁热打铁,就这一股劲我们今天来说说spring mvc的视图解析器(不要抢,都有位子~~~) 相信大家在昨天那篇如何获取请求参数篇中都已经领略到了spring mvc注 ...

  7. java 视图解析器_SpringMVC——视图和视图解析器

    请求处理方法执行完成后,最终返回一个 ModelAndView对象.对于那些返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个Mode ...

  8. Spring5利用视图解析器生成Excel文件

    介绍 请求处理方法执行完成后,最终返回一个ModelAndView对象.对于那些返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个 M ...

  9. 开发 Spring 自定义视图和视图解析器

    Spring 视图和视图解析器简介 什么是 Spring 视图和视图解析器 Spring MVC(Model View Controller)是 Spring 中一个重要的组成部分,而 Spring ...

最新文章

  1. Node.js实现本地客户端上传单个或者多个文件Excel文件(xls格式、xlsx格式文件)到服务器端,并且解析对应的Excel内容反馈到请求报文中
  2. Linux下的Memcache安装(含libevent的安装)
  3. 给你两个经纬度,计算他们之间的距离
  4. 有关fwrite语句的用法
  5. SQL取最大值编码(自动编码)
  6. linux log是什么意思,大家来帮我看看这个LOG是什么意思 英文不好看不懂
  7. 一个家庭女人太强势,这个家庭会怎样?
  8. 模板建网站-开源工具
  9. python数字右对齐_python用format把float、int等数字字符串化设置左对齐右对齐居中对齐,宽度,保留几位...
  10. 分析oracle索引空间使用情况,以及索引是否须要重建
  11. minecraftjava版光追_《我的世界》加入光追,“马赛克”游戏真有必要这样做?...
  12. 雷达威力图绘制matlab,用Matlab语言实现雷达探测范围图的绘制
  13. w ndows7旗舰版网卡驱动,Win7网卡驱动64位离线安装包 免费版
  14. Echart 四象限图
  15. 天行健---宇宙的生与死
  16. 在html中加入网址,网页超链接怎么做,添加超链接网址的的详细步骤
  17. 南京:探索实施“电子围栏”管理新模式 缓解商圈周边道路交通拥堵
  18. Mock.mock()生成模拟数据
  19. 浅谈一下在阿里工作的前端性能优化的全链路经验
  20. Spring 测试(第一部分)

热门文章

  1. java枚举可以int值不_java – 如何通过int值迭代枚举?
  2. 学习视觉和语言的多粒度对齐?字节提出新多模态预训练方法 X-VLM:代码已开源!...
  3. 漫谈度量学习(Distance Metric Learning)那些事儿
  4. IET Cyber-Systems Robotics线上研讨会:聚焦人工智能与机器人前沿
  5. 实用教程:如何制作学术会议Oral/Spotlight Video?
  6. 公开课 | 如何轻松上手华为最新开源框架MindSpore?
  7. 微软最新论文解读 | 基于预训练自然语言生成的文本摘要方法
  8. 直播实录 | 哈工大博士生周青宇:从编码器与解码器端改进生成式句子摘要
  9. 【Linux环境部署】最新版 elasticsearch + kibana(7.15.0)安装、配置、启动(多个问题处理 + kibana仪表盘使用)
  10. java.lang.IllegalStateException: PathVariable/RequestParam annotation was empty on param 0.