当前位置:首页 > 科技  > 软件

Spring Boot是如何处理HTTP请求的?

来源: 责编: 时间:2023-09-20 21:55:25 395观看
导读在Spring Boot中创建基本的REST控制器是个简单的过程。通过使用一些注释,您可以封装所需的逻辑,让Spring Boot处理其余部分。但是,这背后究竟发生了什么?本文将详细介绍Spring Boot如何处理HTTP请求的复杂性。探索设置首

在Spring Boot中创建基本的REST控制器是个简单的过程。通过使用一些注释,您可以封装所需的逻辑,让Spring Boot处理其余部分。但是,这背后究竟发生了什么?本文将详细介绍Spring Boot如何处理HTTP请求的复杂性。oSg28资讯网——每日最新资讯28at.com

oSg28资讯网——每日最新资讯28at.com

接受者线程负责接收传入请求并将其放入队列中。但是,如果队列达到其容量,则接受者将拒绝其他请求。另一方面,工作线程从接受者队列中检索请求,并在其专用线程堆栈中处理每个请求。oSg28资讯网——每日最新资讯28at.com

我们目前有1个接受者和10个工作线程。但是,请注意这些值可能会因我们的特定配置而有所不同。由于我们没有修改任何配置参数,因此Spring已根据Spring Boot文档中概述的默认值自动为我们设置了默认值。oSg28资讯网——每日最新资讯28at.com

需要考虑的一些重要配置参数是:oSg28资讯网——每日最新资讯28at.com

server.tomcat.accept-count=100 # Maximum queue length for incoming connection requests when all possible request processing threads are in use.server.tomcat.max-connections=10000 # Maximum number of connections that the server accepts and processes at any given time.server.tomcat.max-threads=200 # Maximum amount of worker threads.server.tomcat.min-spare-threads=10 # Minimum amount of worker threads.

此外,值得注意的是,我们使用非阻塞IO(NIO)线程。这意味着单个线程可以管理多个连接并维护它们的持续时间,该持续时间由keepAlive参数确定。oSg28资讯网——每日最新资讯28at.com

要查看请求处理过程,请向我们的端点发送HTTP请求:oSg28资讯网——每日最新资讯28at.com

curl localhost:8080/greeting

您将观察到其中一个工作线程处理请求:oSg28资讯网——每日最新资讯28at.com

oSg28资讯网——每日最新资讯28at.com

Dispatcher servlet

接下来介绍如何将请求路由到我们的控制器逻辑。oSg28资讯网——每日最新资讯28at.com

在请求之后,您会注意到一个日志条目:oSg28资讯网——每日最新资讯28at.com

2023-09-10T19:07:58.604  INFO 23948 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'2023-09-10T19:07:58.292  INFO 23948 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'2023-09-10T19:07:58.293  INFO 23948 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms

这表明已实例化DispatcherServlet类的一个实例来处理请求。 您可以在org.springframework.web.servlet包中轻松找到此类。在此包中,您将发现DispatcherServlet实际上是扩展HttpServlet类的标准servlet。它作为所有Spring基础架构的入口点,在由Web服务器管理的Web应用程序中使用。oSg28资讯网——每日最新资讯28at.com

在Spring Web应用程序中,在配置中定义DispatcherServlet时,Apache Tomcat容器将初始化此servlet并将我们的请求委托给它,利用其工作线程之一。oSg28资讯网——每日最新资讯28at.com

请求映射

DispatcherServlet中的中心方法是doService方法,它接收并指导我们的请求。oSg28资讯网——每日最新资讯28at.com

您可能会想知道,它如何确定适当的类来处理此特定请求。oSg28资讯网——每日最新资讯28at.com

答案在于它的handlerMappings字段,该字段存储实现HandlerMapping接口的类集合。在DispatcherServlet实例化期间,此字段由initHandlerMappingsmethod初始化。oSg28资讯网——每日最新资讯28at.com

每当我们使用方法级别的@RequestMapping注释定义新的@Controller类时,Spring都会自动生成一个RequestMappingInfo类。然后,将此生成的信息无缝地合并到handlerMappings属性中。随后,我们的DispatcherServlet利用此数据进行精确的请求路由。oSg28资讯网——每日最新资讯28at.com

让我们在调试模式下更仔细地查看这个列表,您确实会找到我们的映射:oSg28资讯网——每日最新资讯28at.com

oSg28资讯网——每日最新资讯28at.com

其余逻辑非常简单。利用getHandler方法,DispatcherServlet在循环中迭代所有映射:oSg28资讯网——每日最新资讯28at.com

2023-09-10T19:07:58.604  INFO 23948 --- [nio-8080-exec-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring DispatcherServlet 'dispatcherServlet'2023-09-10T19:07:58.292  INFO 23948 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Initializing Servlet 'dispatcherServlet'2023-09-10T19:07:58.293  INFO 23948 --- [nio-8080-exec-1] o.s.web.servlet.DispatcherServlet        : Completed initialization in 1 ms

一旦它确定了合适的处理程序,您可以在调试模式下观察处理程序类:oSg28资讯网——每日最新资讯28at.com

oSg28资讯网——每日最新资讯28at.com

DispatcherServlet仍然将请求传递给找到的处理程序。这就是它的工作原理。oSg28资讯网——每日最新资讯28at.com

总结

本文介绍了在Spring Boot应用程序中处理HTTP请求的内部工作原理。了解了Spring Boot如何初始化Tomcat servlet容器、管理工作线程以及使用DispatcherServlet将请求路由到适当的控制器方法。oSg28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-10582-0.htmlSpring Boot是如何处理HTTP请求的?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 七种实现Web实时消息推送的方案

下一篇: 深入理解Java内存工作原理

标签:
  • 热门焦点
  • 官方承诺:K60至尊版将会首批升级MIUI 15

    全新的MIUI 15今天也有了消息,在官宣了K60至尊版将会搭载天玑9200+处理器和独显芯片X7的同时,Redmi给出了官方承诺,K60至尊重大更新首批升级,会首批推送MIUI 15。也就是说虽然
  • K60至尊版狂暴引擎2.0加持:超177万跑分斩获性能第一

    Redmi的后性能时代战略发布会今天下午如期举办,在本次发布会上,Redmi公布了多项关于和联发科的深度合作,以及新机K60 Ultra在软件和硬件方面的特性,例如:“K60 至尊版,双芯旗舰
  • 对标苹果的灵动岛 华为带来实况窗功能

    继苹果的灵动岛之后,华为也在今天正式推出了“实况窗”功能。据今天鸿蒙OS 4.0的现场演示显示,华为的实况窗可以更高效的展现出实时通知,比如锁屏上就能看到外卖、打车、银行
  • 三言两语说透柯里化和反柯里化

    JavaScript中的柯里化(Currying)和反柯里化(Uncurrying)是两种很有用的技术,可以帮助我们写出更加优雅、泛用的函数。本文将首先介绍柯里化和反柯里化的概念、实现原理和应用
  • 从零到英雄:高并发与性能优化的神奇之旅

    作者 | 波哥审校 | 重楼作为公司的架构师或者程序员,你是否曾经为公司的系统在面对高并发和性能瓶颈时感到手足无措或者焦头烂额呢?笔者在出道那会为此是吃尽了苦头的,不过也得
  • 一个注解实现接口幂等,这样才优雅!

    场景码猿慢病云管理系统中其实高并发的场景不是很多,没有必要每个接口都去考虑并发高的场景,比如添加住院患者的这个接口,具体的业务代码就不贴了,业务伪代码如下:图片上述代码有
  • JVM优化:实战OutOfMemoryError异常

    一、Java堆溢出堆内存中主要存放对象、数组等,只要不断地创建这些对象,并且保证 GC Roots 到对象之间有可达路径来避免垃 圾收集回收机制清除这些对象,当这些对象所占空间超过
  • 超级标准版旗舰!iQOO 11S全球首发iQOO超算独显芯片

    上半年已接近尾声,截至目前各大品牌旗下的顶级旗舰都已悉数亮相,而下半年即将推出的顶级旗舰已经成为了数码圈爆料的主流,其中就包括全新的iQOO 11S系
  • Meta盲目扩张致超万人被裁,重金押注元宇宙而前景未明

    图片来源:图虫创意日前,Meta创始人兼CEO 马克·扎克伯发布公开信,宣布Meta计划裁员超11000人,占其员工总数13%。他公开承认了自己的预判失误:“不仅
Top