软件包 com.sun.net.httpserver
主要组成部分是:
- 描述请求和响应对的
HttpExchange
类, - 处理传入请求的
HttpHandler
接口,以及提供有用的处理程序实现的HttpHandlers
类, - 将 URI 路径映射到
HttpHandler
的HttpContext
类, HttpServer
类用于监听连接并将请求分派给处理程序,- 允许对请求进行预处理和后处理的
Filter
类。
SimpleFileServer
类提供了一个简单的 HTTP-only 文件服务(仅用于测试、开发和调试目的)。 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); // .. read the request body String response = "This is the 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); // creates a default executor server.start();
上面的示例创建了一个简单的 HttpServer,它使用调用应用程序线程为指向端口 8000 和路径 /applications/myapp/ 的传入 http 请求调用 handle() 方法。
HttpExchange
类封装了应用程序处理传入请求和生成适当响应所需的一切。
向 HttpServer 注册处理程序会创建一个 HttpContext
对象,并且可以将 Filter
对象添加到返回的上下文中。过滤器用于在将交换传递给交换处理程序之前执行交换的自动预处理和后处理。
对于敏感信息,HttpsServer
可用于处理受 SSL 或 TLS 协议保护的“https”请求。必须为 HttpsServer 提供一个 HttpsConfigurator
对象,其中包含一个已初始化的 SSLContext
。 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) { // get the remote address if needed InetSocketAddress remote = params.getClientAddress(); SSLContext c = getSSLContext(); // get the default parameters SSLParameters sslparams = c.getDefaultSSLParameters(); if (remote.equals (...) ) { // modify the default set for client x } params.setSSLParameters(sslparams); // statement above could throw IAE if any params invalid. // eg. if app has a UI and parameters supplied by a user. } });
- 自从:
- 1.6
-
类描述Authenticator 表示 HTTP 身份验证机制的实现。表示认证失败。
Authenticator.authenticate(HttpExchange)
方法返回类型的基类。指示必须重试身份验证。表示认证成功,可以通过调用Authenticator.Success.getPrincipal()
获取认证用户principal。BasicAuthenticator 提供 HTTP 基本身份验证的实现。用于预处理和后处理传入请求的过滤器。与HttpServer
关联的过滤器链。此类封装了接收到的 HTTP 请求和在一次交换中生成的响应。调用以处理 HTTP 交换的处理程序。HttpHandler
的实现实现了各种有用的处理程序,例如静态响应处理程序,或将一个处理程序与另一个处理程序互补的条件处理程序。表示通过 HTTP Basic 或 Digest 身份验证进行身份验证的用户。此类用于为HttpsServer
上的每个传入 https 连接配置 https 参数。此类实现了一个简单的 HTTP 服务。此类封装接收到的 HTTPS 请求和在一次交换中生成的响应,并定义特定于 HTTPS 协议的HttpExchange
扩展。表示与客户端协商的每个 https 连接的参数集。此类是HttpServer
的扩展,它提供对 HTTPS 的支持。HTTP 交换的不可变请求状态视图。一个简单的 HTTP 文件服务及其组件(仅用于测试、开发和调试目的)。描述服务在处理交换时产生的日志消息输出级别。