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

private Code code;  //状态代码

  private Content content;  //响应正文

  private boolean headersOnly;  //表示HTTP响应中是否仅包含响应头

  private ByteBuffer headerBuffer = null;  //响应头

 

  public Response(Code rc, Content c) {

    this(rc, c, null);

  }

 

  public Response(Code rc, Content c, Request.Action head) {

    code = rc;

    content = c;

    headersOnly = (head == Request.Action.HEAD);

  }

 

  private static String CRLF = "\r\n";

  private static Charset responseCharset = Charset.forName("GBK");

 

  /* 创建响应头的内容,把它存放到一个ByteBuffer */

  private ByteBuffer headers() {

    CharBuffer cb = CharBuffer.allocate(1024);

    for (;;) {

        try {

            cb.put("HTTP/1.1 ").put(code.toString()).put(CRLF);

            cb.put("Server: nio/1.1").put(CRLF);

            cb.put("Content-type: ").put(content.type()).put(CRLF);

            cb.put("Content-length: ")

                .put(Long.toString(content.length())).put(CRLF);

            cb.put(CRLF);

            break;

        } catch (BufferOverflowException x) {

            assert(cb.capacity() < (1 << 16));

            cb = CharBuffer.allocate(cb.capacity() * 2);

            continue;

        }

    }

    cb.flip();

    return responseCharset.encode(cb);  //编码

  }

 

  /* 准备HTTP响应中的正文以及响应头的内容 */

  public void prepare() throws IOException {

    content.prepare();

    headerBuffer= headers();

  }

 

  /* 发送HTTP响应,如果全部发送完毕,返回false,否则返回true */

  public boolean send(ChannelIO cio) throws IOException {

    if (headerBuffer == null)

        throw new IllegalStateException();

  推荐精品文章

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

  联系方式
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