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

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

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

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

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

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

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

需要考虑的一些重要配置参数是:YPf28资讯网——每日最新资讯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参数确定。YPf28资讯网——每日最新资讯28at.com

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

curl localhost:8080/greeting

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

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

Dispatcher servlet

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

在请求之后,您会注意到一个日志条目:YPf28资讯网——每日最新资讯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应用程序中使用。YPf28资讯网——每日最新资讯28at.com

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

请求映射

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

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

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

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

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

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

其余逻辑非常简单。利用getHandler方法,DispatcherServlet在循环中迭代所有映射:YPf28资讯网——每日最新资讯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

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

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

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

总结

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

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

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

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

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

标签:
  • 热门焦点
  • 一加Ace2 Pro官宣:普及16G内存 引领24G

    一加官方今天继续为本月发布的新机一加Ace2 Pro带来预热,公布了内存方面的信息。“淘汰 8GB ,12GB 起步,16GB 普及,24GB 引领,还有呢?#一加Ace2Pro#,2023 年 8 月,敬请期待。”同时
  • 7月安卓手机性能榜:红魔8S Pro再夺榜首

    7月份的手机市场风平浪静,除了红魔和努比亚带来了两款搭载骁龙8Gen2领先版处理器的新机之外,别的也想不到有什么新品了,这也正常,通常6月7月都是手机厂商修整的时间,进入8月份之
  • 6月安卓手机性价比榜:Note 12 Turbo断层式碾压

    6月份有一个618,虽然这是京东周年庆的日子,但别的电商也都不约而同的跟进了,反正促销没坏处,厂商和用户都能满意。618期间一些产品也出现了历史低价,那么各个价位段的产品性价比
  • CSS单标签实现转转logo

    转转品牌升级后更新了全新的Logo,今天我们用纯CSS来实现转转的新Logo,为了有一定的挑战性,这里我们只使用一个标签实现,将最大化的使用CSS能力完成Logo的绘制与动画效果。新logo
  • Automa-通过连接块来自动化你的浏览器

    1、前言通过浏览器插件可实现自动化脚本的录制与编写,具有代表性的工具就是:Selenium IDE、Katalon Recorder,对于简单的业务来说可快速实现自动化的上手工作。Selenium IDEKat
  • 一篇聊聊Go错误封装机制

    %w 是用于错误包装(Error Wrapping)的格式化动词。它是用于 fmt.Errorf 和 fmt.Sprintf 函数中的一个特殊格式化动词,用于将一个错误(或其他可打印的值)包装在一个新的错误中。使
  • .NET 程序的 GDI 句柄泄露的再反思

    一、背景1. 讲故事上个月我写过一篇 如何洞察 C# 程序的 GDI 句柄泄露 文章,当时用的是 GDIView + WinDbg 把问题搞定,前者用来定位泄露资源,后者用来定位泄露代码,后面有朋友反
  • 花7万退货退款无门:谁在纵容淘宝珠宝商家造假?

    来源:极点商业作者:杨铭在淘宝购买珠宝玉石后,因为保证金不够赔付,店铺关闭,退货退款难、维权无门的比比皆是。“提供相关产品鉴定证书,支持全国复检,可以30天无理由退换货。&
  • 造车两年股价跌六成,小米的估值逻辑变了吗?

    如果从小米官宣造车后的首个交易日起持有小米集团的股票,那么截至2023年上半年最后一个交易日,投资者将浮亏59.16%,同区间的恒生科技指数跌幅为52.78%
Top