SpringMVC 视图解析器

1.SpringMVC如何解析视图概述:
     不论控制器返回一个String,ModelAndView,View,Map都会转换为ModelAndView对象,由视图解析器解析视图,然后,进行页面的跳转。  

2.视图解析器
     请求处理方法执行完成后,最终返回一个 ModelAndView 对象。对于那些返回 String,View 或 ModeMap 等类型的处理方法,Spring MVC 也会在内部将它们装配成一个 ModelAndView 对象,它包含了逻辑名和模型对象的视图 。
     Spring MVC 借助视图解析器(ViewResolver)得到最终的视图对象(View),最终的视图可以是 JSP ,也可能是 Excel、JFreeChart等各种表现形式的视图 。
     对于最终究竟采取何种视图对象对模型数据进行渲染,处理器并不关心,处理器工作重点聚焦在生产模型数据的工作上,从而实现 MVC 的充分解耦 。

3.视图
     视图的作用是渲染模型数据,将模型里的数据以某种形式呈现给客户。
     为了实现视图模型和具体实现技术的解耦,Spring 在 org.springframework.web.servlet 包中定义了一个高度抽象的 View 接口。
     视图对象由视图解析器负责实例化。由于视图是无状态的,所以他们不会有线程安全的问题 。

4.常用视图的实现类


5.视图解析器
     SpringMVC 为逻辑视图名的解析提供了不同的策略,可以在 Spring WEB 上下文中配置一种或多种解析策略,并指定他们之间的先后顺序。每一种映射策略对应一个具体的视图解析器实现类。
     视图解析器的作用比较单一:将逻辑视图解析为一个具体的视图对象。
     所有的视图解析器都必须实现 ViewResolver 接口。

6.常用的视图解析器实现类

     SpringMVC 会按视图解析器顺序的优先顺序对逻辑视图名进行解析,直到解析成功并返回视图对象,否则将抛出 ServletException 异常     程序员可以选择一种视图解析器或混用多种视图解析器 ,
每个视图解析器都实现了 Ordered 接口并开放出一个 order 属性,可以通过 order 属性指定解析器的优先顺序,order  越小优先级越高。
     InternalResourceViewResolver : JSP 是最常见的视图技术,可以使用 InternalResourceViewResolve作为视图解析器:

7 .mvc:view-controller标签
     对应WEB-INF目录下面的JSP页面,我们知道是不能直接使用URL访问到。需要通过转发的方式,而我们一般都是在控制器中做转发映射,对应一些我们不需要其他操作的JSP页面,我们可以使用<mvc:view-controller path=""/>来配置,这样就可以不用再控制器中再去做转发映射。
     如果想要在请求页面直接去目标页面而不经过核心控制器,只需要在springmvc.xml中做如下配置:
<!-- 直接配置响应的页面:无需经过控制器来执行结果,path是请求视图的名字,view-name 是跳转成功页面的路径-->
<mvc:view-controller path="/success" view-name="success"/>
     配置<mvc:view-controller>会导致其他请求路径失效
<!-- 在实际开发过程中都需要配置mvc:annotation-driven标签。 -->
<mvc:annotation-driven/>
8 .转发和重定向:
     一般情况下,控制器方法返回字符串类型的值会被当成逻辑视图名处理, 如果返回的字符串中带 forward: 或 redirect: 前缀时,SpringMVC 会对他们进行特殊处理:将 forward 和 redirect:当成指示符,其后的字符串作为 URL 来处理
     redirect:success.jsp:会完成一个到 success.jsp 的重定向的操作
     forward:success.jsp:会完成一个到 success.jsp 的转发操作
    ② 定义页面链接
<a href="springmvc/testRedirect">testRedirect</a>
    ③ 定义控制器方法
@RequestMapping("/testRedirect")
public String testRedirect(){
     System.out.println("testRedirect");
     return "redirect:/index.jsp";
     //return "forward:/index.jsp";
}
        通过转发可以直接去 WEB-INF  下的目标页面,而通过重定向是不能直接去目标页面的,因为  WEB-INF 下的内容不能被浏览器端直接访问。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序员学习圈

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值