简单的java http服务器

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
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\n" +
                       "Server: Apache-Coyote/1.1\n" +
                       "Content-Type: text/html;charset=utf-8\n" +
                       "Content-Length: 1021\n" +
                       "Date: Wed, 09 Dec 2009 05:00:27 GMT\n" +
                       "\n";               
               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);
 }
}

简单的java http服务器,布布扣,bubuko.com

简单的java http服务器

上一篇:JAVA在线观看视频教程完整版


下一篇:Java精确测量代码运行时间 代码执行时间 纳秒 nanoTime