6、SpringMVC之视图

发布时间 2023-10-15 23:57:15作者: Javaer1995

注意:本文环境搭建请参考5.2节

6.1、视图概述

  • 视图的作用是渲染数据,将模型Model中的数据展示给用户;

  • SpringMVC视图的种类很多,默认有转发视图和重定向视图;

  • SpringMVC中的视图是View接口;

  • 当工程引入jstl的依赖,转发视图会自动转换为JstlView;

  • 若使用的视图技术为Thymeleaf,在SpringMVC的配置文件中配置了Thymeleaf的视图解析器,
    由此视图解析器解析之后所得到的是ThymeleafView。

6.2、ThymeleafView(常用)

  • 当控制器方法中所设置的视图名称没有任何前缀时,视图名称会被SpringMVC配置文件中所配置的视图解析器解析;

  • 视图名称拼接视图前缀和视图后缀所得到的最终路径,会通过转发的方式实现跳转。

6.2.1、控制器方法示例

image

注意:此时SpringMVC配置文件中所配置的视图解析器为ThymeleafViewResolver

    @RequestMapping("/test/view/thymeleaf")
    public String testThymeleafView(){
        return "success";
    }

6.2.2、页面请求示例

image

<a th:href="@{/test/view/thymeleaf}">测试SpringMVC的视图ThymeleafView</a>

6.2.3、测试效果

image

image

由浏览器地址栏可知,ThymeleafView本质上是转发视图

6.3、InternalResourceView(少用)

  • SpringMVC中默认的转发视图是InternalResourceView;

  • 当控制器方法中所设置的视图名称以"forward:"为前缀时,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,
    而是会将前缀"forward:"去掉,剩余部分作为最终路径,通过转发的方式实现跳转

6.3.1、控制器方法示例

image

注意:因为DispatcherServlet接管了所有请求,所以此时请求转发不能直接返回物理视图,但可以调用其他请求

    @RequestMapping("/test/view/forward")
    public String testInternalResourceView(){
        return "forward:/test/view/thymeleaf";
    }

6.3.2、页面请求示例

image

<a th:href="@{/test/view/forward}">测试SpringMVC的视图InternalResourceView</a>

6.3.3、测试效果

image

image

6.4、重定向视图

  • SpringMVC中默认的重定向视图是RedirectView;

  • 当控制器方法中所设置的视图名称以"redirect:"为前缀时,此时的视图名称不会被SpringMVC配置文件中所配置的视图解析器解析,
    而是会将前缀"redirect:"去掉,剩余部分作为最终路径,通过重定向的方式实现跳转

6.4.1、控制器方法示例

image

注意:因为DispatcherServlet接管了所有请求,所以此时重定向不能直接返回物理视图,但可以调用其他请求

    @RequestMapping("/test/view/redirect")
    public String testRedirectView(){
        return "redirect:/test/view/thymeleaf";
    }

6.4.2、页面请求示例

image

<a th:href="@{/test/view/redirect}">测试SpringMVC的视图RedirectView</a>

6.4.3、测试效果

image

image

注意:浏览器地址栏显示为重定向的地址

6.5、请求转发和重定向的使用情景

  • 请求转发:失败时使用,例如登录失败用请求转发

  • 重定向:成功时使用,例如登录成功用重定向

6.6、视图控制器

当控制器方法仅仅用来实现页面跳转(即只需要设置视图名称时),可以使用视图控制器来替代其功能

6.6.1、要被替代的控制器方法示例

image

6.6.2、视图控制器示例

image

注意:如果设置了视图控制器,则只有视图控制器所指定的请求路径会被处理,其他请求将全部404;
为了让其他请求也能得到(控制器方法)处理,需要开启mvc的注解驱动

    <!--开启mvc的注解驱动-->
    <mvc:annotation-driven></mvc:annotation-driven>

    <!--
        视图控制器(mvc:view-controller):为指定的请求直接设置(逻辑)视图名称,从而实现页面的跳转
        path属性:设置要处理的请求路径
        view-name属性:设置要跳转到的逻辑视图
    -->
    <mvc:view-controller path="/" view-name="index"></mvc:view-controller>