你好,欢迎来到电脑编程技巧与维护杂志社! 杂志社简介广告服务读者反馈编程社区  
合订本订阅
 
 
您的位置:杂志经典 / 跟高手学编程
用Java实现非阻塞的HTTP服务器(十八)
 

 /* 创建FileChannel对象*/

  public void prepare() throws IOException {

    if (fileChannel == null)

        fileChannel = new RandomAccessFile(file, "r").getChannel();

    length = fileChannel.size();

    position = 0;          

  }

 

  /* 发送正文,如果发送完毕,就返回false,否则返回true */

  public boolean send(ChannelIO channelIO) throws IOException {

    if (fileChannel == null)

        throw new IllegalStateException();

    if (position < 0)      

        throw new IllegalStateException();

 

    if (position >= length) {

        return false;  //如果发送完毕,就返回false

    }

 

    position += channelIO.transferTo(fileChannel, position, length - position);

    return (position < length);

  }

 

  public void release() throws IOException {

    if (fileChannel != null){

        fileChannel.close();  //关闭fileChannel

        fileChannel = null;

    }

  }

}

9.运行HTTP服务器

运行命令“java HttpServer”,就启动了HTTP服务器。在HttpServer类的classpath下,有一个root目录,在该目录下存放了各种供浏览器访问的文档,比如login.htmhello.htmdata.rar文件等。打开IE浏览器,输入URLhttp://localhost/login.htm或者http://localhost/data.rar,就能接收到服务器发送过来的相应文档。如果浏览器按照POST方式访问hello.htm,服务器会返回HTTP405错误,因为本服务器不支持POST方式。

三、结语

HTTP协议是目前使用非常广泛的应用层协议,它规定了在网络上传输文档(主要是HTML格式的网页)的规则。HTTP协议的客户程序主要是浏览器。浏览器访问一个远程HTTP服务器上的网页的步骤如下:

1)建立与远程服务器的连结。

2)发送HTTP请求。

3)接收HTTP响应,断开与远程服务器的连结。

4)展示HTTP响应中的网页内容。

HTTP服务器必须接收HTTP请求,对它进行解析,然后返回相应的HTTP响应结果。本文创建了一个非阻塞的HTTP服务器,它首先读取HTTP请求,把它们存放在字节缓冲区内,当缓冲区的容量不够时,要扩充它的容量,以保证容纳HTTP请求的所有数据。接着,程序把字节缓冲区内的字节转换为字符串,对其进行解析,获得HTTP请求中的请求方式、URI和协议版本等信息,然后创建相应的HTTP响应,把它发送给客户程序。

  推荐精品文章

·2024年9月目录 
·2024年8月目录 
·2024年7月目录 
·2024年6月目录 
·2024年5月目录 
·2024年4月目录 
·2024年3月目录 
·2024年2月目录 
·2024年1月目录
·2023年12月目录
·2023年11月目录
·2023年10月目录
·2023年9月目录 
·2023年8月目录 

  联系方式
TEL:010-82561037
Fax: 010-82561614
QQ: 100164630
Mail:gaojian@comprg.com.cn

  友情链接
 
Copyright 2001-2010, www.comprg.com.cn, All Rights Reserved
京ICP备14022230号-1,电话/传真:010-82561037 82561614 ,Mail:gaojian@comprg.com.cn
地址:北京市海淀区远大路20号宝蓝大厦E座704,邮编:100089