简单的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); } } |
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。