【 Spring MVC 核心功能(三) - 输出数据】

引言

通过上⾯的学习我们知道,默认请求下⽆论是 Spring MVC 或者是 Spring Boot 返回的是视图
(xxx.html),⽽现在都是前后端分离的,后端只需要返给给前端数据即可,这个时候我们就需要使⽤ @ResponseBody 注解了

一、返回静态页面

创建前端⻚⾯ index.html

在这里插入图片描述

写入以下代码:

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport"
content="width=device-width, user-scalable=no, initialscale=1.0, maximum-scale=1.0, minimum-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>hello,spring mvc</title>
<script src="index.js"></script>
</head>
<body>
<h1>Hello,Spring MVC.</h1>
</body>
</html>

创建 PersonController 类

@Controller
@RequestMapping("/p")
public class PersonController {
    @RequestMapping("/index")
    public Object index() {
// 执⾏业务...
// 返回view -> index.html
        return "/index.html";
    }
}

在这里插入图片描述

运行结果得:

在这里插入图片描述

二、返回非静态页面的数据

代码实现:

@Controller
@RequestMapping("/p")
public class PersonController {
    @RequestMapping("/meth")
    public String method() {
        return "<h1>Hello,HTML~</h1>";
    }
}

运行结果:

在这里插入图片描述

我们前面提到了,MVC 默认是返回的 html 视图,不能够返回数据,那如何解决该问题呢?

只需加上注解 @ResponseBody 即可返回后端数据,它表示返回非静态页面的数据 如下:

@Controller
@ResponseBody
@RequestMapping("/p")
public class PersonController {
    @RequestMapping("/meth")
    public String method() {
        return "Hello,HTML~";
    }
}

运行效果如下:

在这里插入图片描述

在前面章节也谈到过 @ResponseBody ,我们可以使用@RestController 注解来代替
@ResponseBody 和 @Controller 两个注解

注意:

  1. @ResponseBody 可以修饰类:表示当前类中所有方法都会返回一个非静态页面的数据
  2. @ResponseBody 可以修饰方法:表示当前方法返回的是一个非静态页面的数据
  3. @ResponseBody 返回的值如果是字符会转换成 text/html,如果返回的是对象会转换成
    application/json 返回给前端

三、返回 JSON 对象

首先我们可以手动拼接json格式的字符串,如下:

代码实现:

@RestController
@RequestMapping("/p")
public class PersonController {
    @RequestMapping("/jsonmap")
    public HashMap<String, String> jsonMap() {
        HashMap<String, String> map = new HashMap<>();
        map.put("Java", "Java Value");
        map.put("MySQL", "MySQL Value");
        map.put("Redis", "Redis Value");
        return map;
    }
}

访问页面:

在这里插入图片描述

通过抓包观察:

在这里插入图片描述

当前返回的是 HashMap 对象,所以会以 json 的格式返回给前端

手动构建json字符串容易出错,我们可以使用内置的json库来实现!!!


四、请求转发(forward)和请求重定向(redirect)

return 不但可以返回⼀个视图,还可以实现跳转,跳转的⽅式有两种即请求转发和请求重定向

请求转发和重定向的使⽤对⽐:

在这里插入图片描述

我们分别运行,并访问其页面后观察

  1. 请求转发时
    通过 http://127.0.0.1:8080/p/forward 访问页面,结果如下:
    在这里插入图片描述

  2. 请求重定向时
    通过 http://127.0.0.1:8080/p/redirect 访问页面,结果如下:
    在这里插入图片描述

这时两种情况所得到的的结果是一模一样的,包括跳转页面的 URL。那他们到底有什么本质的区别呢?我们可以通过抓包来寻找答案

  1. 请求转发时
    在这里插入图片描述

此时我们会发现并没有我们发送的 http://127.0.0.1:8080/p/forward 的请求记录,而只有一个 index.html 页面,正是我们跳转的页面

  1. 请求重定向时
    在这里插入图片描述

此时我们发现,当使用 http://127.0.0.1:8080/p/redirect 发送请求时,是先得到了该请求的响应,其中返回了一个重要信息 Location,就是我们要跳转的页面。接着就出现了访问 index.html 的记录,在响应中直接返回了该页面

以上就是他两的本质区别,通俗的讲,如果是请求转发,你向服务器发送了一个页面跳转的请求,而该服务器直接将你要跳转的页面返回给你。如果是请求重定向,你向服务器发送了一个页面跳转的请求,该服务器没有直接发送该页面,而是将这个页面的地址返回给你,让你自己主动对跳转页面发起请求

举个例子:

你告诉你妈妈,你想吃辣条,如果你妈妈,说好,我帮你去买,这就是 forward 请求转发;如果你妈妈让你⾃⼰去买,那么就是请求 redirect 重定向

上述只谈到了请求转发和请求重定向的本质区别,通过大佬笔记学习其他区别 !!


注意: 请求转发如果资源和转发的⻚⾯不在⼀个⽬录下,会导致外部资源不可访问,此时就应该换成请求重定向,如下:

在这里插入图片描述


五、拓展:IDEA 热部署(热加载)

什么是热部署?当你启动程序后,如果修改当前程序代码就需要重新手动启动该程序才会生效,而热部署就是自动帮开发者重启项目程序,当你已经启动程序后再次修改代码,你就可以实时的看到所修改产生的效果了

3.1 添加 SpringBoot DevTools 框架

这一步基本在创建 Boot 项目时就已经完成了,如下:

在这里插入图片描述

3.2 开起 IDEA 的自动编译

此步骤需要设置两个地方,一个当前项目的 Settings 和 新项目的 Settings 如下:
在这里插入图片描述

点击 Settings 后

在这里插入图片描述

新项目中的 Settings 也同样如此

3.3 开起运行中的热部署

在这里插入图片描述

注意: 一定不要点击Restore Defaults !! 讲三遍

在这里插入图片描述

3.4 使用 debug 启动项目

在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值