本篇笔记记录分为两大部分:
第一部分主要记录SpringMVC如何解析、渲染视图并转发返回结果对象,主要是针对源码执行过程的追踪。
第二部分记录一个SpringMVC自定义视图步骤及过程。
本篇笔记主要分析SpringMVC 5.1.1 这个版本。
SpringMVC运行流程
一、Spring MVC 视图解析过程
1. ModelAndView
SpringMVC 内部最终会将返回的参数及视图名字封装成一个 ModelAndView 对象,这个对象包含两个部分:Model 是一个 HashMap 集合,View 一般则是一个 String 类型记录要跳转视图的名字或者是视图对象(当然如果是视图对象的话则直接跳过视图解析器的解析过程了)。
源码内部最终会根据执行 Controller 里面的方法生成的 ModelAndViewContainer 对象创建 ModelAndView 对象。
SpringMVC 内部最终是借助这个 ModelAndView 对象里面的 View 来选取视图解析器,解析出视图,然后将 Model 里面的键值写进 requestScope 里面,最终呈现给客户端渲染后的视图,不懂这的没关系,咱们接着往下看。
2. View & ViewResolver
在开始源码分析之前,我们先来看下两个基本概念,视图和视图解析器。
2.1 视图 View
视图的作用是渲染模型数据,将模型里的数据以某种形式呈现给客户,其实就是 html、jsp 甚至 word、excel 文件;
为了实现视图模型和具体实现技术的解耦,SpringMVC 定义了一个高度抽象的 View 接口 org.springframework.web.servlet.View。
视图对象由视图解析器负责实例化,由于他们是无状态的,所以不存在线程安全的问题。
下面来看下 View 接口实现类都有哪些
顺带说下 IDEA 查看接口实现类的方法
view2.png
我们挑几个常用的了解下
视图
说明
InternalResourceView
将 JSP 或其他资源封装成一个视图,一般 JSP 页面用该视图类
JstlView
继承自InternalRes