【JavaEE进阶】SpringMVC 响应

目录

🎍前言

🌳 返回静态页面

🌲@RestController 与 @Controller 的关联和区别

🌴返回数据 @ResponseBody

🎋返回HTML代码片段

🍃返回JSON

🍀设置状态码

🎄设置Header

🚩设置Content-Type

🚩设置其他Header


🎍前言

在我们前⾯的代码例⼦中,我们返回的是数据,并不是页面

Http响应结果可以是数据,也可以是静态页面,也可以针对响应设置状态码,Header信息等.

🌳 返回静态页面

首先先创建一个静态页面,前端代码位置如下:

注意:创建好前端代码之后,右侧有对应的浏览器访问,不要通过此处访问

编写前端代码:

假如此时点击右侧的Chrome浏览器访问:观察浏览器的中http请求,这个请求表示去找到了本地的63342端口号,这个端口号是idea进程,也就是说它是把这个请求交给了idea,通过idea去访问

正确访问方式:运行代码,通过这样的方式来访问,这是把请求交给了Tomcat

这个访问路径是从根目录往下开始访问,static就是根目录,若是一下这种路径就是 /aa/index.html

上述一系列过程也是在访问前端页面,并不是通过后端返回页面,接下来就开始讲述后端返回页面

返回上述的index.html页面

代码:通过接口来返回页面

发送请求:我们希望返回的是页面,当前确实一个字符串,显然不符合预期

这里的后端的代码和以前的代码就不一样了,想要返回一个静态界面。我们这里需要将 @RestController 改为 @Controller,并且在需要返回的页面前加上 /

代码:

index.html路径:

发送请求:此时就返回成功了

若在返回页面前不加上斜杠(/),会报404:

发送请求:

改变index.html的路径:

发送请求:还是上述未加斜杠(/)的代码,此时发现返回成功了

区别:

若返回页面中加上 / ,可理解为是一个绝对路径,不加 / 可理解为是一个相对路径,相对与当前response所在的路径,建议加上 / .

上述还把@RestController 改为 @Controller,那不改行不行?

代码:发现还是不行

那么现在就有问题了,在前面的文章中写返回数据的时候用的是 @RestController 注解,而现在返回静态界面却用的 @Controller 。它们之间有什么区别和联系呢?

🌲@RestController 与 @Controller 的关联和区别

在前面的文章说,当时把@RestController简单的理解为是打个标签,其实这里的@Controller也可简单的理解为也是打了个标签,只是打的不同的标签。

在前面讲述了MVC模式,后端会返回视图,这是早期时的概念

随着互联⽹的发展, ⽬前项⽬开发流⾏"前后端分离"模式, Java主要是⽤来做后端项⽬的开发,所以也就不再处理前端相关的内容了

MVC的概念也逐渐发⽣了变化, View不再返回视图, ⽽是返回显⽰视图时需要的数据.

所以前⾯使⽤的@RestController表示返回数据,当前的@Controller表示返回视图

查看@RestController的源码:发现在里面使用了@Controller

@RestController = @Controller + @ResponseBody

@ResponseBody表示响应正文,也就是返回数据,那么@RestController能够返回数据就是@ResponseBody起到的作用。

所以之前的代码中的@RestController完全的可以替换为@Controller + @ResponseBody,那么相当于是@Controller这个注解才是打了个标签(当前对象交给了Spring进行管理)。

  • @Controller : 定义⼀个控制器,Spring 框架启动时加载, 把这个对象交给Spring管理.
  • @ResponseBody :定义返回的数据格式为⾮视图,返回⼀个test /html信息

🌴返回数据 @ResponseBody

@ResponseBody 既是类注解,又是方法注解

如果作⽤在类上,表⽰该类的所有⽅法,返回的都是数据,如果作⽤在⽅法上,表⽰该⽅法返回的是数据.

也就是说:在类上添加 @ResponseBody 就相当于在所有的⽅法上添加了 @ResponseBody 注解.

同样,如果类上有 @RestController 注解时:表⽰所有的⽅法上添加了 @ResponseBody 注解,也就是当前类下所有的⽅法返回值做为响应数据

如果⼀个类的⽅法⾥,既有返回数据的,⼜有返回⻚⾯的,就把@ResponseBody 注解添加到对应的⽅法上即可

代码:

发送请求对比结果:

由于现在后端不会管前端,所以一般还是返回数据

🎋返回HTML代码片段

由于返回的是前端代码,只能当做数据来返回

代码:

发送请求:

通过Fiddler抓包查看响应信息:观察发现Content-Type类型 为 text/html,返回的是html代码

响应中的 Content-Type 常⻅取值有以下⼏种:

  • text/html : body 数据格式是HTML
  • text/css : body 数据格式是 CSS
  • application/javascript : body 数据格式是 JavaScript
  • application/json : body 数据格式是 JSON

注意:

  • 如果请求的是js⽂件, Spring MVC会⾃动设置Content-Type为application/javascript
  • 如果请求的是css⽂件, Spring MVC会⾃动设置Content-Type为 text/css

🍃返回JSON

Spring MVC 也可以返回JSON,返回JSON,首先它也是返回数据

后端⽅法返回结果为对象

代码:

发送请求:

Fiddler抓包:Content-Type 为 application/json,即后端返回的是对象,Spring会自动转为Json(返回稍微有点结构的,比如对象,Map等)

🍀设置状态码

Spring MVC会根据我们⽅法的返回结果⾃动设置响应状态码, 程序员也可以⼿动指定状态码

通过Spring MVC的内置对象HttpServletResponse 提供的⽅法来进⾏设置

代码:

发送请求:

Fiddler抓包查看响应:

注意状态码不影响页面的显示,并不是说设置了404页面就会报404。

🎄设置Header

Http响应报头也会向客⼾端传递⼀些附加信息,⽐如服务程序的名称,请求的资源已移动到新地址等,如:Content-Type, Local等.

这些信息通过 @RequestMapping 注解的属性来实现

所以我们先来看 @RequestMapping 的源码

  1. value: 指定映射的URL
  2. method: 指定请求的method类型,如GET,POST等
  3. consumes: 指定处理请求(request)的提交内容类型(Content-Type),例如application/json,text/html;
  4. produces: 指定返回的内容类型,仅当request请求头中的(Accept)类型中包含该指定类型才返回
  5. Params: 指定request中必须包含某些参数值时,才让该⽅法处理
  6. headers: 指定request中必须包含某些指定的header值,才能让该⽅法处理请求

🚩设置Content-Type

未设置Content-Type,返回一个Json,

代码:

发送请求:

Fiddler抓包查看响应:Content-Type类型为text/html,即返回的是字符串,并非JSON,对于前端而言是不一样的,一个是字符串,一个是对象

设置Content-Type:

代码:

发送请求:设置之后浏览器显示结果就是JSON

Fiddler抓包查看响应:

还可以设置它的编码:直接Content-Type的值后面,可理解为它也是Content-Type的值

代码:

Fiddler抓包查看响应:

🚩设置其他Header

设置其他Header的话, 需要使⽤Spring MVC的内置对象

HttpServletResponse 提供的⽅法来进⾏设置,这里也可以设置Content-Type,和上述是一样的

代码:

发送请求:

Fiddler抓包查看响应:

void setHeader(String name,String value)设置⼀个带有给定的名称和值的 header. 如果name 已经存在, 则覆盖旧的值

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RV1126+FFMPEG推流项目(7)AI音频模块编码流程

一、AI 模块和外设麦克风的关系 AI 模块是 RV1126 芯片的一个重要组成部分。它的主要功能是将外部接入的麦克风采集到的模拟信号通过内置的驱动程序转换为数字信号。这意味着麦克风作为外设,提供音频输入信号,AI 模块通过其硬件和软件的结合&#xff0c…

4.Proto 3 语法详解

目录 proto 3 语法详解字段规则消息类型的定义与使用创建通讯录2.0版本enum类型升级通讯录至2.1版本Any类型升级通讯录至2.2版本oneof类型升级通讯录至2.3版本map类型升级通讯录至2.4版本默认值更新消息保留字段reserved创建通讯录3.0版本未知字段升级通讯录3.1版本前后兼容性选…

告别 Excel,拥抱 R 语言:开启数据分析新时代

在这个数据驱动的时代,数据分析已然成为每个行业的核心竞争力。从市场营销到金融领域,从医疗健康到教育行业,数据无处不在,深刻影响着每一个决策。然而,面对日益复杂的数据集,单纯依靠 Excel 进行分析&…

SDK调用文心一言如何接入,文心一言API接入教程

一、前期准备 注册百度智能云账号: 前往百度智能云官网注册一个账号。这是接入文心一言API的基础。 了解API接口: 在百度智能云开放平台中,找到文心一言API的详情页,了解提供的API接口类型(如云端API、移动端API、离线…

linux之进程信号(初识信号,信号的产生)

目录 引入一、初识信号(信号预备知识)1.生活中的信号2.Linux中的信号3.信号进程得出的初步结论 二、信号的产生1.通过终端输入产生信号拓展: 硬件中断2.调用系统函数向进程发信号3.硬件异常产生信号4.软件条件产生信号拓展: 核心转储技术总结一下: 引入 一、初识信…

​​​​​​​​​​​​​​★3.3 事件处理

★3.3.1 ※MouseArea Item <-- MouseArea 属性 acceptedButtons : Qt::MouseButtons containsMouse : bool 【书】只读属性。表明当前鼠标光标是否在MouseArea上&#xff0c;默认只有鼠标的一个按钮处于按下状态时才可以被检测到。 containsPress : bool curs…

从前端视角看设计模式之创建型模式篇

设计模式简介 "设计模式"源于GOF&#xff08;四人帮&#xff09;合著出版的《设计模式&#xff1a;可复用的面向对象软件元素》&#xff0c;该书第一次完整科普了软件开发中设计模式的概念&#xff0c;他们提出的设计模式主要是基于以下的面向对象设计原则&#xff…

DAMA CDGA 备考笔记(二)

1. 考点分布 2. 第二章 数据处理伦理知识点总结 伦理是建立在是非观念上的行为准则。伦理准则通常侧重于公平、尊重、责任、诚信、质量、可靠性、透明度和信任等方面。数据伦理是一项社会责任问题不是法律问题。 度量指标&#xff1a;培训员工人数、合规/不合规事件、企业高管…

ros2笔记-6.2 使用urdf创建机器人模型

本节主要跟着小鱼老师的视频操作&#xff0c;不同的仿真平台有不同的建模语言&#xff0c;但是几乎都支持URDF。 本节使用URDF创建一个机器人模型。 6.2.1 帮机器人创建一个身体 URDF使用XML来描述机器人的结构和传感器、执行器等信息。 在chapt6/chap6_ws/src创建功能包:r…

MLX90640自制热像仪(四) LVGL UI界面设计 移植 SquareLine Studio

SquareLine Studio 1.5.0是一款LVGL图形化的软件&#xff0c;LVGL官方的软件&#xff0c;针对这个软件我们主要做的除了开发&#xff0c;就是移植到自己的板端&#xff0c;过程中会遇到各种各样的问题。 下面附上源代码&#xff1a; // This file was generated by SquareLine…

hadoop3.3和hive4.0安装——单节点

hadoop3.3x和hive4.0安装部署 为什么我要安装hive4.0&#xff0c;因为阿里云镜像只有hive4.0 软件相互兼容性版本 系统centos7 uname -a如果内核3.0以上可以用 安装jdk1.8以上的版本&#xff08;配置好环境变量&#xff09; hadoop3.3.x与hive4.0.x 创建目录 mkdir -p /us…

09.VSCODE:安装 Git for Windows

在 Windows 下安装著名的源代码管理工具&#xff1a;git。 git 工具两大作用&#xff1a; 管理我们自己的源代码获取他人&#xff08;开源的&#xff09;源代码 当前我们更需要第2点。 为什么要安装 git 一、 得到更多库 之前课程中我们安装了 msys2&#xff0c;从而可以通…

《银行保险机构数据安全管理办法》正式实施,分类分级、安全评估共筑安全防线

金融数据具有高价值和高敏感性&#xff0c;金融数据安全关乎国家安全和金融消费者权益密切相关。在当前数字化进程加速的背景下&#xff0c;数据合作频繁&#xff0c;安全风险也随之增加&#xff0c;给机构管理带来了新挑战。 为规范银行业保险业数据处理活动&#xff0c;保障数…

CV(10)--目标检测

前言 仅记录学习过程&#xff0c;有问题欢迎讨论 目标检测 object detection&#xff0c;就是在给定的图片中精确找到物体所在位置&#xff0c;并标注出物体的类别;输出的是分类类别label物体的外框&#xff08;x, y, width, height&#xff09;。 目标检测算法&#xff1a…

Nginx 如何设置 Upgrade-Insecure-Requests 报头 ?

Upgrade-Insecure-Requests 报头是一种 web 浏览器向服务器发出信号的机制&#xff0c;它倾向于接收安全 (HTTPS) 资源。添加此报头有助于在受支持的浏览器上将不安全的请求升级为安全的请求。 Step 1: 定位 Nginx 配置 主 nginx 配置文件通常位于 /etc/nginx/nginx.conf特定…

3.Qt Quick-QML地图引擎之v4.3版本(新增动态轨迹线/海图/天地图街道/天地图卫星)

在上个版本Qt Quick-QML地图引擎之v4版本(新增多模型切换/3D模型欧拉角模拟)_qt加载3d地图-CSDN博客更新了3D模拟功能&#xff0c;在4.3版本增加动态轨迹线、三个地图(海图/天地图街道/天地图卫星)。 4.3版本已经支持qt6 cmake版本&#xff0c;而4.3版本以下支持qt5版本&#x…

Linux-----线程操作(创建)

目录 创建线程 示例&#xff1a; 创建线程 #include <pthread.h>/*** 创建一个新线程* * pthread_t *thread: 指向线程标识符的指针,线程创建成功时,用于存储新创建线程的线程标识符* const pthread_attr_t *attr: pthead_attr_t结构体,这个参数可以用来设置线程的属性…

我要成为算法高手-DFS篇

目录 题目1&#xff1a;计算布尔二叉树的值题目2&#xff1a;求根节点到叶子结点数字之和题目3&#xff1a;二叉树剪枝题目4&#xff1a;验证二叉搜索树题目4&#xff1a;二叉搜索树中第 K 小的元素题目5&#xff1a;二叉树的所有路径 题目1&#xff1a;计算布尔二叉树的值 23…

学习threejs,使用FlyControls相机控制器

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言1.1 ☘️THREE.FlyControls 相机控制…

Life Long Learning(李宏毅)机器学习 2023 Spring HW14 (Boss Baseline)

1. 终身学习简介 神经网络的典型应用场景是,我们有一个固定的数据集,在其上训练并获得模型参数,然后将模型应用于特定任务而无需进一步更改模型参数。 然而,在许多实际工程应用中,常见的情况是系统可以不断地获取新数据,例如 Web 应用程序中的新用户数据或自动驾驶中的…