Spring的视图解析

一、springmvc如何解析视图

  1. 不论处理器方法返回一个String、ModelAndView还是View,Sping MVC 都会在内部将他们转换成一个ModelAndView对象,由视图解析器解析视图,然后,进行页面的跳转.
  2. Spring MVC借助视图解析器(ViewResolver)得到的最终视图对象(View),最终的视图可以是Html、jsp、Excel、JFreeChart等的各种表现形式的视图。
  3. 对于最终究竟采取何种视图对象对模型数据进行渲染,处理器并不关心,处理器工作重点聚焦在生产模型数据的工作上,从而实现 MVC 的充分解耦。

在这里插入图片描述

二、视图解析器

  1. 视图解析器的作用比较单一:将逻辑视图解析为一个具体的视图对象。
  2. 所有的视图解析器都必须实现 ViewResolver 接口
  3. 可以在 SpringMVC 上下文中配置一种或多种解析器,每个视图解析器都实现了 Ordered 接口并开放出一个 order 属性,可以通过 order 属性指定解析器的优先顺序,order 越小优先级越高。
  4. SpringMVC 会按视图解析器顺序的优先顺序对逻辑视图名进行解析,直到解析成功并返回视图对象,否则将抛出 ServletException 异常。
    在这里插入图片描述

三、视图

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

四、mvc:view-controller标签

如果希望不通过处理器的方法直接响应SpringMVC渲染的页面,则可以使用 mvc:view-controller 标签实现。

1)在SpringMVC的配置文件中配置mvc:view-controller标签

<!--配置不经过处理器方法直接响应的页面-->
<mvc:view-controller path="/testViewController" view-name="success"></mvc:view-controller>

2)配置了以上标签之后会导致其他请求路径都失效,还需要配置以下标签(后面的内容再讲述具体原因),而且在实际的开发中我们也都要配置以下标签。

<mvc:annotation-driven></mvc:annotation-driven>

五、重定向与请求转发

  1. 一般情况下,处理器方法返回字符串类型的值会被当成逻辑视图名处理。如果返回的字符串中带 forward: 或 redirect: 前缀时,SpringMVC 会对他们进行特殊处理:将 forward: 和 redirect: 当成指示符,其后的字符串作为 URL 来处理。
  • redirect:/prefix_test.html:会完成一个到 prefix_test.html 的重定向的操作。
  • forward:/prefix_test.html:会完成一个到 prefix_test.html 的转发操作。

这样直接写会报错、下面介绍处理静态资源中会解决

@RequestMapping("/testRedirect")
    public String testRedirect(){
        System.out.println("测试重定向");
//        return "forward:/prefix_test.html"; //转发到prefix_test.html页面
        return "redirect:/prefix_test.html"; //重定向到prefix_test.html页面
    }

六、处理静态资源

  1. 直接手动转发或重定向到html页面时会出现404。
  2. 原因是请求静态资源html文件的请求被DispacherServlet拦截,但是没有找到映射该请求的处理方法,但是请求静态资源本来就不需要创建处理请求的方法,所以我们需要在SpringMVC的配置文件中添加如下配置:
<!--配置处理静态资源-->
<mvc:default-servlet-handler></mvc:default-servlet-handler>

<!--配置了处理静态资源之后也需要配置以下标签-->
<mvc:annotation-driven></mvc:annotation-driven>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值