Package com.sun.net.httpserver
主要组件包括:
- 描述请求和响应对的
HttpExchange类, - 用于处理传入请求的
HttpHandler接口,以及提供有用的处理程序实现的HttpHandlers类, - 将URI路径映射到
HttpHandler的HttpContext类, - 用于监听连接并将请求分派给处理程序的
HttpServer类, - 允许请求的预处理和后处理的
Filter类。
SimpleFileServer类提供了一个简单的仅HTTP文件服务器(仅用于测试、开发和调试目的)。通过jwebserver工具提供了默认实现。
程序员必须实现HttpHandler接口。该接口提供了一个回调,用于处理来自客户端的传入请求。HTTP请求及其响应称为交换。HTTP交换由HttpExchange类表示。HttpServer类用于监听传入的TCP连接,并将这些连接上的请求分派给已向服务器注册的处理程序。
下面是一个最小的Http服务器示例:
class MyHandler implements HttpHandler {
public void handle(HttpExchange t) throws IOException {
InputStream is = t.getRequestBody();
read(is); // .. 读取请求体
String response = "这是响应";
t.sendResponseHeaders(200, response.length());
OutputStream os = t.getResponseBody();
os.write(response.getBytes());
os.close();
}
}
...
HttpServer server = HttpServer.create(new InetSocketAddress(8000), 0);
server.createContext("/applications/myapp", new MyHandler());
server.setExecutor(null); // 创建一个默认执行器
server.start();
上面的示例创建了一个简单的HttpServer,该服务器使用调用应用程序线程来调用handle()方法处理传入的指向端口8000和路径/applications/myapp/的http请求。
HttpExchange类封装了应用程序处理传入请求和生成适当响应所需的一切。
向HttpServer注册处理程序会创建一个HttpContext对象,可以向返回的上下文添加Filter对象。过滤器用于在将交换传递给交换处理程序之前自动进行预处理和后处理。
对于敏感信息,可以使用HttpsServer来处理由SSL或TLS协议保护的“https”请求。HttpsServer必须提供一个包含初始化的SSLContext的HttpsConfigurator对象。HttpsConfigurator可用于配置密码套件和其他SSL操作参数。可以如下创建一个简单的示例SSLContext:
char[] passphrase = "passphrase".toCharArray();
KeyStore ks = KeyStore.getInstance("JKS");
ks.load(new FileInputStream("testkeys"), passphrase);
KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");
kmf.init(ks, passphrase);
TrustManagerFactory tmf = TrustManagerFactory.getInstance("SunX509");
tmf.init(ks);
SSLContext ssl = SSLContext.getInstance("TLS");
ssl.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);
在上面的示例中,使用keytool实用程序创建的名为“testkeys”的密钥库文件用作客户端和服务器证书的证书存储。以下代码显示了如何在HttpsConfigurator中使用SSLContext,以及如何将SSLContext和HttpsConfigurator链接到HttpsServer。
server.setHttpsConfigurator (new HttpsConfigurator(sslContext) {
public void configure (HttpsParameters params) {
// 如果需要,获取远程地址
InetSocketAddress remote = params.getClientAddress();
SSLContext c = getSSLContext();
// 获取默认参数
SSLParameters sslparams = c.getDefaultSSLParameters();
if (remote.equals (...) ) {
// 修改客户端x的默认设置
}
params.setSSLParameters(sslparams);
// 上面的语句可能会抛出IAE(IllegalArgumentException),如果任何参数无效。
// 例如,如果应用程序具有UI并且参数由用户提供。
}
});
- 自版本:
- 1.6
-
ClassDescriptionAuthenticator表示HTTP身份验证机制的实现。表示身份验证失败。从
Authenticator.authenticate(HttpExchange)方法返回的返回类型的基类。表示必须重试身份验证。表示身份验证已成功,并且可以通过调用Authenticator.Success.getPrincipal()获取经过身份验证的用户principal。BasicAuthenticator提供了HTTP基本身份验证的实现。用于预处理和后处理传入请求的过滤器。与HttpServer关联的一系列过滤器。此类封装了接收到的HTTP请求和要生成的响应,形成一个交换。用于处理HTTP交换的处理程序。实现了各种有用处理程序的HttpHandler的实现,例如静态响应处理程序,或者通过另一个处理程序补充一个处理程序的条件处理程序。表示通过HTTP基本或摘要身份验证进行身份验证的用户。用于为HttpsServer上的每个传入https连接配置https参数的类。实现了一个简单的HTTP服务器。此类封装了接收到的HTTPS请求和要生成的响应,形成一个交换,并定义了特定于HTTPS协议的HttpExchange的扩展。表示与客户端协商的每个https连接的参数集。这个类是HttpServer的扩展,提供了对HTTPS的支持。表示HTTP交换的不可变请求状态的视图。一个简单的HTTP文件服务器及其组件(仅用于测试、开发和调试目的)。描述服务器在处理交换时生成的日志消息输出级别。