HTTP服务器的主要任务就是接收HTTP请求,然后发送HTTP响应。图4是本文所介绍的非阻塞的HTTP服务器的对象模型。

图4 HTTP服务器的对象模型
在这个对象模型中,HttpServer类是服务器主程序,由它启动服务器。AcceptHandler负责接收客户连接,RequestHandler负责接收客户的HTTP请求,对其解析,然后生成相应的HTTP响应,再把它发送给客户。Request类表示HTTP请求,Response类表示HTTP响应,Content类表示HTTP响应的正文。
1.服务器主程序:HttpServer类
HttpServer类是服务器的主程序,它仅启用了单个主线程,采用非阻塞模式来接收客户连结,以及收发数据。例程2是HttpServer类的源程序:
//例程2 HttpServer.java
//此处省略import语句
public class HttpServer{
private Selector selector = null;
private ServerSocketChannel serverSocketChannel = null;
private int port = 80;
private Charset charset=Charset.forName("GBK");
public HttpServer()throws IOException{
//创建Selector和ServerSocketChannel
//把ServerSocketChannel设置为非阻塞模式,绑定到80端口
…
}
public void service() throws IOException{
serverSocketChannel.register(selector, SelectionKey.OP_ACCEPT,
//注册接收连结就绪事件
new AcceptHandler());
for(;;){
int n = selector.select();
if(n==0)continue;
Set readyKeys = selector.selectedKeys();
Iterator it = readyKeys.iterator();
while (it.hasNext()){
SelectionKey key=null;
try{
key = (SelectionKey) it.next();
it.remove();
final Handler handler = (Handler)key.attachment();
handler.handle(key); //由Handler处理相关事件
}catch(IOException e){
|