当前位置: 首页 > 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!";}
}

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

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 好看的个人导航页面html源码
  • 使用Fign进行客户端远程调用和SpringFormEncoder的使用
  • Docker Container 常用命令
  • 新型PyPI攻击技术可能导致超2.2万软件包被劫持
  • 服务器/linux上登录huggingface网站
  • [UVM]5.config机制 report 消息管理
  • docker装大米cms(damicms)各种cms可用相同办法
  • 开源 AI 智能名片小程序在内容营销中的应用与价值
  • JVM系列(七) -对象的内存分配流程
  • Grafana 在 Linux 系统上安装
  • 打造温馨家居,全屋智能家居解决方案
  • 【大模型实战篇】大模型周边NLP技术回顾及预训练模型数据预处理过程解析(预告)
  • 数据分析:R语言计算XGBoost线性回归模型的SHAP值
  • Latex使用方式
  • 面向GPU计算平台的归约算法的性能优化研究
  • 78. Subsets
  • android 一些 utils
  • gitlab-ci配置详解(一)
  • jdbc就是这么简单
  • REST架构的思考
  • 安装python包到指定虚拟环境
  • 程序员最讨厌的9句话,你可有补充?
  • 从0到1:PostCSS 插件开发最佳实践
  • 关于 Cirru Editor 存储格式
  • 你不可错过的前端面试题(一)
  • 前端性能优化——回流与重绘
  • 一个JAVA程序员成长之路分享
  • 用 Swift 编写面向协议的视图
  • 最近的计划
  • 1.Ext JS 建立web开发工程
  • 京东物流联手山西图灵打造智能供应链,让阅读更有趣 ...
  • ​DB-Engines 12月数据库排名: PostgreSQL有望获得「2020年度数据库」荣誉?
  • # 手柄编程_北通阿修罗3动手评:一款兼具功能、操控性的电竞手柄
  • $(document).ready(function(){}), $().ready(function(){})和$(function(){})三者区别
  • (06)金属布线——为半导体注入生命的连接
  • (1)(1.9) MSP (version 4.2)
  • (二)Pytorch快速搭建神经网络模型实现气温预测回归(代码+详细注解)
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (附源码)ssm基于jsp的在线点餐系统 毕业设计 111016
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (每日一问)计算机网络:浏览器输入一个地址到跳出网页这个过程中发生了哪些事情?(废话少说版)
  • (四)汇编语言——简单程序
  • (四)图像的%2线性拉伸
  • (限时免费)震惊!流落人间的haproxy宝典被找到了!一切玄妙尽在此处!
  • (一)80c52学习之旅-起始篇
  • (原)记一次CentOS7 磁盘空间大小异常的解决过程
  • (转)从零实现3D图像引擎:(8)参数化直线与3D平面函数库
  • (转)淘淘商城系列——使用Spring来管理Redis单机版和集群版
  • ***通过什么方式***网吧
  • .dwp和.webpart的区别
  • .NET C# 使用GDAL读取FileGDB要素类
  • .NET Core 项目指定SDK版本
  • .net 连接达梦数据库开发环境部署
  • .NetCore部署微服务(二)
  • .NET连接MongoDB数据库实例教程