视图和视图解析器
Spring MVC 解析视图
- 无论我们返回的是String、还是ModelAndView还是View,SpringMVC都会给他装配成一个ModelandView
- Spring MVC 借助视图解析器(ViewResolver)得到最终
的视图对象(View),然后用view.render方法得到结果
最终的视图可以是 JSP ,也可能是
Excel、JFreeChart 等各种表现形式的视图
不同的视图对应不同的视图解析器
视图View
-
视图的作用是渲染模型数据,将模型里的数据以某种形式呈现给客户。
-
Spring 在org.springframework.web.servlet 包中定义了一个高度抽象的 View接口:
-
视图对象由视图解析器负责实例化。 且视图是无状态的,因为每一个请求都会创建一个新的视图对象,因此不存在线程安全问题
-
常用的视图实现类
InternalResourceView
InternalResourceView将JSP或其他资源封装成一个视图,是nternalResourceViewResolver默认使用的视图实现类
InternalResourceView主要是搞通过转发的那个结果
JstlView
若项目中使用了 JSTL,则 SpringMVC 会自动把视图由
InternalResourceView 转为 JstlView
若使用 JSTL 的 fmt 标签则需要在 SpringMVC 的配置文件中配置国际化资源文件
视图解析器
-
视图解析器的作用比较单一:将逻辑视图解析为一个具体
的视图对象。即逻辑视图转为物理视图 -
所有的视图解析器都必须实现 ViewResolver 接口
-
常用的视图解析器实现类
视图解析器优先级
每个视图解析器都实现了 Ordered 接口并开放出一个 order 属性,可以通过 order 属性指定解析器的优先顺序,order 越小优先级越高。
SpringMVC 会按视图解析器顺序的优先顺序对逻辑视图名进行解
析,直到解析成功并返回视图对象,否则将抛出 ServletException 异
常
InternalResourceViewResolver
JSP 是最常见的视图技术,可以使用
InternalResourceViewResolver 作为视图解析器
InternalResourceViewResolver 就是解析InternalResourceView的
无需经过handler 直接转发到页面
若希望直接响应通过 SpringMVC 渲染的页面,可以使用 mvc:viewcontroller 标签实现
<!-- 配置直接转发的页面 -->
<!-- 可以直接相应转发的页面, 而无需再经过 Handler 的方法. -->
<mvc:view-controller path="/success" view-name="success"/>
<!-- 在实际开发中通常都需配置 mvc:annotation-driven 标签 -->
<mvc:annotation-driven></mvc:annotation-driven>