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

文章目录

  • 引言
  • 一、返回静态页面
  • 二、返回非静态页面的数据
  • 三、返回 JSON 对象
  • 四、请求转发(forward)和请求重定向(redirect)
  • 五、拓展:IDEA 热部署(热加载)
    • 3.1 添加 SpringBoot DevTools 框架
    • 3.2 开起 IDEA 的自动编译
    • 3.3 开起运行中的热部署
    • 3.4 使用 debug 启动项目

引言

通过上⾯的学习我们知道,默认请求下⽆论是 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 对象

代码实现:

@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 的格式返回给前端


四、请求转发(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 启动项目

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/10064.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】SoftMax多分类---学习笔记

SoftMax---学习笔记softMax分类函数定义&#xff1a;softmax分类损失函数softMax分类函数 首先给一个图&#xff0c;这个图比较清晰地告诉大家softmax是怎么计算的。 (图片来自网络) 定义&#xff1a; 给定以歌nknknk矩阵W(w1,w2,...,wk)W(w_1,w_2,...,w_k)W(w1​,w2​,...,w…

Arcgis小技巧【12】——ArcGIS标注的各种用法和示例

标注是将描述性文本放置在地图中的要素上或要素旁的过程。 本文整理了ArcGIS中的各种标注方法、可能遇到的问题和细节&#xff0c;内容比较杂&#xff0c;想到哪写到哪。 一、正常标注某一字段值的内容 右键点击【属性】&#xff0c;在【标注】选项卡下勾选【标注此图层中的的…

Python 小型项目大全 1~5

一、百吉饼 原文&#xff1a;http://inventwithpython.com/bigbookpython/project1.html 在百吉饼这种演绎逻辑游戏中&#xff0c;你必须根据线索猜出一个秘密的三位数。该游戏提供以下提示之一来响应您的猜测&#xff1a;"Pico"&#xff0c;当您的猜测在错误的位置有…

【SpringMVC】7—文件上传

⭐⭐⭐⭐⭐⭐ Github主页&#x1f449;https://github.com/A-BigTree 笔记链接&#x1f449;https://github.com/A-BigTree/Code_Learning ⭐⭐⭐⭐⭐⭐ 如果可以&#xff0c;麻烦各位看官顺手点个star~&#x1f60a; 如果文章对你有所帮助&#xff0c;可以点赞&#x1f44d;…

布隆过滤器讲解及基于Guava BloomFilter案例

目录 1、布隆过滤器是什么 2、主要作用 3、存储过程 4、查询过程 5、布隆过滤器的删除操作 6、优点 7、缺点 8、测试误判案例 8.1、引入Guava依赖 8.2、编写测试代码 8.3、测试 8.4、BloomFilter实现原理 9、总结 推荐博主视频&#xff0c;讲的很棒&#xff1a;布隆…

华为运动健康服务Health Kit 6.10.0版本新增功能速览!

华为运动健康服务&#xff08;HUAWEI Health Kit&#xff09;6.10.0 版本新增的能力有哪些&#xff1f; 阅读本文寻找答案&#xff0c;一起加入运动健康服务生态大家庭&#xff01; 一、 支持三方应用查询用户测量的连续血糖数据 符合申请Health Kit服务中开发者申请资质要求…

大数据项目之电商数据仓库系统回顾

文章目录一、实训课题二、实训目的三、操作环境四、 实训过程&#xff08;实训内容及主要模块&#xff09;五、实训中用到的课程知识点六、实训中遇到的问题及解决方法七、课程实训体会与心得八、程序清单一、实训课题 大数据项目之电商数据仓库系统 二、实训目的 完成一个电…

7.基于概率距离快速削减法的风光场景生成与削减方法

matlab代码&#xff1a;基于概率距离快速削减法的风光场景生成与削减方法 采用蒙特卡洛进行场景生成&#xff0c;并再次进行场景缩减。 clear;clc; %风电出力预测均值E W[5.8,6.7,5.8,5.1,6.3,5,6.2,6,4.1,6,7,6.8,6.5,6.9,5,5.6,6,5.8,6.2,4.7,3.3,4.4,5.6,5]; %取标准差为风…

在unreal中的基于波叠加的波浪水面材质原理和制作

关于水的渲染模型 如何渲染出真实的水体和模拟&#xff0c;是图形学&#xff0c;游戏开发乃至仿真领域很有意思的一件事 记得小时候玩《Command & Conquer: Red Alert 3》&#xff0c;被当时的水面效果深深震撼&#xff0c;作为一款2008年出的游戏&#xff0c;现在想起它…

算法:将一个数组旋转k步

题目 输入一个数组如 [1,2,3,4,5,6,7]&#xff0c;输出旋转 k 步后的数组。 旋转 1 步&#xff1a;就是把尾部的 7 放在数组头部前面&#xff0c;也就是 [7,1,2,3,4,5,6]旋转 2 步&#xff1a;就是把尾部的 6 放在数组头部前面&#xff0c;也就是 [6,7,1,2,3,4,5]… 思路 思…

C++继承(上)

一、继承的概念及定义1.继承的概念2.继承定义2.1定义格式2.2继承关系和访问限定符2.3继承基类成员访问方式的变化二、基类和派生类对象赋值转换三、继承中的作用域一、继承的概念及定义 1.继承的概念 继承机制是面向对象程序设计使代码可以复用的最重要的手段&#xff0c;它允…

聊聊如何运用JAVA注解处理器(APT)

什么是APT APT&#xff08;Annotation Processing Tool&#xff09;它是Java编译期注解处理器&#xff0c;它可以让开发人员在编译期对注解进行处理&#xff0c;通过APT可以获取到注解和被注解对象的相关信息&#xff0c;并根据这些信息在编译期按我们的需求生成java代码模板或…

【SQL Server】数据库开发指南(一)数据库设计

文章目录一、数据库设计的必要性二、什么是数据库设计三、数据库设计的重要性五、数据模型5.1 实体-关系&#xff08;E-R&#xff09;数据模型5.2 实体&#xff08;Entity&#xff09;5.3 属性&#xff08;Attribute&#xff09;5.5 关系&#xff08;Relationship&#xff09;六…

和ChatGPT-4聊完后,我觉得一切可能已经来不及了

了然无味&#xff0c;晴空万里&#xff01;和ChatGPT-4开始了一场坦诚的沟通&#xff0c;它全程都表现出高情商&#xff0c;以及不断尽量安抚我的情绪&#xff0c;而这&#xff0c;恰恰令我脊背发凉。 部分文字截取 ZM&#xff1a;我能不能理解每次对话就是一次你的“生命” G&…

LeetCode刷题6:二叉树篇之第 1 节

提示1&#xff1a;本篇先带大家了解二叉树的基础理论&#xff0c;后给出4道基础题目&#xff0c;不难&#xff0c;冲啊~ 算法刷题系列 LeetCode刷题1&#xff1a;数组篇LeetCode刷题2&#xff1a;链表篇LeetCode刷题3&#xff1a;哈希篇LeetCode刷题4&#xff1a;字符串篇Lee…

1678_计算机架构黄金时代_文章阅读

全部学习汇总&#xff1a; GreyZhang/g_risc_v: Learning notes about RISC V. (github.com) 看了一份几年前的文章&#xff0c;觉得还是挺有收获的&#xff0c;因此做一个简单的整理。 对于架构有很大影响的主要考虑四点&#xff1a;专用硬件的实现、高安全性的要求、开放指令…

【Pandas】① Pandas 数据处理基础

介绍 Pandas 是非常著名的开源数据处理库&#xff0c;我们可以通过它完成对数据集进行快速读取、转换、过滤、分析等一系列操作。除此之外&#xff0c;Pandas 拥有强大的缺失数据处理与数据透视功能&#xff0c;可谓是数据预处理中的必备利器。 知识点 数据类型数据读取数据选择…

有效的括号(力扣刷题)代码随想录刷题

给定一个只包括 (&#xff0c;)&#xff0c;{&#xff0c;}&#xff0c;[&#xff0c;] 的字符串 s &#xff0c;判断字符串是否有效。 有效字符串需满足&#xff1a; 左括号必须用相同类型的右括号闭合。 左括号必须以正确的顺序闭合。 每个右括号都有一个对应的相同类型的左…

RK3568平台开发系列讲解(驱动基础篇)mmap系统调用详解

🚀返回专栏总目录 文章目录 一、什么是mmap二、mmap映射类型2.1、私有匿名映射2.2、私有文件映射2.3、共享文件映射2.4、共享匿名映射沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本文将详细介绍mmap系统调用。 一、什么是mmap mmap/munmap函数是用户空间中常用的…

Nacos 性能报告

目录 一、测试目的 二、测试工具 三、测试环境 1. 环境 服务端 客户端 2. 启动参数 服务端 客户端 四、测试场景 1. 大规模服务注册后达到稳定状态 场景描述 2. 大规模服务注册达到稳定状态后&#xff0c;部分实例频繁发布 场景描述 五、测试数据 1. 大规模服务…