用JAVA實現一個簡單地Http伺服器

來源:互聯網
上載者:User


SimpleHttpServer.java

import java.io.FileInputStream;import java.io.IOException;import java.net.InetSocketAddress;import java.net.Socket;import java.nio.ByteBuffer;import java.nio.CharBuffer;import java.nio.channels.FileChannel;import java.nio.channels.ServerSocketChannel;import java.nio.channels.SocketChannel;import java.nio.charset.Charset;import java.util.concurrent.ExecutorService;import java.util.concurrent.Executors;public class SimpleHttpServer {private int port=8080;  private ServerSocketChannel serverSocketChannel = null;  private ExecutorService executorService;  private static final int POOL_MULTIPLE = 4;  public SimpleHttpServer() throws IOException {    executorService= Executors.newFixedThreadPool(    Runtime.getRuntime().availableProcessors() * POOL_MULTIPLE);    serverSocketChannel= ServerSocketChannel.open();    serverSocketChannel.socket().setReuseAddress(true);    serverSocketChannel.socket().bind(new InetSocketAddress(port));    System.out.println("ddd");  }  public void service() {    while (true) {      SocketChannel socketChannel=null;      try {        socketChannel = serverSocketChannel.accept();        executorService.execute(new Handler(socketChannel));      }catch (IOException e) {         e.printStackTrace();      }    }  }  public static void main(String args[])throws IOException {    new SimpleHttpServer().service();  }  class Handler implements Runnable{  private SocketChannel socketChannel;  public Handler(SocketChannel socketChannel){    this.socketChannel=socketChannel;  }  public void run(){    handle(socketChannel);  }  public void handle(SocketChannel socketChannel){    try {        Socket socket=socketChannel.socket();        System.out.println("ddd" +        socket.getInetAddress() + ":" +socket.getPort());         ByteBuffer buffer=ByteBuffer.allocate(1024);         socketChannel.read(buffer);         buffer.flip();         String request=decode(buffer);         System.out.print(request);           StringBuffer sb=new StringBuffer("HTTP/1.1 200 OK\r\n");         sb.append("Content-Type:text/html\r\n\r\n");         socketChannel.write(encode(sb.toString()));         FileInputStream in;                  String firstLineOfRequest=request.substring(0,request.indexOf("\r\n"));         if(firstLineOfRequest.indexOf("login.htm")!=-1)            in=new FileInputStream("/Users/tokou/Documents/post.html");         else            in=new FileInputStream("/Users/tokou/Documents/post.html");         FileChannel fileChannel=in.getChannel();         fileChannel.transferTo(0,fileChannel.size(),socketChannel);         fileChannel.close();      }catch (Exception e) {         e.printStackTrace();      }finally {         try{           if(socketChannel!=null)socketChannel.close();         }catch (IOException e) {e.printStackTrace();}      }  }  private Charset charset=Charset.forName("GBK");  public String decode(ByteBuffer buffer){      CharBuffer charBuffer= charset.decode(buffer);    return charBuffer.toString();  }  public ByteBuffer encode(String str){      return charset.encode(str);  } }}



相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.