Java 原生实现 HTTP 服务
Aidan Engineer

不依赖任何第三方库或框架(只使用 jdk 里面包含的公开可用的类库),tomcat 属于第三方框架所以不要用,com.sun 下的也不要用,开发一个 http 服务

做加法运算:计算参数 a 和参数 b 的算术和,在浏览器地址栏里输入 http://localhost:port/add?a=4&b=7 ,浏览器窗口中显示 11
做乘法运算:计算参数 a 和参数 b 的算术乘积,在浏览器地址栏里输入 http://localhost:port/mult?a=4&b=7 ,浏览器窗口中显示 28

Java 开发文档中已经提供完整的方式, 英文教程

具体流程:

  1. 使用 ServerSocket 对客户端进行监听
  2. 接收 http,解析数据
  3. 提供服务并响应
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;

/**
* Created by Aidan on 2021/8/31 21:24
* GitHub: github.com/huaxin0304
* Blog: aidanblog.top
*/

public class HttpService {
public static Integer result = 0;

public static void main(String[] args) {
try {

// 监听端口号,只要是 8888 就能接收到
ServerSocket ss = new ServerSocket(8888);

// 实例化客户端,固定套路,通过服务端接受的对象,生成相应的客户端实例
Socket socket = ss.accept();
// 获取客户端输入流,就是请求过来的基本信息:请求头,换行符,请求体
BufferedReader bd = new BufferedReader(new InputStreamReader(socket.getInputStream()));

/**
* 接受 HTTP 请求,并解析数据
*/
String requestHeader;
if ((requestHeader = bd.readLine()) != null && !requestHeader.isEmpty()) {
System.out.println(requestHeader);
/**
* 方法处理代码
*/
int start = requestHeader.indexOf("?") + 3;
int terminal = requestHeader.indexOf("&");
String num1 = requestHeader.substring(start, terminal);
int space = requestHeader.indexOf("HTTP") - 1;
String num2 = requestHeader.substring(terminal + 3, space);
System.out.println(num1 + num2);
// 加法
if (requestHeader.contains("add")) { // 重在实现没有做 URL 检查
result = Integer.parseInt(num1) + Integer.parseInt(num2);
}
// 乘法
else if (requestHeader.contains("mult")) { // 重在实现没有做 URL 检查
result = Integer.parseInt(num1) * Integer.parseInt(num2);
}
}
// 发送回执
PrintWriter pw = new PrintWriter(socket.getOutputStream());

pw.println("HTTP/1.1 200 OK");
pw.println("Content-type:text/html");
pw.println();
pw.println("<h1>" + result + "</h1>");

pw.flush();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
  • 本文标题:Java 原生实现 HTTP 服务
  • 本文作者:Aidan
  • 创建时间:2021-11-10 18:13:46
  • 本文链接:https://aidanblog.top/native_code-http_service/
  • 版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
 评论