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

用了几年 Spring Boot,你真的知道请求是怎么进来的吗?—— JDK 原生实现 HTTP 服务

目录

      • 一、你有没有真正理解过:一个 HTTP 请求是怎么“飞”到你的代码里的?
      • 二、Spring Boot 为什么能监听和处理请求
      • 三、使用 JDK 自带的 HttpServer实现一个可运行的 HTTP 服务
      • 四、结语:
        • 但你有没有想过:`HttpServer`背后又是谁在监听端口、收发字节?

一、你有没有真正理解过:一个 HTTP 请求是怎么“飞”到你的代码里的?

我们每天都会写的代码:

@RestControllerpublicclassHelloController{@GetMapping("/hello")publicStringhello(@RequestParamStringname){return"Hello, "+name;}}

启动后,浏览器访问 http://localhost:8080/hello?name=张三,立刻返回结果。

但你有没有想过:

  • 客户端发出的请求,是怎么精准到达服务器的 8080 端口?
  • 服务器收到一堆字节流后,怎么知道要调用你的哪个方法?
  • 响应又是什么时候、怎么写回去的?

Spring Boot 隐藏了太多细节,让我们误以为“写注解 = 有服务”。

今天,我们扔掉所有框架,只用 JDK 自带的 API,亲手实现一个真正的 HTTP 服务。

你会发现:一切都没有魔法,只有清晰的协议与流程。

二、Spring Boot 为什么能监听和处理请求

为了对比,我们先用最简洁的方式说清楚 Spring Boot 的原理。

  1. Spring Boot 启动时会自动创建一个嵌入式 Tomcat 实例,并绑定指定端口(默认 8080)。
#比如:server:port:8080
  1. Tomcat 内部基于 Java 的ServerSocket监听 TCP 连接。
  2. 所有 HTTP 请求到达后,Tomcat 解析成ServletRequest/ServletResponse,转发给 Spring MVC 的DispatcherServlet
  3. DispatcherServlet根据注解(如 @RequestMapping)找到对应方法,执行后把返回值序列化成 JSON 写回响应。

整个过程我们几乎没写一行网络代码,却能提供服务。这很强大,但也容易让我们对底层产生“黑盒”感。

现在,我们把所有框架都扔掉——不用 Spring、不用 Tomcat、不用任何第三方库,只用 JDK 自带的 API,来实现一个完整的 HTTP 服务。

三、使用 JDK 自带的 HttpServer实现一个可运行的 HTTP 服务

从 Java 6 起,JDK 提供了com.sun.net.httpserver.HttpServer,这是一个轻量级、纯 Java 实现的嵌入式 HTTP 服务器。代码极简,却已经能完整处理请求和响应。

publicclassMyServer{publicstaticvoidmain(String[]args)throwsIOException{//监听8080端口HttpServerserver=HttpServer.create(newInetSocketAddress(8080),0);//创建一个HttpHandlerHttpHandlerhandler=newMiniHandler();//如果有请求,就交给handlerserver.createContext("/helloHttp",handler);//启动服务器server.start();System.out.println("服务器启动成功");}}publicclassMiniHandlerimplementsHttpHandler{@Overridepublicvoidhandle(HttpExchangeexchange)throwsIOException{//1.获取URL的参数Stringquery=exchange.getRequestURI().getQuery();//拿到第一个参数Stringname=query.split("name=")[1];//2.以json格式返回Stringresponse="{ \"code\": 200, \"message\": \"OK\", \"data\": \"Hello, "+name+"!\" }";//3.发送回复exchange.getResponseHeaders().set("Content-Type","application/json;charset=utf-8");;exchange.sendResponseHeaders(200,response.length());OutputStreamos=exchange.getResponseBody();os.write(response.getBytes(StandardCharsets.UTF_8));os.close();}}

运行这个 main 方法,然后打开浏览器访问http://localhost:8080/helloHttp?name=Http

你会看到:

  1. 客户端(浏览器)发起 TCP 连接到你的机器 8080 端口。
  2. JDK 的HttpServer接受连接,解析 HTTP 请求行、头、查询参数。
  3. 根据路径匹配到对应的HttpHandler
  4. handle方法里,你可以自由读取请求信息(方法、路径、参数、头、body)。
  5. 你手动设置状态码、响应头、内容长度,然后通过getResponseBody()写入字节。
  6. 底层自动把响应通过Socket发回客户端,连接关闭(或保持长连接)。

Spring Boot 没有创造新东西,它只是把重复、易错的底层操作封装成了优雅的 API

四、结语:

到这里,我们已经看清了 HTTP 请求如何通过 JDK 原生 API 被处理。

但你有没有想过:HttpServer背后又是谁在监听端口、收发字节?

答案是:Socket。

HTTP 是一个应用层协议,它依赖于传输层的 TCP 协议进行可靠数据传输,而 TCP 连接在操作系统层面是通过 Socket API 来建立和管理的,下一篇,我们将彻底剥开最后一层封装,用最原始的ServerSocketSocket,从零实现一个能跑通的 HTTP 服务 —— 亲眼看看 TCP 连接是如何建立的,HTTP 报文是如何被一字节一字节解析的。

下期预告:深入 Socket 编程 —— 从零实现一个原始 HTTP 服务器,看清 TCP 连接、字节流、协议解析的全过程。

😊收藏 + 关注,学习不迷路!

http://www.gsyq.cn/news/117487.html

相关文章:

  • 小白也能跑通华为云OCR:手把手整合 Hutool 与华为云签名 SDK 并解决依赖难题
  • 2025年12月HT250灰铁,HT200灰铁,灰铁棒料厂商推荐:聚焦铸造企业综合实力与核心竞争力 - 品牌鉴赏师
  • Qt/C++实现Ubuntu应用自重启
  • 2025年12月水处理设备用阻垢剂,水处理设备用活性炭,地下水处理设备公司推荐:资质核验+案例解析 - 品牌鉴赏师
  • Windows系列---【如何清理C盘?】
  • 制砂机远程监控运维管理系统方案
  • zz langchain常用retriever实战,MMR和ReOrder
  • Linux-LVM 方式挂载大于3T磁盘,详细操作过程
  • 30、深入理解 inotify 与内存管理
  • 【2025最新】Sumatra PDF 下载安装教程:轻量高效的PDF阅读器全方位指南
  • 用频繁跳槽换来的技术积累,对于实际的开发人员来说不是什么好事。 - ukyo-
  • [论文笔记] Detecting Vulnerable Android Inter-App Communication in Dynamically Loaded Code
  • “管理员阻止你运行此应用”怎么办?详解系统权限解除与一键修复方案
  • 【从 “堵车” 到 “飙车”:Java 并发 / 并行终极解析 + 接口抗并发实战指南】
  • 商品颜色/尺码选项太多|谷歌爬虫不收录怎么办
  • 交换机基础拥塞处理机制(Tail Drop 、RED、ECN)
  • 给AI“考题”换个计分方式,谷歌SigLIP让多模态模型学得又快又好!
  • 【漏洞】Druid未授权访问漏洞及修复方案
  • 【2025最新】植物大战僵尸融合版玩法革新、下载安装教程与策略解析
  • 15、Linux 网络文件系统(NFS)使用指南
  • 2025年12月打圈机公司推荐,专业制造与品牌保障口碑之选 - 品牌鉴赏师
  • 【单片机毕业设计】【mcugc-mcu929】基于单片机的智能环境监测与控制
  • 2025年12月全国集装箱液袋,高温液袋,沥青液袋厂家品牌推荐榜,彰显国产技术实力 - 品牌鉴赏师
  • java 16
  • 求职兼职招聘系统源码 Python+Django+Vue 前后分离 设计文档
  • FastGS = 在 3DGS 框架下,引入「多视图一致性驱动的结构优化(VCD + VCP)」
  • 15、高效使用浏览器:Konqueror的实用技巧与操作指南
  • [MoeCTF 2022]nyanyanya
  • “知数善用”漫画番外(下):从“沼泽困局”到“产品超市”,业务妹子与数据哥的协同共生之路
  • lxy_蓝桥杯C++_系列四_时空复杂度