无框架简易Java服务器后端
不使用像 Spring Boot 这样的框架,使用 Java 内置的HttpServer
(从 Java 1.7 开始引入)来创建一个简单的 Web 后端,处理xxxx/test/query
接口,接收 JSON 请求体并返回字符串响应。
示例代码:
import com.google.gson.Gson;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.InetSocketAddress;
import java.net.HttpURLConnection;
import java.net.URI;
import java.nio.charset.StandardCharsets;
import java.util.HashMap;
import java.util.Map;
import com.sun.net.httpserver.HttpExchange;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;
public class SimpleWebServer {
public static void main(String[] args) throws IOException {
HttpServer server = HttpServer.create(new InetSocketAddress(8080), 0);
server.createContext("/test/query", new QueryHandler());
server.setExecutor(null);
server.start();
System.out.println("Server started on port 8080");
}
static class QueryHandler implements HttpHandler {
@Override
public void handle(HttpExchange exchange) throws IOException {
if ("POST".equals(exchange.getRequestMethod())) {
// 读取请求体
BufferedReader reader = new BufferedReader(new InputStreamReader(exchange.getRequestBody(), StandardCharsets.UTF_8));
StringBuilder requestBody = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
requestBody.append(line);
}
reader.close();
// 这里可以对请求体进行处理,比如解析JSON数据
// 目前只是简单打印请求体
System.out.println("Received request body: " + requestBody.toString());
// 构造响应
String response = "这是接口的响应字符串";
exchange.sendResponseHeaders(HttpURLConnection.HTTP_OK, response.length());
OutputStream outputStream = exchange.getResponseBody();
outputStream.write(response.getBytes(StandardCharsets.UTF_8));
outputStream.close();
} else {
// 处理非POST请求
exchange.sendResponseHeaders(HttpURLConnection.HTTP_METHOD_NOT_ALLOWED, 0);
}
}
}
}
代码中:
- 主类
SimpleWebServer
启动一个 HTTP 服务器,监听在本地的 8080 端口。 QueryHandler
类实现了HttpHandler
接口,处理/xxxx/test/query
路径的请求。- 当接收到 POST 请求时,读取请求体内容,目前只是简单打印请求体内容,然后构造一个字符串响应返回给客户端。
- 如果接收到的不是 POST 请求,则返回
HTTP_METHOD_NOT_ALLOWED
状态码。
上述代码使用了com.sun.net.httpserver
包,这是 Java 内部的 API,在一些环境中可能有限制。另外,代码中使用了 Google 的 Gson 库来处理 JSON,需要在项目中引入 Gson 库。