實現Http Server

來源:互聯網
上載者:User

實現Http Serve 一、使用SUN公司在JDK6中提供的新包com.sun.net.httpserver 


  JDK6提供了一個簡單的Http Server API,據此我們可以構建自己的嵌入式Http Server,它支援Http和Https協議,提供了HTTP1.1的部分實現,沒有被實現的那部分可以通過擴充已有的Http Server API來實現,程式員必須自己實現HttpHandler介面,HttpServer會調用HttpHandler實作類別的回調方法來處理用戶端請求,在這裡,我們把一個Http請求和它的響應稱為一個交換,封裝成HttpExchange類,HttpServer負責將HttpExchange傳給HttpHandler實作類別的回調方法. 
實現Http Server 


  實現Http Server比較簡單,我就不我做解釋,只要看下面的代碼就能明白。 
實現Https Server 


  HTTPS是以安全為目標的HTTP通道,簡單講是HTTP的安全版。即HTTP下加入SSL層,HTTPS的安全基礎是SSL,SSL 使用認證來進行驗證。對於需要使用 SSL 來保證通訊安全的用戶端和伺服器,都必須建立認證。JSSE 使用的認證要用與 J2SE 一起發布的 Java keytool 來建立。用下列命令來為 HTTP 伺服器建立一個 RSA 認證。 
prompt> keytool -genkey -keystore serverkeys -keyalg rsa -alias qusay 
這個命令會產生一個由別名 qusay 引用的認證,並將其儲存在一個名為 serverkeys 的檔案中。產生認證的時候,這個工具會提示我們輸入一些資訊。 

下面代碼示範了怎樣建立自己的Http Server 和Https Server: 

  Java代碼   import java.io.IOException;    import java.io.InputStream;    import java.io.OutputStream;    import java.net.InetSocketAddress;    import com.sun.net.httpserver.HttpExchange;    import com.sun.net.httpserver.HttpHandler;    import com.sun.net.httpserver.HttpServer;    public class MyHTTPServer {      public static void main(String[] args)      {        try {          //實現HTTP SERVER          HttpServer hs = HttpServer.create(new InetSocketAddress(8888),0);// 設定HttpServer的連接埠為80          hs.createContext("/hujun", new MyHandler());// 用MyHandler類內處理到/的請求          hs.setExecutor(null); // creates a default executor          hs.start();             //實現HTTPS SERVER          HttpsServer hss = HttpsServer.create(new InetSocketAddress(443),0);  //設定HTTPS連接埠這443          KeyStore ks = KeyStore.getInstance("JKS");   //建立認證庫          ks.load(new FileInputStream("認證名" ), "密碼");  //載入認證          KeyManagerFactory kmf = KeyManagerFactory.getInstance("SunX509");  //建立一個密鑰管理工廠          kmf.init(ks, "密碼");  //初始工廠          SSLContext sslContext = SSLContext.getInstance("SSLv3");  //建立認證實體          sslContext.init(kmf.getKeyManagers(), null, null);   //初始化認證          HttpsConfigurator conf = new HttpsConfigurator(sslContext);  //在https配置          hss.setHttpsConfigurator(conf);   //在https server載入配置          hss.setExecutor(null); // creates a default executor            hss.createContext("/", new MyHandler());// 用MyHandler類內處理到/的請求          hss.start();        } catch (Exception e){          e.printStackTrace();        }      }    }       class MyHandler implements HttpHandler {      public void handle(HttpExchange t) throws IOException {        InputStream is = t.getRequestBody();        String response = "<font color='#ff0000'>come on baby</font>";        t.sendResponseHeaders(200, response.length());        OutputStream os = t.getResponseBody();        os.write(response.getBytes());        os.close();      }    }   

 

 

 

 

 

二、使用Jetty 


  Jetty 是一個開源的servlet容器,它為基於Java的web內容,例如JSP和servlet提供運行環境。Jetty是使用Java語言編寫的,它的API以一組JAR包的形式發布。開發人員可以將Jetty容器執行個體化成一個對象,可以迅速為一些獨立運行(stand-alone)的Java應用提供網路和web串連。 


  需要最少的包: 
  commons-logging.jar 
  javax.servlet.jar 
  org.mortbay.jetty.jar 
  org.mortbay.jmx.jar 

下面直接看代碼,以嵌入模式啟動Jetty,目前貌似不支援HTTPS 

 

Java代碼   import org.mortbay.http.HttpContext;    import org.mortbay.http.HttpServer;    import org.mortbay.http.SocketListener;    import org.mortbay.http.handler.ResourceHandler;    public class JettySample {      public static void main(String[] args) throws Exception      {        //建立Jetty HttpServer對象        HttpServer server = new HttpServer();        //在連接埠8080上給HttpServer對象綁上一個listener,使之能夠接收HTTP請求        SocketListener listener = new SocketListener();        listener.setPort(8080);        server.addListener(listener);         

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.