ToB企服应用市场:ToB评测及商务社交产业平台

标题: MiniTomcat 系列:第一章:解锁实现基础 HTTP 服务器的奥秘 [打印本页]

作者: 罪恶克星    时间: 2024-12-4 06:23
标题: MiniTomcat 系列:第一章:解锁实现基础 HTTP 服务器的奥秘
第一步:实现基础 HTTP 服务器

在这一章中,我们将从零开始编写一个简单的 HTTP 服务器。这个服务器的根本功能是监听一个端口,接收来自客户端的 HTTP 请求,并返回一个 HTTP 响应。我们将利用 Java 的 ServerSocket 类来实现网络监听,并通过简单的 InputStream 和 OutputStream 来处理 HTTP 请求和响应。
1.1 创建基础 HTTP 服务器

我们的目标是创建一个可以或许监听客户端请求的 HTTP 服务器,并能返回一个简单的响应。我们将分为几个步调:
1.2 实现代码
  1. import java.io.*;
  2. import java.net.*;
  3. public class SimpleHttpServer {
  4.     private static final int PORT = 8080;
  5.     public static void main(String[] args) {
  6.         try (ServerSocket serverSocket = new ServerSocket(PORT)) {
  7.             System.out.println("HTTP Server is running on port " + PORT);
  8.             while (true) {
  9.                 // 接受客户端连接
  10.                 Socket clientSocket = serverSocket.accept();
  11.                 System.out.println("New connection from " + clientSocket.getInetAddress());
  12.                 // 获取输入流,读取客户端请求
  13.                 InputStream inputStream = clientSocket.getInputStream();
  14.                 BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
  15.                 String requestLine = reader.readLine();
  16.                 if (requestLine != null) {
  17.                     System.out.println("Request: " + requestLine);
  18.                 }
  19.                 // 构建一个简单的 HTTP 响应
  20.                 OutputStream outputStream = clientSocket.getOutputStream();
  21.                 PrintWriter writer = new PrintWriter(outputStream, true);
  22.                 writer.println("HTTP/1.1 200 OK");
  23.                 writer.println("Content-Type: text/html; charset=UTF-8");
  24.                 writer.println();  // 空行,表示响应头结束
  25.                 writer.println("<html>");
  26.                 writer.println("<head><title>Simple HTTP Server</title></head>");
  27.                 writer.println("<body><h1>Hello, World!</h1></body>");
  28.                 writer.println("</html>");
  29.                 // 关闭连接
  30.                 clientSocket.close();
  31.             }
  32.         } catch (IOException e) {
  33.             e.printStackTrace();
  34.         }
  35.     }
  36. }
复制代码
1.3 代码解析

  1. ServerSocket serverSocket = new ServerSocket(PORT);
复制代码
这行代码创建了一个监听指定端口(本例为 8080)的 ServerSocket 实例。ServerSocket 是 Java 提供的一个用于监听客户端毗连的类。
  1. Socket clientSocket = serverSocket.accept();
复制代码
通过调用 accept() 方法,服务器会壅闭并期待来自客户端的毗连。一旦有客户端毗连到服务器,就会返回一个 Socket 对象,代表与该客户端的毗连。
  1. BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
  2. String requestLine = reader.readLine();
复制代码
通过输入流,我们从客户端读取 HTTP 请求的第一行(请求行),例如 GET / HTTP/1.1。这是 HTTP 请求的最基础信息,包含了请求方法、路径和 HTTP 版本。
  1. PrintWriter writer = new PrintWriter(outputStream, true);
  2. writer.println("HTTP/1.1 200 OK");
  3. writer.println("Content-Type: text/html; charset=UTF-8");
  4. writer.println();
  5. writer.println("<html>");
  6. writer.println("<head><title>Simple HTTP Server</title></head>");
  7. writer.println("<body><h1>Hello, World!</h1></body>");
  8. writer.println("</html>");
复制代码
构建一个简单的 HTTP 响应,响应内容为一个 HTML 页面,显示 "Hello, World!"。起首,我们发送 HTTP 响应的状态行,紧接着发送响应头(如 Content-Type)。响应体部分包含了一个简单的 HTML 页面。
  1. clientSocket.close();
复制代码
每次处理完一个请求后,我们关闭与客户端的毗连。
1.4 测试 HTTP 服务器

  1. curl http://localhost:8080
复制代码
1.5 总结

通过这一章,我们实现了一个非常简单的 HTTP 服务器,可以或许监听来自客户端的请求,并返回一个静态的 HTML 页面。这个 HTTP 服务器只是一个最根本的框架,但它为我们后续增加更多功能(如静态文件支持、Servlet 容器等)奠定了基础。
在下一章,我们将开始解析 HTTP 请求,并支持静态文件的提供。
文章出处:
https://zthinker.com/archives/di-1bu-shi-xian-ji-chu-http-fu-wu-qi
项目源代码地址:
https://github.com/daichangya/MiniTomcat/tree/chapter1/mini-tomcat
作者:代老师的编程课
出处:https://zthinker.com/
如果你喜欢本文,请长按二维码,关注 Java码界探秘
.


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4