1. 概述
HttpServer 是 JDK 1.6 以后内置的一个轻量级 HTTP 服务器(在 rt.jar 包中的 com.sun.net.httpserver 包下)。一个 HttpServer 实例被绑定到一个IP地址和端口号,并监听来自该地址的客户端TCP连接。其子类 HttpsServer 实现了 HTTPS 服务,还能处理 HTTPS 请求。
一个简单的 HTTP 服务器:
// 创建 http 服务器, 绑定本地 8080 端口
HttpServer httpServer = HttpServer.create(new InetSocketAddress(8080), 0);
// 创建上下文监听, "/" 表示匹配所有 URI 请求
httpServer.createContext("/", new HttpHandler() {
@Override
public void handle(HttpExchange httpExchange) throws IOException {
/*
* PS: 必须按顺序设置响应: 添加响应头, 发送响应码和内容长度, 写出响应内容, 关闭处理器
*/
// 响应内容
byte[] respContents = "Hello World".getBytes("UTF-8");
// 设置响应头
httpExchange.getResponseHeaders().add("Content-Type", "text/html; charset=UTF-8");
// 设置响应code和内容长度
httpExchange.sendResponseHeaders(200, respContents.length);
// 设置响应内容
httpExchange.getResponseBody().write(respContents);
// 关闭处理器, 同时将关闭请求和响应的输入输出流(如果还没关闭)
httpExchange.close();
}
});
// 启动服务
httpServer.start();
浏览器访问: http://localhost:8080,输出: Hello World
使用 HttpServer 实现一个 HTTP 服务器主要涉及下面几个类:
HttpServer: 表示一个服务器实例
HttpContext: 服务器监听器的上下文
HttpHandler: 上下文对应的 http 请求处理器
HttpExchange: 对 http 请求和响应的数据封装