2026/1/11 17:05:16
网站建设
项目流程
什么是最经典最常用的网站推广方式,网店推广计划书,自己做电影下载网站,广州工程有限公司目录一、你有没有真正理解过#xff1a;一个 HTTP 请求是怎么“飞”到你的代码里的#xff1f;二、Spring Boot 为什么能监听和处理请求三、使用 JDK 自带的 HttpServer实现一个可运行的 HTTP 服务四、结语#xff1a;但你有没有想过#xff1a;HttpServer背后又是谁在监听…目录一、你有没有真正理解过一个 HTTP 请求是怎么“飞”到你的代码里的二、Spring Boot 为什么能监听和处理请求三、使用 JDK 自带的 HttpServer实现一个可运行的 HTTP 服务四、结语但你有没有想过HttpServer背后又是谁在监听端口、收发字节一、你有没有真正理解过一个 HTTP 请求是怎么“飞”到你的代码里的我们每天都会写的代码RestControllerpublicclassHelloController{GetMapping(/hello)publicStringhello(RequestParamStringname){returnHello, name;}}启动后浏览器访问 http://localhost:8080/hello?name张三立刻返回结果。但你有没有想过客户端发出的请求是怎么精准到达服务器的 8080 端口服务器收到一堆字节流后怎么知道要调用你的哪个方法响应又是什么时候、怎么写回去的Spring Boot 隐藏了太多细节让我们误以为“写注解 有服务”。今天我们扔掉所有框架只用 JDK 自带的 API亲手实现一个真正的 HTTP 服务。你会发现一切都没有魔法只有清晰的协议与流程。二、Spring Boot 为什么能监听和处理请求为了对比我们先用最简洁的方式说清楚 Spring Boot 的原理。Spring Boot 启动时会自动创建一个嵌入式 Tomcat 实例并绑定指定端口默认 8080。#比如server:port:8080Tomcat 内部基于 Java 的ServerSocket监听 TCP 连接。所有 HTTP 请求到达后Tomcat 解析成ServletRequest/ServletResponse转发给 Spring MVC 的DispatcherServlet。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端口HttpServerserverHttpServer.create(newInetSocketAddress(8080),0);//创建一个HttpHandlerHttpHandlerhandlernewMiniHandler();//如果有请求就交给handlerserver.createContext(/helloHttp,handler);//启动服务器server.start();System.out.println(服务器启动成功);}}publicclassMiniHandlerimplementsHttpHandler{Overridepublicvoidhandle(HttpExchangeexchange)throwsIOException{//1.获取URL的参数Stringqueryexchange.getRequestURI().getQuery();//拿到第一个参数Stringnamequery.split(name)[1];//2.以json格式返回Stringresponse{ \code\: 200, \message\: \OK\, \data\: \Hello, name!\ };//3.发送回复exchange.getResponseHeaders().set(Content-Type,application/json;charsetutf-8);;exchange.sendResponseHeaders(200,response.length());OutputStreamosexchange.getResponseBody();os.write(response.getBytes(StandardCharsets.UTF_8));os.close();}}运行这个 main 方法然后打开浏览器访问http://localhost:8080/helloHttp?nameHttp。你会看到客户端浏览器发起 TCP 连接到你的机器 8080 端口。JDK 的HttpServer接受连接解析 HTTP 请求行、头、查询参数。根据路径匹配到对应的HttpHandler。在handle方法里你可以自由读取请求信息方法、路径、参数、头、body。你手动设置状态码、响应头、内容长度然后通过getResponseBody()写入字节。底层自动把响应通过Socket发回客户端连接关闭或保持长连接。Spring Boot 没有创造新东西它只是把重复、易错的底层操作封装成了优雅的 API四、结语到这里我们已经看清了 HTTP 请求如何通过 JDK 原生 API 被处理。但你有没有想过HttpServer背后又是谁在监听端口、收发字节答案是Socket。HTTP 是一个应用层协议它依赖于传输层的 TCP 协议进行可靠数据传输而 TCP 连接在操作系统层面是通过 Socket API 来建立和管理的下一篇我们将彻底剥开最后一层封装用最原始的ServerSocket和Socket从零实现一个能跑通的 HTTP 服务 —— 亲眼看看 TCP 连接是如何建立的HTTP 报文是如何被一字节一字节解析的。下期预告深入 Socket 编程 —— 从零实现一个原始 HTTP 服务器看清 TCP 连接、字节流、协议解析的全过程。收藏 关注学习不迷路