org.redkale.net.http

## 类 HttpResponse

- java.lang.Object
- - org.redkale.net.Response<HttpContext,HttpRequest>
  - - org.redkale.net.http.HttpResponse

-     public class HttpResponse
      extends Response<HttpContext,HttpRequest>

  Http响应包 与javax.servlet.http.HttpServletResponse 基本类似。 同时提供发送json的系列接口: public void finishJson(Type type, Object obj) RedKale提倡http+json的接口风格， 所以主要输出的数据格式为json， 同时提供异步接口。

  详情见: http://www.redkale.org

- - ### 嵌套类概要

    嵌套类
    限定符和类型 | 类和说明
    --- | ---
    `protected static interface` | `HttpResponse.BufferHandler` HttpResponse.finish 方法内调用 主要给@HttpCacheable使用
    `protected class` | `HttpResponse.TransferFileHandler`

  - ### 字段概要

    字段
    限定符和类型 | 字段和说明
    --- | ---
    `protected static byte[]` | `LINE`

    - ### 从类继承的字段 org.redkale.net.Response

      `channel, context, recycleListener, request`

  - ### 构造器概要

    构造器
    构造器和说明
    `HttpResponse(HttpContext context, HttpRequest request, java.lang.String[][] defaultAddHeaders, java.lang.String[][] defaultSetHeaders, java.net.HttpCookie defcookie)`

  - ### 方法概要

    所有方法 静态方法 实例方法 具体方法
    限定符和类型 | 方法和说明
    --- | ---
    `void` | `addCookie(java.net.HttpCookie... cookies)` 增加Cookie值
    `void` | `addHeader(java.lang.String name, java.lang.Object value)` 添加Header值
    `static ObjectPool<Response>` | `createPool(java.util.concurrent.atomic.AtomicLong creatCounter, java.util.concurrent.atomic.AtomicLong cycleCounter, int max, Creator<Response> creator)`
    `protected AnyValue.DefaultAnyValue` | `duplicateHeader()`
    `void` | `finish(boolean kill, java.nio.ByteBuffer... buffers)` 将指定ByteBuffer数组按响应结果输出
    `void` | `finish(boolean kill, java.nio.ByteBuffer buffer)` 将指定ByteBuffer按响应结果输出
    `void` | `finish(java.nio.ByteBuffer... buffers)` 将指定ByteBuffer数组按响应结果输出
    `void` | `finish(java.nio.ByteBuffer buffer)` 将指定ByteBuffer按响应结果输出
    `void` | `finish(java.io.File file)` 将指定文件按响应结果输出
    `void` | `finish(int status, java.lang.String message)` 以指定响应码附带内容输出
    `void` | `finish(java.lang.String obj)` 将指定字符串以响应结果输出
    `void` | `finish304()` 以304状态码输出
    `void` | `finish404()` 以404状态码输出
    `protected void` | `finishFile(java.io.File file, java.nio.ByteBuffer fileBody)` 将指定文件句柄或文件内容按响应结果输出，若fileBody不为null则只输出fileBody内容
    `void` | `finishJson(JsonConvert convert, java.lang.Object obj)` 将对象以JSON格式输出
    `void` | `finishJson(JsonConvert convert, java.lang.reflect.Type type, java.lang.Object obj)` 将对象以JSON格式输出
    `void` | `finishJson(java.lang.Object... objs)` 将对象以JSON格式输出
    `void` | `finishJson(java.lang.Object obj)` 将对象以JSON格式输出
    `void` | `finishJson(java.lang.reflect.Type type, java.lang.Object obj)` 将对象以JSON格式输出
    `protected HttpResponse.BufferHandler` | `getBufferHandler()` 获取输出时的拦截器
    `long` | `getContentLength()` 获取内容长度
    `java.lang.String` | `getContentType()` 获取 ContentType
    `protected java.lang.String` | `getHttpCode(int status)` 获取状态码对应的状态描述
    `protected java.lang.String` | `getHttpCode(int status, java.lang.String defValue)`
    `protected HttpRequest` | `getRequest()`
    `int` | `getStatus()` 获取状态码
    `protected void` | `init(AsyncConnection channel)`
    `protected boolean` | `recycle()`
    `protected AsyncConnection` | `removeChannel()`
    `<A> void` | `sendBody(java.nio.ByteBuffer buffer, A attachment, java.nio.channels.CompletionHandler<java.lang.Integer,A> handler)` 异步输出指定内容
    `protected void` | `setBufferHandler(HttpResponse.BufferHandler bufferHandler)` 设置输出时的拦截器
    `void` | `setContentLength(long contentLength)` 设置内容长度
    `void` | `setContentType(java.lang.String contentType)` 设置 ContentType
    `void` | `setHeader(java.lang.String name, java.lang.Object value)` 设置Header值
    `void` | `setStatus(int status)` 设置状态码
    `void` | `skipHeader()` 跳过header的输出 通常应用场景是，调用者的输出内容里已经包含了HTTP的响应头信息，因此需要调用此方法避免重复输出HTTP响应头信息。

    - ### 从类继承的方法 org.redkale.net.Response

      `finish, finish, getContext, prepare, refuseAlive, send, send, setRecycleListener`

    - ### 从类继承的方法 java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### 字段详细资料

    - #### LINE

          protected static final byte[] LINE

  - ### 构造器详细资料

    - #### HttpResponse

          public HttpResponse(HttpContext context,
                              HttpRequest request,
                              java.lang.String[][] defaultAddHeaders,
                              java.lang.String[][] defaultSetHeaders,
                              java.net.HttpCookie defcookie)

  - ### 方法详细资料

    - #### createPool

          public static ObjectPool<Response> createPool(java.util.concurrent.atomic.AtomicLong creatCounter,
                                                        java.util.concurrent.atomic.AtomicLong cycleCounter,
                                                        int max,
                                                        Creator<Response> creator)

    - #### removeChannel

          protected AsyncConnection removeChannel()

      覆盖:
        `removeChannel` 在类中 `Response<HttpContext,HttpRequest>`

    - #### recycle

          protected boolean recycle()

      覆盖:
        `recycle` 在类中 `Response<HttpContext,HttpRequest>`

    - #### init

          protected void init(AsyncConnection channel)

      覆盖:
        `init` 在类中 `Response<HttpContext,HttpRequest>`

    - #### getHttpCode

          protected java.lang.String getHttpCode(int status)

      获取状态码对应的状态描述
      参数:
        `status` - 状态码
      返回:
        状态描述

    - #### getRequest

          protected HttpRequest getRequest()

    - #### getHttpCode

          protected java.lang.String getHttpCode(int status,
                                                 java.lang.String defValue)

    - #### addCookie

          public void addCookie(java.net.HttpCookie... cookies)

      增加Cookie值
      参数:
        `cookies` - cookie

    - #### finishJson

          public void finishJson(java.lang.Object obj)

      将对象以JSON格式输出
      参数:
        `obj` - 输出对象

    - #### finishJson

          public void finishJson(JsonConvert convert,
                                 java.lang.Object obj)

      将对象以JSON格式输出
      参数:
        `convert` - 指定的JsonConvert
        `obj` - 输出对象

    - #### finishJson

          public void finishJson(java.lang.reflect.Type type,
                                 java.lang.Object obj)

      将对象以JSON格式输出
      参数:
        `type` - 指定的类型
        `obj` - 输出对象

    - #### finishJson

          public void finishJson(JsonConvert convert,
                                 java.lang.reflect.Type type,
                                 java.lang.Object obj)

      将对象以JSON格式输出
      参数:
        `convert` - 指定的JsonConvert
        `type` - 指定的类型
        `obj` - 输出对象

    - #### finishJson

          public void finishJson(java.lang.Object... objs)

      将对象以JSON格式输出
      参数:
        `objs` - 输出对象

    - #### finish

          public void finish(java.lang.String obj)

      将指定字符串以响应结果输出
      参数:
        `obj` - 输出内容

    - #### finish

          public void finish(int status,
                             java.lang.String message)

      以指定响应码附带内容输出
      参数:
        `status` - 响应码
        `message` - 输出内容

    - #### finish304

          public void finish304()

      以304状态码输出

    - #### finish404

          public void finish404()

      以404状态码输出

    - #### finish

          public void finish(java.nio.ByteBuffer buffer)

      将指定ByteBuffer按响应结果输出
      覆盖:
        `finish` 在类中 `Response<HttpContext,HttpRequest>`
      参数:
        `buffer` - 输出内容

    - #### finish

          public void finish(boolean kill,
                             java.nio.ByteBuffer buffer)

      将指定ByteBuffer按响应结果输出
      覆盖:
        `finish` 在类中 `Response<HttpContext,HttpRequest>`
      参数:
        `kill` - 输出后是否强制关闭连接
        `buffer` - 输出内容

    - #### finish

          public void finish(java.nio.ByteBuffer... buffers)

      将指定ByteBuffer数组按响应结果输出
      覆盖:
        `finish` 在类中 `Response<HttpContext,HttpRequest>`
      参数:
        `buffers` - 输出内容

    - #### finish

          public void finish(boolean kill,
                             java.nio.ByteBuffer... buffers)

      将指定ByteBuffer数组按响应结果输出
      覆盖:
        `finish` 在类中 `Response<HttpContext,HttpRequest>`
      参数:
        `kill` - 输出后是否强制关闭连接
        `buffers` - 输出内容

    - #### sendBody

          public <A> void sendBody(java.nio.ByteBuffer buffer,
                                   A attachment,
                                   java.nio.channels.CompletionHandler<java.lang.Integer,A> handler)

      异步输出指定内容
      类型参数:
        `A` - 泛型
      参数:
        `buffer` - 输出内容
        `attachment` - 异步回调参数
        `handler` - 异步回调函数

    - #### finish

          public void finish(java.io.File file)
                      throws java.io.IOException

      将指定文件按响应结果输出
      参数:
        `file` - 输出文件
      抛出:
        `java.io.IOException` - IO异常

    - #### finishFile

          protected void finishFile(java.io.File file,
                                    java.nio.ByteBuffer fileBody)
                             throws java.io.IOException

      将指定文件句柄或文件内容按响应结果输出，若fileBody不为null则只输出fileBody内容
      参数:
        `file` - 输出文件
        `fileBody` - 文件内容， 没有则输出file
      抛出:
        `java.io.IOException` - IO异常

    - #### skipHeader

          public void skipHeader()

      跳过header的输出 通常应用场景是，调用者的输出内容里已经包含了HTTP的响应头信息，因此需要调用此方法避免重复输出HTTP响应头信息。

    - #### duplicateHeader

          protected AnyValue.DefaultAnyValue duplicateHeader()

    - #### setHeader

          public void setHeader(java.lang.String name,
                                java.lang.Object value)

      设置Header值
      参数:
        `name` - header名
        `value` - header值

    - #### addHeader

          public void addHeader(java.lang.String name,
                                java.lang.Object value)

      添加Header值
      参数:
        `name` - header名
        `value` - header值

    - #### setStatus

          public void setStatus(int status)

      设置状态码
      参数:
        `status` - 状态码

    - #### getStatus

          public int getStatus()

      获取状态码
      返回:
        状态码

    - #### getContentType

          public java.lang.String getContentType()

      获取 ContentType
      返回:
        ContentType

    - #### setContentType

          public void setContentType(java.lang.String contentType)

      设置 ContentType
      参数:
        `contentType` - ContentType

    - #### getContentLength

          public long getContentLength()

      获取内容长度
      返回:
        内容长度

    - #### setContentLength

          public void setContentLength(long contentLength)

      设置内容长度
      参数:
        `contentLength` - 内容长度

    - #### getBufferHandler

          protected HttpResponse.BufferHandler getBufferHandler()

      获取输出时的拦截器
      返回:
        拦截器

    - #### setBufferHandler

          protected void setBufferHandler(HttpResponse.BufferHandler bufferHandler)

      设置输出时的拦截器
      参数:
        `bufferHandler` - 拦截器