news 2026/6/18 9:59:15

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
用了几年 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 连接、字节流、协议解析的全过程。

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/15 9:37:32

数字人不限时长安装教程

要实现无限时长数字人生成,本地部署数字人模型是核心方案(摆脱平台时长限制),以下是零基础可落地的步骤: 环境准备:首先安装 Python 3.9 和 CUDA 11.8(显卡需 NVIDIA RTX 3060 及以上&#xff…

作者头像 李华
网站建设 2026/6/17 3:38:59

推荐系统测试全链路指标解析与实战

1 推荐系统测试概述 推荐系统作为信息过滤的核心技术,其质量保障需覆盖算法效果、工程性能和用户体验三个维度。测试人员需要建立贯穿离线测试、在线测试和线上监控的完整指标体系,确保推荐结果既准确又高效。 2 核心测试指标分类 2.1 准确性指标 精…

作者头像 李华
网站建设 2026/6/18 9:11:36

hadoop高可用搭建(版本:2.9.2)

集群分布: node01 namenode(active) datanode nodemanager zk node02 namenode(standby) datanode resourcemanager(standby) nodemanager zk node03 resourcemanager(active) datanode nodema…

作者头像 李华
网站建设 2026/6/15 14:42:11

怎么选水上乐园地面漆材料:耐水泡和附着力关键性能解析

水上乐园的运营维护中,如何选择适合水上乐园的漆料一直是行业痛点。许多水上设施面临漆膜起泡、脱落的问题。尤其在造浪池、水滑梯落水池等高频使用区域。普通漆料难以长期耐受水流冲击和化学腐蚀。运营方频繁翻新导致成本上升。选择不当还可能影响游客安全。 当前技…

作者头像 李华
网站建设 2026/6/16 2:48:23

传统建筑轩辕构件识别检测改进RetinaNet_r50-caffe_fpn_1x_coco方法实现

1. 传统建筑轩辕构件识别检测改进RetinaNet_r50-caffe_fpn_1x_coco方法实现 嗨,小伙伴们!今天我要和大家一起探索如何使用改进的RetinaNet模型来识别传统建筑中的轩辕构件。这个项目真的超有意思,结合了传统文化和现代AI技术,简直…

作者头像 李华