当前位置: 首页 > news >正文

HTTP 三、http在springboot中得应用

一、springboot处理http请求的过程

        1、客户端发起HTTP请求,经过网络传输到服务器

        HTTP请求通常由浏览器、Postman、curl或其他HTTP客户端发起,客户端的HTTP请求通过网络(通常是TCP/IP协议)传输到服务器,这个请求首先会到达Spring Boot应用的端口

        2、服务器接收请求

        服务器上的网络堆栈处理传入的TCP/IP包,并将其传递给服务器软件。在Spring Boot应用中,嵌入式的Tomcat、Jetty或Undertow服务器负责监听HTTP端口并接收请求。
        也就是说到达springboot的程序之后,首先是由tomcat接收并处理请求的,一般这个tomcat是springboot内置的。

        3、 Servlet容器(tomcat)处理请求

        嵌入式的Servlet容器(如Tomcat)接收到HTTP请求后,会将请求解析成HttpServletRequest对象。这个对象封装了请求行、请求头和请求体等信息。这个过程是在Tomcat的内部实现的,遵循Servlet规范,不涉及到Spring Boot的具体代码。

        4、查找对应的Servlet然后DispatcherServlet处理请求

        Tomcat Servlet容器会根据HttpServletRequest对象的信息(例如URL、HTTP方法类型等)去寻找已经注册到容器中的对应的Servlet,找到对应的DispatcherServlet后,Tomcat将把HttpServletRequest对象传递给它。DispatcherServlet接收到HttpServletRequest后,将会根据其中的URL信息,去寻找在Spring应用程序中注册的对应的Controller和处理的方法。

        5、Controller处理请求

        找到对应的Controller和方法后,DispatcherServlet将调用这个方法,并传递HttpServletRequest中的信息。到达controller接口之后,进入controller中自己的处理逻辑,然后最终生成返回结果。

  • 视图解析:如果控制器返回的是视图名称,Spring会使用ViewResolver来解析视图并生成HTML内容。
  • 序列化数据:如果控制器返回的是对象(如JSON),Spring会使用HttpMessageConverter将对象序列化为JSON或XML格式。
        6、返回响应给客户端

   DispatcherServlet生成HttpServletResponse对象,包含响应的状态码、头部和体。Servlet容器(如Tomcat)将HttpServletResponse对象转换为原始的HTTP响应,并通过网络传输回客户端。

        7、客户端接收响应

        客户端收到HTTP响应,解析响应行、响应头和响应体,并根据状态码和内容采取相应的动作。例如:

  • 浏览器渲染HTML内容或显示JSON数据。
  • API客户端解析JSON数据并进一步处理。

        

二、关于tomcat与servlet

        Spring Boot处理HTTP请求的整个过程。在这个过程中,Spring Boot的自动配置让开发者不需要关心底层的处理细节,可以专注于编写业务代码。
        而tomcat主要就是负责处理http请求的。Spring Boot默认使用内嵌的Tomcat服务器。这意味着Spring Boot应用启动时,它会自动启动一个Tomcat实例,并且该实例会根据Spring Boot的配置文件来决定监听哪个端口。
        Tomcat作为Servlet容器,负责管理所有部署在它上面的应用及其Servlet对象。而servlet,在每个Spring Boot应用中(也就是每个服务中),通常会有一个DispatcherServlet对象,它是负责处理所有HTTP请求的核心组件。每个Spring Boot应用相当于一个独立的服务,运行在Tomcat上。也就是说每一个springboot服务对应一个servlet 对象,这个servlet对象由tomcat统一管理。每个应用的DispatcherServlet是独立的,处理与该应用相关的所有HTTP请求。

        所以总结一下:

  • 一个Spring Boot服务对应一个Servlet对象,即DispatcherServlet
  • 服务器(Tomcat)上可以运行多个Spring Boot服务,因此会有多个DispatcherServlet对象。
  • Tomcat负责管理这些Servlet对象,包括它们的创建、初始化、请求处理、和销毁,并确保请求被正确路由到相应的Servlet对象。

        这里面只简答介绍一下对应关系,详细了解可以再自行查询。

        所以流程就是:
        http请求 ----> tomcat ---> 对应servlet类 ----> 再到对应接口

三、springboot对应http请求映射 (Request Mapping)

        前面简单说了 http 对应的方法类型常用的有 GET、POST、PUT、DELETE 等方法,这些方法在springboot中也帮我们定义好了对应的注解来映射这些方法。

  • @GetMapping:用于处理 HTTP GET 请求。
  • @PostMapping:用于处理 HTTP POST 请求。
  • @PutMapping:用于处理 HTTP PUT 请求。
  • @DeleteMapping:用于处理 HTTP DELETE 请求。
@RestController
@RequestMapping("/api")
public class MyController {@GetMapping("/hello")public String hello() {return "Hello, World!";}
}

        上面的代码中,指定请求路径为 /api/hello,指定请求方法为 GET。

        还有一个常用注解是@RequestMapping 注解,这个注解 value 属性来指定请求路径,使用 method 属性来指定请求方法,例如:

@RestController
@RequestMapping("/api")
public class MyController {@RequestMapping(value = "/hello", method = RequestMethod.GET)public String hello() {return "Hello, World!";}
}

        关于这些注解的详细使用也不再多说,比较简单会用即可,详细可再自行搜索。

相关文章:

HTTP 三、http在springboot中得应用

一、springboot处理http请求的过程 1、客户端发起HTTP请求,经过网络传输到服务器 HTTP请求通常由浏览器、Postman、curl或其他HTTP客户端发起,客户端的HTTP请求通过网络(通常是TCP/IP协议)传输到服务器,这个请求首先会…...

Java秋招面经(网搜版)

1.redis的数据结构 Redis 提供了多种高效的数据结构来满足不同的应用需求。主要包括字符串(String),这是最基础的数据类型,支持存储和操作各种数据;哈希(Hash),类似于键值对的集合&…...

【Android】Material Design编写更好的UI

Toolbar 对于控件ActionBar我们非常熟悉,就是我们常见的标题栏,但ActionBar只能位于活动的顶部,因此我们更建议使用Toolbar。在新建一个项目的时候都是默认显示ActionBar,我们要使用Toolbar就需要先将标题栏改为不显示 先来看看…...

剪辑视频,这四大工具助你一臂之力!

在这个数字化的时代,视频已成为一种重要的表达手段。无论您是专业视频制作者还是只是偶尔想要编辑一些个人视频,一款优秀的视频剪辑软件都将是您不可或缺的好帮手。以下是几款值得推荐的视频剪辑软件。 福昕视频剪辑 直达链接:www.pdf365.c…...

基于单片机的热成像测温显示系统设计

本设计基于单片机的热成像测温显示系统,本系统包括STM32F103C6T6微控制器、MLX90640红外温度传感器、TFT-LCD显示屏、AT24C02存储模块、报警模块、按键模块和MP3语音播报模块。其可以通过热成像传感器对被检测物体的温度进行非接触式测量,并能够将被测信…...

CSS系列之Float浮动(二)

一、传统网页布局 网页布局的本质:用 CSS 来摆放盒子,把盒子摆放到相应位置。CSS 提供了三种传统布局方式(这里指的只是传统布局,其实还有一些特殊高级的布局方式): 标准流浮动定位 1、所谓的标准流&#…...

macos下的 sed命令安装与使用 gnu-sed

sed命令是我们在linu类系统中非常重要的一个命令, 但是在macos下面默认是没有sed命令的, 不过我们可以通过brew install gnu-sed ( 或者通过 sudo port install gsed )这个软件包来获得这个命令 GNU sed 命令安装 下面2种方式,选择一种安装即可 # brew安装 brew install gn…...

RLC(电阻、电感、电容)

RLC(电阻、电感、电容) 目录一、两个电阻(R1,R2),电容(C1,C2)的串联/并联公式?二、请画出这个1ms, 1V的Vin脉冲信号在Vout端的大致图像1.电路图2.…...

语音测试(一)ffmpeg视频转音频

视频转音频 下载ffmpeg工具进入bin目录cmd进入控制台输入命令 ffmpeg.exe -i ./视频.mp4 ./音频.wav命令说明 ffmpeg -i input.mp4 output.mkv FFmpeg 可能会尝试自动选择合适的编码器对视频和音频进行重新编码,以便适应 MKV 格式的要求ffmpeg -i input.mp4 -c c…...

计算机网络八股文之TCP协议

TCP/IP模型 链路层 物理层:主要定义物理设备标准,如网线的接口类型、光纤的接口类型、各种传输介质的传输速率等。它的主要作用是传输比特流(就是由1、0转化为电流强弱来进行传输,到达目的地后再转化为1、0,也就是我们…...

【linux】linux中如何通过stress进行压力测试,原理解析与应用实战

✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,阿里云开发者社区专家博主,CSDN全栈领域优质创作者,掘金优秀博主,51CTO博客专家等。 🏆《博客》:Python全…...

python用波形显示udp数据实现一个模拟示波器

显示端代码: import socket import matplotlib.pyplot as plt import matplotlib.animation as animation import numpy as np# UDP setup udp_ip = 0.0.0.0 # Listen on all network interfaces udp_port = 12345 sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)…...

开源通用验证码识别OCR —— DdddOcr 源码赏析(二)

文章目录 前言DdddOcr分类识别调用识别功能classification 函数源码classification 函数源码解读1. 分类功能不支持目标检测2. 转换为Image对象3. 根据模型配置调整图片尺寸和色彩模式4. 图像数据转换为浮点数据并归一化5. 图像数据预处理6. 运行模型,返回预测结果 …...

【个人笔记】VCS工具与命令

Title:VCS工具学习 一 介绍 是什么? VCS (Verilog Compiler Simulator) 是synopsys的verilog 仿真软件,竞品有Mentor公司的Modelsim、Cadence公司的NC-Verilog、Verilog—XL. VCS能够 分析、编译 HDL的design code,同时内置了 仿…...

面试进去8分钟就出来了,问的问题有点变态。。。

从小厂出来,没想到在另一家公司又寄了。 到这家公司开始上班,加班是每天必不可少的,看在钱给的比较多的份上,就不太计较了。没想到一纸通知,所有人不准加班,加班费不仅没有了,薪资还要降40%,这…...

探索MongoDB的Python之钥:pymongo的魔力

文章目录 探索MongoDB的Python之钥:pymongo的魔力背景:为什么选择pymongo?简介:pymongo是什么?安装:如何将pymongo纳入你的项目?基础用法:五个核心函数介绍1. 连接到MongoDB2. 选择数…...

【数据结构】顺序表和链表——顺序表(包含丰富算法题)

文章目录 1. 线性表2. 顺序表2.1 概念与结构2.2 分类2.2.1 静态顺序表2.2.2 动态顺序表 2.3 动态顺序表的实现2.4 顺序表算法题2.4.1 移除元素2.4.2 删除有序数组中的重复项2.4.3 合并两个有序数组 2.5 顺序表问题与思考 1. 线性表 线性表(linear list)…...

pod基础和镜像拉取策略

目录 pod概念 pod的分类 1.基础容器 pause 2.初始化容器 init 实验:定义初始化容器 init容器的作用 实验:如何在容器内部进行挂载 镜像拉取策略 pod概念 pod是k8s里面的最小单位,pod也是最小化运行容器的资源对象。容器是基于pod在k…...

53 mysql pid 文件的创建

前言 接上一篇文章 mysql 启动过程中常见的相关报错信息 在 mysql 中文我们在 “service mysql start”, “service mysql stop” 经常会碰到 mysql.pid 相关的错误信息 比如 “The server quit without updating PID file” 我们这里来看一下 mysql 中 mysql.pid 文件的…...

前端---对MVC MVP MVVM的理解

就需要从前端这些年的从无到有、从有到优的变迁过程讲一下。 1. Web1.0时代 在web1.0时代并没有前端的概念,开发一个web应用多数采用ASP.NET/Java/PHP编写,项目通常用多个aspx/jsp/php文件构成,每个文件中同时包含了HTML、CSS、JavaScript、…...

Python爬虫实战:研究MechanicalSoup库相关技术

一、MechanicalSoup 库概述 1.1 库简介 MechanicalSoup 是一个 Python 库,专为自动化交互网站而设计。它结合了 requests 的 HTTP 请求能力和 BeautifulSoup 的 HTML 解析能力,提供了直观的 API,让我们可以像人类用户一样浏览网页、填写表单和提交请求。 1.2 主要功能特点…...

7.4.分块查找

一.分块查找的算法思想: 1.实例: 以上述图片的顺序表为例, 该顺序表的数据元素从整体来看是乱序的,但如果把这些数据元素分成一块一块的小区间, 第一个区间[0,1]索引上的数据元素都是小于等于10的, 第二…...

Golang dig框架与GraphQL的完美结合

将 Go 的 Dig 依赖注入框架与 GraphQL 结合使用,可以显著提升应用程序的可维护性、可测试性以及灵活性。 Dig 是一个强大的依赖注入容器,能够帮助开发者更好地管理复杂的依赖关系,而 GraphQL 则是一种用于 API 的查询语言,能够提…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

HarmonyOS运动开发:如何用mpchart绘制运动配速图表

##鸿蒙核心技术##运动开发##Sensor Service Kit(传感器服务)# 前言 在运动类应用中,运动数据的可视化是提升用户体验的重要环节。通过直观的图表展示运动过程中的关键数据,如配速、距离、卡路里消耗等,用户可以更清晰…...

基于Springboot+Vue的办公管理系统

角色: 管理员、员工 技术: 后端: SpringBoot, Vue2, MySQL, Mybatis-Plus 前端: Vue2, Element-UI, Axios, Echarts, Vue-Router 核心功能: 该办公管理系统是一个综合性的企业内部管理平台,旨在提升企业运营效率和员工管理水…...

DeepSeek源码深度解析 × 华为仓颉语言编程精粹——从MoE架构到全场景开发生态

前言 在人工智能技术飞速发展的今天,深度学习与大模型技术已成为推动行业变革的核心驱动力,而高效、灵活的开发工具与编程语言则为技术创新提供了重要支撑。本书以两大前沿技术领域为核心,系统性地呈现了两部深度技术著作的精华:…...

多元隐函数 偏导公式

我们来推导隐函数 z z ( x , y ) z z(x, y) zz(x,y) 的偏导公式,给定一个隐函数关系: F ( x , y , z ( x , y ) ) 0 F(x, y, z(x, y)) 0 F(x,y,z(x,y))0 🧠 目标: 求 ∂ z ∂ x \frac{\partial z}{\partial x} ∂x∂z​、 …...

GeoServer发布PostgreSQL图层后WFS查询无主键字段

在使用 GeoServer(版本 2.22.2) 发布 PostgreSQL(PostGIS)中的表为地图服务时,常常会遇到一个小问题: WFS 查询中,主键字段(如 id)莫名其妙地消失了! 即使你在…...

用鸿蒙HarmonyOS5实现国际象棋小游戏的过程

下面是一个基于鸿蒙OS (HarmonyOS) 的国际象棋小游戏的完整实现代码,使用Java语言和鸿蒙的Ability框架。 1. 项目结构 /src/main/java/com/example/chess/├── MainAbilitySlice.java // 主界面逻辑├── ChessView.java // 游戏视图和逻辑├── …...