SpringMVC-视图

SpringMVC中的视图实现了View接口,作用是渲染数据,将Model中的数据展示给用户。render是渲染方法,可以看到渲染的视图是一个View类型的对象。在这里插入图片描述
SpringMVC视图的种类有很多,默认有转发视图和重定向视图。
如果配置了Thymeleaf视图解析器,那么由此视图解析器解析得到的就是ThymeleafView。

1. ThymeleafView

当控制器方法中设置的视图名称没有任何前缀时,并且配置了Thymeleaf视图解析器,那么这个视图名称就会被Thymeleaf视图解析器解析,得到的就是ThymeleafView。
首先在ModelAndView对象返回的地方打断点。所有控制器方法执行时都会执行doDispatch方法。
在这里插入图片描述
图中画横线的方法就是处理mv对象的方法,进入该方法。
在这里插入图片描述
render方法就是渲染视图的方法,在这个方法里面会得到渲染的视图。我们可以看到这个视图的类型是ThymeleafView。
在这里插入图片描述

2. 转发视图

SpringMVC中默认的转发视图是InternalResourceView。
当控制器方法中设置的视图名称以"forward:"为前缀时,会创建InternalResoueceView视图,此时视图名称不会被配置文件中的视图解析器解析,而是去掉前缀后,通过转发实现跳转。

    @RequestMapping("/testForward")
    public String testForward(){
   
        //转发给首页
        //这个过程会有两次视图解析过程
        //第一次是完成转发
        //第二次是解析首页
        return "forward:/";
    }

在这里插入图片描述

3. 重定向视图

SpringMVC中默认的重定向视图为RedirectView。
当控制器方法设置视图名称的前缀为"redirect:"时,会创建RedirectView视图。此时视图名称不会被配置文件中的视图解析器解析,而是去掉前缀后,通过重定向实现跳转。

    @RequestMapping("/testRedirect")
    public String testRedirect(){
   
        return "redirect:/";
    }

注意:重定向路径与前端或是Servlet原生API中不同,在控制器方法中设置重定向路径,会自动为绝对路径加上上下文路径。解析相对路径时,仍旧是在当前URL的基础上进行跳转。
在这里插入图片描述

4. 视图控制器

    <!--如果控制器方法中除了完整页面跳转外没有其他任何逻辑代码
    那么就可以通过配置的方法来完成视图解析
    例如实现主页的跳转
    path相当于@RequestMapping注解的value属性
    view-name相当于返回的视图名称,这个属性可能会报红,但是不影响运行,不用管-->
    <mvc:view-controller path="/" view-name="index"></mvc:view-controller>

    <!--配置了视图控制器后会使控制器中的所有请求映射都失效,可以通过开启注解驱动来解决这个问题-->
    <mvc:annotation-driven />

在这里插入图片描述
在这里插入图片描述
开启了注解驱动后:
在这里插入图片描述

5. jsp视图解析

jsp视图需要使用InternalResourceViewResolver解析。
当配置InternalResourceViewResolver解析器后,除了重定向外,所有的视图渲染结果都为InternalResourceView。

    <bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
        <property name="prefix" value="/WEB-INF/templates/" />
        <property name="suffix" value=".jsp" />
    </bean>
<%--
  Created by IntelliJ IDEA.
  User: 14498
  Date: 2024/1/4
  Time: 16:45
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<h1>首页</h1>
<!--jsp获得上下文路径-->
<a href="${pageContext.request.contextPath}/test">跳转test</a>
</body>
</html>

在这里插入图片描述
在这里插入图片描述

相关推荐

  1. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-01-05 12:10:04      42 阅读
  2. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-01-05 12:10:04      34 阅读
  3. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-01-05 12:10:04      34 阅读
  4. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-01-05 12:10:04      35 阅读
  5. <span style='color:red;'>springMVC</span>

    springMVC

    2024-01-05 12:10:04      27 阅读
  6. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-01-05 12:10:04      19 阅读
  7. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-01-05 12:10:04      27 阅读
  8. <span style='color:red;'>SpringMVC</span>

    SpringMVC

    2024-01-05 12:10:04      17 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-01-05 12:10:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-01-05 12:10:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-01-05 12:10:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-01-05 12:10:04       20 阅读

热门阅读

  1. Spring MVC之Handler的四种类型

    2024-01-05 12:10:04       44 阅读
  2. pytorch中的wheel文件

    2024-01-05 12:10:04       27 阅读
  3. C语言——!(--x)和!(-x)以及while(!(--x)) 和 while(!(-x))

    2024-01-05 12:10:04       29 阅读
  4. 什么是软件测评?

    2024-01-05 12:10:04       38 阅读
  5. vue2和vue3 部署打包到线上子目录的区别

    2024-01-05 12:10:04       37 阅读
  6. 50、Flink的单元测试介绍及示例

    2024-01-05 12:10:04       32 阅读
  7. flutter 项目安卓开启混淆防止渗透

    2024-01-05 12:10:04       38 阅读
  8. LN和BN

    LN和BN

    2024-01-05 12:10:04      30 阅读
  9. cnn lstm结合网络

    2024-01-05 12:10:04       42 阅读
  10. uniapp vue 前端页面半小时选择器

    2024-01-05 12:10:04       32 阅读
  11. 项目管理的细节-平衡

    2024-01-05 12:10:04       35 阅读
  12. 哈希查找【数据结构】

    2024-01-05 12:10:04       34 阅读