webdn
 
  首页     免费截图     VIP会员区     广告Banner     技术文档     网站模板  
网站截图,网站每日新 !
虚拟主机 域名注册

首页 >> WebDN 文档>> java入门 >> 第 10页 >>Java SE 6 新特性:轻量级的纯 Java Http 服务器的实现

 

Java SE 6 新特性:轻量级的纯 Java Http 服务器的实现

【摘 要】 首先,HttpServer 是从 HttpProvider 处得到的,这里我们使用了 JDK 6 提供的实现。用户也可以自行实现一个 HttpProvider 和相应的 HttpServer 实现

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 相应文档。

     



      | 
    点击这里给我发消息 | 关于WebDN  |  站点地图  |  联系我们  |  WebDN 会员  |  支付方式  |  友情链接  |  隐私政策
    © 2004-2008 WebDN.com 版权所有. 沪ICP备05040479号