在现代软件开发中,嵌入式 HTTP 服务器的应用场景越来越广泛,例如在微服务架构、本地调试工具以及轻量级后端服务中。Java 提供了一个强大的工具——com.sun.net.httpserver 包,用于构建嵌入式 HTTP 服务器。本文将详细介绍如何使用这个 API 构建一个简单的 HTTP 服务器,并通过实例展示其功能。 一、核心类介绍 在使用 com.sun.net.httpserver 包之前,我们需要了解几个关键类:
public class BasicHttpServerExample { public static void main(String[] args) throws IOException { // 创建 HttpServer 实例,绑定到 8500 端口 HttpServer server = HttpServer.create(new InetSocketAddress(8500), 0); // 创建一个上下文,映射到根路径 “/” HttpContext context = server.createContext(“/”); // 设置请求处理器 context.setHandler(BasicHttpServerExample::handleRequest); // 启动服务器 server.start(); System.out.println(“Server started on port 8500”); }
private static void handleRequest(HttpExchange exchange) throws IOException {
String response = "Hi there!";
// 发送响应头,状态码为 200,内容长度为 response 的字节数
exchange.sendResponseHeaders(200, response.getBytes().length);
OutputStream os = exchange.getResponseBody();
os.write(response.getBytes());
os.close();
}
} 运行上述代码后,访问 http://localhost:8500,你将看到页面返回 “Hi there!”。 三、获取请求信息 在实际应用中,我们通常需要获取请求的详细信息,例如请求头、请求方法、查询参数等。以下是一个扩展示例,展示如何在请求处理器中获取这些信息。 java复制 import com.sun.net.httpserver.HttpExchange; import com.sun.net.httpserver.HttpHandler; import com.sun.net.httpserver.HttpServer; import com.sun.net.httpserver.HttpPrincipal; import java.io.IOException; import java.io.OutputStream; import java.net.InetSocketAddress; import java.util.Map;
public class BasicHttpServerExample2 { public static void main(String[] args) throws IOException { HttpServer server = HttpServer.create(new InetSocketAddress(8500), 0); HttpContext context = server.createContext(“/example”); context.setHandler(BasicHttpServerExample2::handleRequest); server.start(); System.out.println(“Server started on port 8500”); }
private static void handleRequest(HttpExchange exchange) throws IOException {
URI requestURI = exchange.getRequestURI();
printRequestInfo(exchange);
String response = "This is the response at " + requestURI;
exchange.sendResponseHeaders(200, response.getBytes().length);
OutputStream os = exchange.getResponseBody();
os.write(response.getBytes());
os.close();
}
private static void printRequestInfo(HttpExchange exchange) {
System.out.println("– headers –");
Map<String, List<String>> requestHeaders = exchange.getRequestHeaders();
requestHeaders.forEach((k, v) -> System.out.println(k + ":" + v));
System.out.println("– principal –");
HttpPrincipal principal = exchange.getPrincipal();
System.out.println(principal);
System.out.println("– HTTP method –");
String requestMethod = exchange.getRequestMethod();
System.out.println(requestMethod);
System.out.println("– query –");
String query = exchange.getRequestURI().getQuery();
System.out.println(query);
}
} 运行此代码后,访问 http://localhost:8500/example?x=1&y=2,你将在服务器控制台看到类似以下输出: 复制 – headers – Host:[localhost:8500] User-Agent:[Mozilla/5.0 …] Accept-Language:[en-US,en;q=0.9] … – principal – null – HTTP method – GET – query – x=1&y=2 四、总结 通过 com.sun.net.httpserver 包,我们可以轻松构建一个嵌入式 HTTP 服务器。它适用于轻量级的本地服务、微服务开发以及快速原型设计。本文通过两个示例展示了如何创建服务器、处理请求以及获取请求信息。希望这些内容能帮助你更好地理解和应用这一强大的工具。 在实际项目中,你还可以结合其他技术(如 Maven 用于项目管理)来构建更复杂的 HTTP 服务。
评论前必须登录!
注册