Java 6 还提供了一个轻量级的纯 Java Http 服务器的实现。下面是一个简单的例子:
以下是引用片段:public static void main(String[] args) throws Exception{
HttpServerProvider httpServerProvider = HttpServerProvider.provider();
InetSocketAddress addr = new InetSocketAddress(7778);
HttpServer httpServer = httpServerProvider.createHttpServer(addr, 1);
httpServer.createContext("/myapp/", new MyHttpHandler());
httpServer.setExecutor(null);
httpServer.start();
System.out.println("started");
}
static class MyHttpHandler implements HttpHandler{
public void handle(HttpExchange httpExchange) throws IOException {
String response = "Hello world!";
httpExchange.sendResponseHeaders(200, response.length());
OutputStream out = httpExchange.getResponseBody();
out.write(response.getBytes());
out.close();
}
} |
然后,在浏览器中访问 http://localhost:7778/myapp/,我们得到:
图一 浏览器显示

首先,HttpServer 是从 HttpProvider 处得到的,这里我们使用了 JDK 6 提供的实现。用户也可以自行实现一个 HttpProvider 和相应的 HttpServer 实现。
其次,HttpServer 是有上下文(context)的概念的。比如,http://localhost:7778/myapp/ 中“/myapp/”就是相对于 HttpServer Root 的上下文。对于每个上下文,都有一个 HttpHandler 来接收 http 请求并给出回答。
最后,在 HttpHandler 给出具体回答之前,一般先要返回一个 Http head。这里使用 HttpExchange.sendResponseHeaders(int code, int length)。其中 code 是 Http 响应的返回值,比如那个著名的 404。length 指的是 response 的长度,以字节为单位。
其他新特性NetworkInterface 的增强
从 Java SE 1.4 开始,JDK 当中出现了一个网络工具类 java.net.NetworkInterface,提供了一些网络的实用功能。 在 Java SE 6 当中,这个工具类得到了很大的加强,新增了很多实用的方法。例如:
以下是引用片段:public boolean isUp()
用来判断网络接口是否启动并运行 public boolean isLoopback()
用来判断网络接口是否是环回接口(loopback) public boolean isPointToPoint()
用来判断网络接口是否是点对点(P2P)网络 public boolean supportsMulticast()
用来判断网络接口是否支持多播 public byte[] getHardwareAddress()
用来得到硬件地址(MAC) public int getMTU()
用来得到最大传输单位(MTU,Maximum Transmission Unit) public boolean isVirtual()
用来判断网络接口是否是虚拟接口 |
关于此工具类的具体信息,请参考 Java SE 6 相应文档。
