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

news2025/4/4 8:00:40

文章目录

  • 引言
  • 一、返回静态页面
  • 二、返回非静态页面的数据
  • 三、返回 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 启动项目

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Docker系列 基于OpenAI API自建ChatGPT

转自我的博客文章https://blognas.hwb0307.com/linux/docker/4201&#xff0c;内容更新仅在个人博客可见。欢迎关注&#xff01; 前言 我用帐号/密码使用chatGPT已经有一段时间。但是&#xff0c;我有几个私交较密的朋友&#xff0c;他们并不具备使用chatGPT的条件&#xff1b…

kafka集群topic重新分配leader

1.案例 当kafka集群的broker节点宕机重启后,此broker节点的partition分区的leader节点会被选举为其它broker节点,此broker节点恢复后就会导致配分不均衡 可以看到所有partition的leader节点都在broker id为1的节点上,原来是平均分配到3个broker节点上,replicas项的首位…

【动手学深度学习】(task123)注意力机制剖析

note 将注意力汇聚的输出计算可以作为值的加权平均&#xff0c;选择不同的注意力评分函数会带来不同的注意力汇聚操作。当查询和键是不同长度的矢量时&#xff0c;可以使用可加性注意力评分函数。当它们的长度相同时&#xff0c;使用缩放的“点&#xff0d;积”注意力评分函数…

文章改写工具-文章改写工具的原理

文章改写工具的原理 文章改写工具是一种利用自然语言处理技术和相关算法&#xff0c;对原始文章进行改写、调整或替换等操作&#xff0c;生成与原始文章类似但又不完全相同的新文章的工具。 实现文章改写的工具通常需要包括以下几个步骤&#xff1a; 文本预处理&#xff1a;对原…

【数据库数据恢复】MongoDB数据库启动失败的数据恢复案例

数据库数据恢复环境&#xff1a; Windows Server操作系统服务器&#xff0c;部署MongoDB数据库。 数据库故障&分析&#xff1a; 在MongoDB数据库服务未关闭的情况下&#xff0c;管理员将MongoDB数据库文件从原分区拷贝到其他分区&#xff0c;然后将MongoDB数据库所在原分区…

网页解析--接上篇--bs4/xpath

网页解析完成的是从下载回来的html文件中提取所需数据的方法&#xff0c;一般会用到的方法有: 正则表达式&#xff1a;将整个网页文档当成一个字符串用模糊匹配的方式来提取出有价值的数据 Beautidul Soup&#xff1a;一个强大的第三方插件 lxml&#xff1a;解析html网页或者xm…

一文详解 PoseiSwap,Nautilus Chain 上的首个 DEX

前不久&#xff0c;首个 Layer3 概念的新链 Nautilus Chain 推出了测试网“Triton” 引发瞩目&#xff0c;据了解过&#xff0c;经过一个月的Triton I测试历程&#xff0c;Nautilus Chain社区成员突破200,000&#xff0c;同时测试网激励活动注册地址数突破180,000&#xff0c;链…

Kotlin中lateinit 和 Lazy 的区别

Kotlin中Lateinit 和 Lazy 的区别 latinit 我们可能不想在定义它们时初始化我们的值&#xff0c;相反我们可能想在以后的任何时间初始化并在我们的应用程序中使用它们。但是在使用我们的值之前&#xff0c;一定要记住&#xff0c;我们的值必须先初始化&#xff0c;然后才能使用…

高斯混合模型 GMM 的详细解释

高斯混合模型&#xff08;后面本文中将使用他的缩写 GMM&#xff09;听起来很复杂&#xff0c;其实他的工作原理和 KMeans 非常相似&#xff0c;你甚至可以认为它是 KMeans 的概率版本。 这种概率特征使 GMM 可以应用于 KMeans 无法解决的许多复杂问题。 因为KMeans的限制很多…

【factoryio】虚拟仓储实现(入仓出仓)

实现虚拟工厂场景之一的智能仓储实验 注&#xff1a;本文仅供参考 目录 引 入仓部分 1.上料部分 1.效果 2.实现 2.入仓部分 1.效果 2.实现 3.入仓扩展 1.行列控制和优先级 2.入仓优化和完善 出仓部分 1.出仓 2.后传送带 3.出仓效果 1.效果 2.优先级 3.完…

Linux时间服务器(ntp)

1.配置ntp时间服务器&#xff0c;确保客户端主机能和服务主机同步时间 2.配置ssh免密登陆&#xff0c;能够通过客户端主机通过redhat用户和服务端主机基于公钥验证方式进行远程连接 一.配置ntp时间服务器&#xff0c;确保客户端主机能和服务主机同步时间 1、软件安装 [rootl…

高速前行的低代码,其能力边界到底在哪?

最近半年&#xff0c;有好些来自不同岗位、不同立场的人开始问同一个问题&#xff1a;低代码平台的边界是什么&#xff1f;低代码无所不能吗&#xff1f; “全民开发”、“人人都是开发者”这样的口号愈演愈烈&#xff0c;“低代码能力有没有边界”、“边界在哪”&#xff0c;这…

数据要素化全面提速,数据复制将迎来春天?

数据复制市场将迎来真正的春天&#xff1f; 目前看的确如此。近日&#xff0c;国家发改委密集发文&#xff0c;从产权、分配、流通、安全等多个角度解读“数据二十条”&#xff08; 《中共中央国务院关于构建数据基础制度更好发挥数据要素作用的意见》&#xff0c;简称“数据二…

算法的时间复杂度和空间复杂度(1)

1.算法效率 2.时间复杂度 3.空间复杂度 1.算法效率 如何衡量一个算法的好坏&#xff1f; 比如对于以下斐波那契数列&#xff1a; long long Fib(int N) { if(N < 3) return 1; return Fib(N-1) Fib(N-2)&#xff1b; } 斐波那契数列的递归实现方式非常简洁&#xff0c;但…

SOFA Weekly|SOFA 开源五周年来自社区家人的祝福、社区本周贡献 issue 精选

SOFA WEEKLY | 每周精选 筛选每周精华问答&#xff0c;同步开源进展欢迎留言互动&#xff5e;SOFAStack&#xff08;Scalable Open Financial Architecture Stack&#xff09;是蚂蚁集团自主研发的金融级云原生架构&#xff0c;包含了构建金融级云原生架构所需的各个组件&#…

《程序员面试金典(第6版)》面试题 10.05. 稀疏数组搜索(二分法,分治算法入门题目,C++)

题目描述 稀疏数组搜索。有个排好序的字符串数组&#xff0c;其中散布着一些空字符串&#xff0c;编写一种方法&#xff0c;找出给定字符串的位置。 示例1: 输入: words [“at”, “”, “”, “”, “ball”, “”, “”, “car”, “”, “”,“dad”, “”, “”], s “t…

2023有哪些便宜好用的蓝牙耳机?性价比最高的无线耳机排行

不管入手什么东西&#xff0c;性价比永远能成为人们入手的最重要的参考要素之一。那么&#xff0c;在蓝牙耳机市场中&#xff0c;有哪些便宜好用的蓝牙耳机&#xff1f;针对这个问题&#xff0c;我来给大家推荐几款性价比最高的无线耳机&#xff0c;一起来看看吧。 一、南卡小音…

采购系统是如何管理供应商的?

随着数字化的推进&#xff0c;企业面临着越来越多的供应商管理问题。企业采购数字化转型已经成为大势所趋&#xff0c;对于采购数字化转型而言&#xff0c;供应商管理是重要一环。 供应商准入管理 在供应商准入阶段&#xff0c;企业需要从供应商资质、财务能力、信誉能力、管理…

vite 安装腾讯im组件TUIKit问题记录

按照vue3ts要求安装依赖包 即时通信 IM Web & H5-含 UI 集成方案&#xff08;荐&#xff09;-文档中心-腾讯云 (tencent.com) 这个版本的文档采用全局安装sass&#xff1a; npm install -g sass sass-loader10.1.1 实际安装后遇到无法解析sass的错误提示&#xff0c;使用…

JumpServer堡垒机部署+基本使用

文章目录JumpServer 堡垒机一、理论知识&#xff1a;1、堡垒机与跳板机的区别2、JumpServer4A认证二、实践实验:1、初始化环境准备2、MySQL数据库部署3、Python3.6 程序部署4、Redis数据库部署5、Core组件部署6、Koko组件部署7、Guacamole组件部署1、安装FFmpeg2、安装Guacamol…