后端Web核心之请求响应

news2024/12/23 13:49:21

目录

1.概述

2.接收请求

简单参数和实体参数

数组集合参数

日期参数和JSON参数

路径参数

总结

3.返回响应


1.概述

Web请求和响应是HTTP协议中的核心概念,它们是客户端(通常是浏览器)与服务器之间通信的基础。

浏览器发起请求后,由Controller处理再发送响应数据给浏览器。而我们自己写的controller程序,由于不支持tomcat中的java规范,因此tomcat其实是不能识别的,也就不能运行。

但是Tomcat支持servlet,springboot底层提供了一个非常核心的servlet,就是dispatcherServlet,它实现了servlet接口,那么前端发起的请求都会先经过它,再由它把这个请求转发给各个controller程序,controller处理后的结果再返回给dispatcherServlet,再发送给浏览器。它非常重要,因此叫做前端(核心)控制器

tomcat解析完浏览器的http请求,会封装在HttpServletRequest对象中,而发送的请求会封装在HttpServletResponse对象中。

这种架构模式就叫做BS(browser/server)架构:客户端只需要浏览器,应用程序的逻辑操作和数据都存储在服务端。通过浏览器访问的网站都是BS架构,比如京东、淘宝等

另外一种模式叫做CS(client/server)架构:就是需要安装的客户端,比如QQ、微信等

以上是Web应用程序整体的访问流程,大部分都不需要我们去管,因此要重点关注需要我们自己编写的Controller程序,其中最重要的就是获取请求参数设置响应数据

2.接收请求

简单参数和实体参数

由于通过localhost我们只能发送get请求,如果要发送post或其他形式的请求就需要去编写前端程序,这样是比较繁琐的,因此我们用postman(Apipost、Apifox差不多用法)工具去测试后端的功能接口,它可以指定请求形式、传递参数、请求头和请求体等。

简单参数:对于简单参数,无论是什么请求形式,只需要保证请求的参数名和controller方法中的形参名保持一致就都可以接收成功。

即使不一致,也可以通过注解@RequestParam将参数名name映射到username上,从而完成参数的接收。

实体参数:简单参数在少的情况下比较方便,但如果要传递十几二十个参数呢,此时就会变得很麻烦,因此考虑把这些参数都封装到一个实体类中,传递这个实体类即可。

以上是简单实体参数的封装,对于对象中含有多个属性(复杂实体参数)的,通过address.privince这样的方式一个一个进行封装。

数组集合参数

请求参数名与形参数组名称相同且请求参数为多个,定义数组类型形参即可接收参数

另一种方式是使用集合参数:用注解RequestParam绑定参数关系

日期参数和JSON参数

日期参数:用注解DateTimeFormat注解完成日期参数格式转换(指定日期的格式)

JSON参数:JSON数据是放在请求体中携带到服务端的,因此要用post请求。JSON数据键名与形参对象属性名相同,定义POJO类型形参即可接收参数,需要使用@RequestBody标识

路径参数

通过请求URL直接传递参数,使用{...}来标识该路径参数,需要使用@PathVariable获取路径参数,其中id是动态的,以便于访问不同的路径。

对于多个路径参数,就多写一个参数就可以了。

总结

3.返回响应

实际上,return的这部分(hello world)就是响应数据。这依赖于一个核心注解ResponseBody,它被包含在RestController中

这些Controller中的public对外暴露的方法被称为功能接口,RequestMapping后面就是它的请求路径(/hello)。而实际项目开发需要的开发文档就是描述这些接口的请求路径、请求参数和响应数据。

但是,这些接口的返回的数据多种多样,前端不可能一个一个的对这些数据进行解析。因此我们用一个通用的实体对象(result)来接收,最后所有的Controller方法都给前端返回这个result。这样前端只需要对这种格式的数据进行解析就可以。

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

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

相关文章

大数据-85 Spark 集群 RDD创建 RDD-Action Key-Value RDD详解 RDD的文件输入输出

点一下关注吧!!!非常感谢!!持续更新!!! 目前已经更新到了: Hadoop(已更完) HDFS(已更完) MapReduce(已更完&…

机器学习:knn算法

1、概述 全称是k-nearest neighbors,通过寻找k个距离最近的数据,来确定当前数据值的大小或类别。K-近邻算法是一种基本而又有效的机器学习算法,用于分类和回归任务。它属于实例学习方法,或者说是一种基于规则的记忆方法。 2、基本…

STM32外设篇:MPU6050

MPU6050简介 MPU6050是一个6轴姿态传感器,可以测量芯片自身X、Y、Z轴的加速度、角速度参数,通过数据融合可进一步得到姿态角(欧拉角),常应用于平衡小车、飞行器等需要检测自身姿态的场景。 3轴加速度计3轴陀螺仪传感…

各种国产操作系统,一个 U 盘搞定

熟悉 Windows 装机的朋友对老毛桃和大白菜这类装机工具应该不陌生。这两款流行的工具可以用来制作启动盘,方便进行系统安装、备份和还原等操作。它们集成了多种磁盘工具,并支持一个启动 U 盘安装多个版本的 Windows 系统,如 Windows 7、Windo…

css中的高度塌陷

CSS高度塌陷(或称为高度坍塌)是指在某些特定情况下,元素的高度无法被正确计算或显示的现象。这通常发生在具有浮动属性的元素或使用绝对定位的元素周围。 原因 高度塌陷通常发生在父元素包含着一个或多个浮动元素时。由于浮动元素被移出了正…

ChatTTS部署

1、创建conda环境 conda create -n TTS python3.10 conda activate TTS2、拉取源代码 # 从 GitHub 下载代码 git clone https://github.com/2noise/ChatTTS cd ChatTTS拉取模型文件 git clone https://www.modelscope.cn/pzc163/chatTTS.git ChatTTS-Model3、安装环境依赖 …

UDP详解/消息边界

本文旨在解释了为什么说UDP是不可靠,到底什么是UDP的消息边界,以及UDP是否会出现粘包和半包的问题 概念 UDP协议是一种面向非连接的协议,面向非连接指的是在正式通信前不必与对方先建立连接,不管对方状态就直接发送,至于对方是否可以接收到这些数据内容,UDP协议无法控制…

HTML+CSS进阶用法 (下)——移动端适配、媒体查询和响应式布局

欢迎来到移动端适配方案的介绍!随着移动互联网的快速发展,越来越多的用户通过手机和平板电脑访问网站。为了确保网站能够在各种设备上呈现出最佳的视觉效果和用户体验,我们需要采取有效的适配策略。本篇文章将带你了解几种常用的适配方法&…

记事本打不开(保姆级教程)

问题可能是这样的: 1. 应用程序故障:记事本程序可能遇到了临时的应用程序故障或错误。 2. 系统文件损坏:系统文件损坏或丢失可能导致记事本无法正常启动。 3. 注册表问题:注册表中的条目错误或缺失可能影响记事本的加载。 4. 输入…

Blender的Python编程介绍

在Blender这个免费的开源3D设计软件中,最值得称道的一点是可以用Python程序来辅助进行3D设计,我们可以通过Python来调整物体的属性,生成新的物体,甚至生成新的动画等等。 在最近的一个项目中,我用Blender制作了一个动…

PVE 系统下虚拟机数据盘从IDE转换为VIRIO

一、卸载已经挂载的 IDE 数据盘 [rootlocalhost ~]# df -h 文件系统 容量 已用 可用 已用% 挂载点 /dev/mapper/centos-root 29G 897M 29G 4% / devtmpfs 909M 0 909M 0% /dev tmpfs 920M 0 920M 0% /dev/shm tmpfs 920M 8.5M 912M 1% /run tmpfs 920M 0 920M 0% /sys/fs/cgro…

nginx的平滑升级及版本回滚

官方源码包下载地址:nginx: download 一、编译安装Nginx-1.24.0 [rootNginx ~]# dnf install gcc pcre-devel zlib-devel openssl-devel -y [rootNginx ~]# mkdir /nginx #创建目录,将nginx-1.24.0.tar.gz放在这个目录里 [rootNginx nginx]# tar…

C++的动态数组以及std:vector的优化

文章目录 静态数组动态数组代码背景第一种打印方式:使用 for 循环和索引解释 第二种打印方式:使用基于范围的 for 循环解释改进方式:避免拷贝 总结清理数组 代码示例代码分析输出结果总结 代码示例代码详解总结使用 reserve 的优点:使用 empl…

【考研数学】定积分应用——旋转体体积的计算(一文以蔽之)

目录 一、如何计算旋转体体积?思考一个小例子 二、旋转体体积的二重积分表达式 三、用真题,小试牛刀 定积分的应用中,有一类题是求解旋转体的体积问题。 相较于记忆体积计算公式,有一种通法求解体积更不容易出错:二重…

系统数据库介绍及实践

目录 案例 【题目】 【问题 1】(8 分) 【问题 2】(13 分) 【问题 3】(4 分) 【答案】 【问题 1】解析 【问题 2】解析 【问题 3】解析 相关推荐 案例 阅读以下关于应用系统数据架构的说明,在答题纸上回答问题 1 至问题 3。 【题目】 某软件公司拟开发一套…

svn文件定时全量备份

在win11操作系统中,使用定时任务脚本的方式实现对SVN文件的定时备份 SVN备份脚本 1 创建脚本simpleBackup.bat 该脚本主要用于实现备份过程的信息展示 echo 正在备份版本库%1...... md %BACKUP_DIRECTORY%\%2 %SVN_HOME%\bin\svnadmin hotcopy %1 %BACKUP_D…

蓝桥杯 双周赛 第16场 强者赛 题目复盘 (2024年8月10日)

6. 花魁之争 解题思路: 根据题意,对于每一次操作,每个仙女来说都取最优解,那第一次每个仙女都操作一次,这时候胜出的仙女,是一定赢的。所以,只要计算n个字符串操作一次的最优字符串,…

HarmonyOS NEXT - 通过 module 模块化引用公共组件和utils

demo 地址: https://github.com/iotjin/JhHarmonyDemo 代码不定时更新,请前往github查看最新代码 HarmonyOS NEXT 一、HAP & HSP & HAR介绍HAP官方介绍HAR官方介绍HSP官方介绍怎么理解App、HAP、HAR的关系HAR如何转换为HSPHSP模块如何快速切换成HAR模块 二…

【JavaSE】基础知识复习(六)(不全)

1.File与IO流 File类就是代表系统的文件 / 目录,IO流是用来处理File类的 File类 构造器 分隔符(三种) 第三种File.separator是跨平台的,获取当前操作系统的分隔符 常用方法 length() 返回文件大小(字节),如果是目录&am…

EcoDev Studio 与 gitlab【拉取项目,切换分支,再修改提交】

1 安装git工具 https://blog.csdn.net/mukes/article/details/115693833 2 创建空项目 3 推送gitlab 1、进入本地该项目目录下,右键Git Bash Here打开git命令窗口 2、初始化本地仓库: git init将本地项目的所有文件添加到暂存区: git a…