import java.net.*;
import java.nio.ByteBuffer;
import java.nio.channels.*;
import java.nio.charset.*;
import java.util.concurrent.*;
import java.io.*;
public class SimpleHttpServer {
private int port = 80;
private ServerSocketChannel serverSocketChannel = null;
private ExecutorService executorService;
private static final int POOL_MULTIPLE = 4;
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));
e.printStackTrace();
}
}
}
new SimpleHttpServer().service();
}
}
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();
.println(socket.getInetAddress() + ":" + socket.getPort());
ByteBuffer buffer = ByteBuffer.allocate(1024);
socketChannel.read(buffer);
buffer.flip();
String request
= decode
(buffer
);
sb.append("Content-Type:text/html\r\n\r\n");
socketChannel.write(encode(sb.toString()));
String firstLineOfRequest
= request.
substring(0,
request.indexOf("\r\n"));
if (firstLineOfRequest.indexOf("login.htm") != -1)
else
FileChannel fileChannel = in.getChannel();
fileChannel.transferTo(0, fileChannel.size(), socketChannel);
e.printStackTrace();
} finally {
try {
if (socketChannel != null)
socketChannel.close();
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/1308