简单的java http服务器

package testreadline;
import java.net.*;
import java.nio.ByteBuffer;
import java.nio.channels.*;
import java.nio.charset.*;
import java.util.concurrent.*;
import java.io.*;
public class test {

 public static void main(String[] args) throws IOException {
  new SimpleHttpServer().service();
  
 }
}
 class SimpleHttpServer {
 private int port = 80;
 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));
 }

 public void service() {
  while (true) {
   SocketChannel socketChannel = null;
   try {
    socketChannel = serverSocketChannel.accept();
    executorService.execute(new Handler(socketChannel));
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }


}

class Handler implements Runnable {
 private SocketChannel socketChannel;
 public Handler(SocketChannel socketChannel) {
  this.socketChannel = socketChannel;
 }

 @Override
 public void run() {
  handle(socketChannel);
 }

 private void handle(SocketChannel socketChannel) {
  try {
   Socket socket = socketChannel.socket();  
   System.out.println(socket.getInetAddress() + ":" + socket.getPort());
      String info = "HTTP/1.1 200 OK
" +
                       "Server: Apache-Coyote/1.1
" +
                       "Content-Type: text/html;charset=utf-8
" +
                       "Content-Length: 1021
" +
                       "Date: Wed, 09 Dec 2009 05:00:27 GMT
" +
                       "
";                
               OutputStream os = socket.getOutputStream();
               os.write(info.getBytes("utf-8"));
               os.flush();
               String html="<H1>港港都是泪,还是早停困!</H1>";
               os.write(html.getBytes("utf-8"));
               os.flush();
  
  
  
  } catch (IOException e) {
   e.printStackTrace();
  } finally {
   try {
    if (socketChannel != null)
     socketChannel.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
  }
 }

 private Charset charset = Charset.forName("GBK");

 private ByteBuffer encode(String string) {
  return ByteBuffer.allocate(string.length() * 2).get(
    string.getBytes(charset));
 }

 private String decode(ByteBuffer buffer) {
  byte[] source = new byte[buffer.position() + 1];
  buffer.put(source);
  return new String(source, charset);
 }
}
原文地址:https://www.cnblogs.com/egai/p/3599527.html