java如何实现httpserver
使用 Java 原生 com.sun.net.httpserver 包实现
Java 提供了内置的轻量级 HTTP 服务器支持,无需第三方库即可快速实现:
import com.sun.net.httpserver.HttpServer;
import java.io.IOException;
import java.net.InetSocketAddress;
public class SimpleHttpServer {
public static void main(String[] args) throws IOException {
HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
server.createContext("/", exchange -> {
String response = "Hello from Java HTTP Server";
exchange.sendResponseHeaders(200, response.length());
exchange.getResponseBody().write(response.getBytes());
exchange.getResponseBody().close();
});
server.start();
System.out.println("Server started on port 8000");
}
}
基于 HttpExchange 处理请求
通过 HttpExchange 对象可以获取请求信息并构建响应:
server.createContext("/api", exchange -> {
String method = exchange.getRequestMethod();
if ("GET".equals(method)) {
String query = exchange.getRequestURI().getQuery();
String response = "Processed GET request with query: " + query;
exchange.sendResponseHeaders(200, response.length());
exchange.getResponseBody().write(response.getBytes());
} else {
exchange.sendResponseHeaders(405, -1); // Method Not Allowed
}
exchange.close();
});
添加多路由支持
通过不同上下文路径实现多路由处理:
server.createContext("/info", exchange -> {
String info = "Server Info: Java " + System.getProperty("java.version");
exchange.sendResponseHeaders(200, info.length());
exchange.getResponseBody().write(info.getBytes());
exchange.close();
});
server.createContext("/status", exchange -> {
exchange.getResponseHeaders().set("Content-Type", "application/json");
String json = "{\"status\":\"running\",\"uptime\":\"10m\"}";
exchange.sendResponseHeaders(200, json.length());
exchange.getResponseBody().write(json.getBytes());
exchange.close();
});
设置线程池控制并发
默认使用单线程,可通过配置线程池提高性能:
ExecutorService threadPool = Executors.newFixedThreadPool(10);
server.setExecutor(threadPool);
处理 POST 请求和请求体
读取 POST 请求的 body 内容:
server.createContext("/submit", exchange -> {
if ("POST".equals(exchange.getRequestMethod())) {
InputStream is = exchange.getRequestBody();
String body = new BufferedReader(new InputStreamReader(is))
.lines().collect(Collectors.joining("\n"));
String response = "Received: " + body;
exchange.sendResponseHeaders(200, response.length());
exchange.getResponseBody().write(response.getBytes());
}
exchange.close();
});
添加基本安全限制
实现简单的请求限制和验证:
server.createContext("/secure", exchange -> {
String auth = exchange.getRequestHeaders().getFirst("Authorization");
if (!"valid-token".equals(auth)) {
exchange.sendResponseHeaders(401, -1);
return;
}
// 处理授权通过的请求
});
使用第三方库(如 NanoHTTPD)
对于更复杂的需求,可以考虑轻量级第三方库:

import fi.iki.elonen.NanoHTTPD;
public class NanoServer extends NanoHTTPD {
public NanoServer() throws IOException {
super(8080);
start(NanoHTTPD.SOCKET_READ_TIMEOUT, false);
System.out.println("NanoHTTPD server running");
}
@Override
public Response serve(IHTTPSession session) {
return newFixedLengthResponse(
"Hello from NanoHTTPD\n" +
"URI: " + session.getUri()
);
}
}






