模块  jdk.httpserver

Package com.sun.net.httpserver

提供简单的高级Http服务器API,可用于构建嵌入式HTTP服务器。 支持“http”和“https”。 API提供RFC 2616 (HTTP 1.1)和RFC 2818 (HTTP over TLS)的部分实现。 此API未提供的任何HTTP功能都可以使用API通过应用程序代码实现。

程序员必须实现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,它使用调用应用程序线程来调用handle()方法,用于传入指向端口8000的http请求,以及路径/ applications / myapp /。

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