导言:同学们有没有想过这样一个问题,就是客户端每次请求之后,Spring MVC是怎么把请求响应成一个视图的?相信很多同学清楚如何使用,却不清楚Spring MVC里面是如何返回视图,那么,今天我们就来探讨一下,Spring MVC 是如何解析客户端请求响应成视图的。

1、什么是Spring MVC?MVC分别代表什么,作用是?

Spring MVC是Spring Framework的一部分,是基于Java实现MVC的轻量级Web框架。

M:model 模型,业务流程,业务逻辑。
V:视图,渲染数据。
C:控制:接收客户端请求,分配任务。

作用:轻量 高效 独立开发,可扩展 可维护 可复用 可测试 -->实现了业务逻辑与数据展示分离,各模块最大限度解耦,独立开发。

2、在解析过程中有一个很重要的角色——视图解析器。视图解析器(ViewResolver)是什么?

在Spring MVC控制器中,所有的客户端请求处理方法(Action)必须解析出一个逻辑视图名称,无论是显式的(返回String,View或ModelAndView)还是隐式的(基于约定的,如视图名就是方法名)。视图解析器的作用是将逻辑视图转为物理视图,所有的视图解析器都必须实现ViewResolver接口。

Spring处理视图最重要的两个接口是ViewResolver和View。ViewResolver接口在视图名称和真正的视图之间提供映射关系; 而View接口则处理请求将真正的视图呈现给用户。

3、SpringMVC的视图解析流程。

1、调用目标方法,SpringMVC将目标方法返回的String、View、ModelMap或是ModelAndView都转换为一个ModelAndView对象;

2、然后通过视图解析器(ViewResolver)对ModelAndView对象中的View对象进行解析,将该逻辑视图View对象解析为一个物理视图View对象;

3、最后调用物理视图View对象的render()方法进行视图渲染,得到响应结果。

4、对于控制器的目标方法,无论其返回值是String、View、ModelMap或是ModelAndView,SpringMVC都会在内部将它们封装为一个ModelAndView对象进行返回。
Spring MVC 借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可以是JSP,HTML也可是Excell、 JFreeChart等各种表现形式的视图。

SpringMVC为逻辑视图名的解析提供了不同的策略,可以在Spring WEB上下文中配置一种或多种解析策略,并指定他们之间的先后顺序。每一种映射策略对应一个具体的视图解析器实现类。程序员可以选择一种视图解析器或混用多种视图解析器。可以通过order属性指定解析器的优先顺序,order越小优先级越高,SpringMVC会按视图解析器顺序的优先顺序对逻辑视图名进行解析,直到解析成功并返回视图对象,否则抛出ServletException异常。

为了实现视图模型和具体实现技术的解耦,Spring在org.springframwork.web.servlet包中定义了一个高度抽象的View接口。

各个视图解析器之间的关系:

4、理解什么是“基于URL” 的视图解析器(重点)。

比如我们的 Controller 中最后的返回的处理代码为: return "index"; 那么“基于URL” 的视图解析器就会将返回值 “index” 作为最后视图的URL的一部分,然后结合上面的配置和,最后得到最终的URL:
"/WEB-INF/jsp/" + "index" + ".jsp" == "/WEB-INF/jsp/index.jsp"

最新文章

  1. 【.NET MF】.NET Micro Framework USB移植
  2. Java - 处理某些图片泛红
  3. js中var 笔记
  4. ASP.NET MVC过滤器(一)
  5. (1)c语言学习总结之从关键字到循环结构
  6. euqals和hashcode
  7. poj 1144 Network
  8. Nginx常用Rewrite伪静态法则
  9. C++ Primer 学习笔记_45_STL实践与分析(19)--建筑常规算法
  10. vs2010中文简体版下载链接(含中文msdn)
  11. mysql2 - 基础
  12. java.lnag.Throwable详细解读
  13. Java之GC
  14. 浅谈TCP IP协议栈(二)IP地址
  15. Tomcat报错invalid LOC header
  16. selenium中切换浏览器不同tab 的操作
  17. 仿照wtform自定义Form组件
  18. 利用xpath爬取招聘网的招聘信息
  19. Python 基于时间的进程通信
  20. 结合canvas和jquery.Jcrop.js裁切图像上传图片

热门文章

  1. django models中的class meta
  2. MyISAM 和 InnoDB
  3. pip 安装超时问题
  4. django 用户认证 user对象
  5. Python - 常用内置变量
  6. 一口气说出 6种,@Transactional注解的失效场景
  7. PostgreSQL查询表以及字段的备注
  8. 动态高度计算 height window.addEventListener('resize', () => {
  9. Python-String字符串操作
  10. Red Team 工具集之网络钓鱼和水坑攻击