Class HttpResponse

java.lang.Object
nablarch.fw.web.HttpResponse
All Implemented Interfaces:
Result
Direct Known Subclasses:
DataRecordResponse, EntityResponse, FileResponse, StreamResponse

public class HttpResponse extends Object implements Result
HTTPレスポンスメッセージを生成する際に必要な情報を格納したクラス。

HTTPクライアントに対するレスポンス処理をフレームワークが行うために必要な 以下の情報を保持する。

  • レスポンスステータスコード
  • レスポンスヘッダ
  • レスポンスボディ
レスポンスボディの内容は、以下のいずれかの方式によって保持する。
  1. 内容をこのオブジェクトに直接保持する方式(バッファ方式)
  2. ボディに書き込むコンテンツファイルのパスのみを指定する方式(コンテンツパス方式)
setContentPath(String) の値を設定することで後者の方式がとられるようになる。
メモリ消費の観点や、コンテンツファイル管理の容易さから、 通常はコンテンツパスによる方式を使用すべきである。
Author:
Iwauo Tajima <iwauo@tis.co.jp>, Masato Inoue
  • Field Details

  • Constructor Details

    • HttpResponse

      @Published public HttpResponse()
      HttpResponseオブジェクトを生成する。

      以下のHTTPレスポンスメッセージに相当するHttpResponseオブジェクトを生成する。

           HTTP/1.1 200 OK
           Content-Type: text/plain;charset=UTF-8
       
    • HttpResponse

      @Published public HttpResponse(int statusCode)
      指定されたステータスコードのHttpResponseオブジェクトを生成する。

      このメソッドの処理は以下のソースコードと等価である。

           new HttpResponse().setStatusCode(statusCode);
       
      Parameters:
      statusCode - HTTPステータスコード
    • HttpResponse

      @Published public HttpResponse(int statusCode, String contentPath)
      指定されたHTTPステータスコードとコンテンツパスのHttpResponseオブジェクトを生成する。

      このメソッドの処理は以下のソースコードと等価である。

           new HttpResponse().setStatusCode(statusCode)
                             .setContentPath(contentPath);
       
      Parameters:
      statusCode - HTTPステータスコード
      contentPath - コンテンツパス
    • HttpResponse

      @Published public HttpResponse(String contentPath)
      指定されたコンテンツパスのHttpResponseオブジェクトを生成する。

      このメソッドの処理は以下のソースコードと等価である。

           new HttpResponse().setStatusCode(200)
                             .setContentPath(contentPath);
       
      Parameters:
      contentPath - コンテンツパス
  • Method Details

    • parse

      public static HttpResponse parse(String message)
      HTTPレスポンスメッセージの内容からHttpResponseオブジェクトを生成する。
      Parameters:
      message - HTTPレスポンスメッセージ
      Returns:
      HTTPレスポンスメッセージの内容に対応したHttpResponseオブジェクト
    • parse

      public static HttpResponse parse(byte[] message)
      HTTPレスポンスメッセージの内容からHttpResponseオブジェクトを生成する。
      Parameters:
      message - HTTPレスポンスメッセージ
      Returns:
      HTTPレスポンスメッセージの内容に対応したHttpResponseオブジェクト
    • getStatusCode

      @Published public int getStatusCode()
      HTTPレスポンスのステータスコードの値を返す。

      HTTPレスポンスがリダイレクトである場合は302を返す。

      Specified by:
      getStatusCode in interface Result
      Returns:
      HTTPステータスコード
      See Also:
    • setStatusCode

      @Published public HttpResponse setStatusCode(int code)
      HTTPレスポンスのステータスコードを設定する。

      デフォルトのステータスコードは200である。

      Parameters:
      code - HTTPステータスコード
      Returns:
      本オブジェクト
      Throws:
      IllegalArgumentException - 指定されたステータスコードが無効な場合
    • getReasonPhrase

      @Published public String getReasonPhrase()
      HTTPレスポンスのステータスフレーズを返す。
      Returns:
      ステータスフレーズ
    • getMessage

      @Published public String getMessage()
      処理結果に対する詳細情報を返す。

      返される詳細情報は以下の通りである。

         (ステータスコード): (ステータスフレーズ)
       
      Specified by:
      getMessage in interface Result
      Returns:
      詳細情報
    • getHttpVersion

      @Published public String getHttpVersion()
      HTTPバージョンを表す文字列を返す。
      Returns:
      HTTPバージョン名
    • setHttpVersion

      public HttpResponse setHttpVersion(String httpVersion)
      HTTPバージョンを設定する。

      デフォルト値は "HTTP/1.1" である。

      Parameters:
      httpVersion - HTTPバージョン名
      Returns:
      本オブジェクト
      Throws:
      IllegalArgumentException - HTTPバージョンの書式が無効な場合
    • getHeaderMap

      @Published public Map<String,String> getHeaderMap()
      HTTPレスポンスヘッダを格納するMapを返す。

      このMapに対する変更はレスポンスヘッダの内容に直接反映される。

      Returns:
      HTTPレスポンスヘッダを格納するMap
    • getHeader

      @Published public String getHeader(String headerName)
      HTTPレスポンスヘッダの値を返す。
      Parameters:
      headerName - ヘッダー名
      Returns:
      ヘッダーの値
    • setHeader

      @Published public void setHeader(String headerName, String value)
      HTTPレスポンスヘッダの値を設定する。
      Parameters:
      headerName - ヘッダー名
      value - ヘッダーの値
    • getContentType

      @Published public String getContentType()
      Content-Typeの値を取得する。

      Content-Typeが設定されている場合は、以下のソースコードと等価である。

         this.headers().get("Content-Type")
       

      Content-Typeが設定されていない場合は、以下の処理を行う。
      WebConfig.getAddDefaultContentTypeForNoBodyResponse() がtrueの場合、 またはボディが存在する場合に"text/plain;charset=UTF-8"を設定する。

      Returns:
      Contents-Typeの値
    • getCharset

      public Charset getCharset()
      Content-Typeに指定された文字エンコーディングを取得する。
      Returns:
      文字エンコーディング
    • setContentType

      @Published public HttpResponse setContentType(String contentType)
      Content-Typeを設定する。

      Content-Typeのデフォルト値は、"text/plain;charset=UTF-8" である。
      ボディに書き込む内容をコンテンツパスで指定する場合、 Content-Typeはコンテンツパスの拡張子から自動的に決定される為、 このメソッドを明示的に使用する必要は無い。

      Parameters:
      contentType - Content-Typeの値
      Returns:
      本オブジェクト
      See Also:
    • getLocation

      @Published public String getLocation()
      Locationの値を取得する。

      このメソッドの処理は以下のソースコードと等価である。

         this.headers().get("Location")
       
      Returns:
      Locationの値
    • setLocation

      @Published public HttpResponse setLocation(String location)
      Locationの値を設定する。

      リダイレクト時のHTTPクライアントの遷移先URIを設定する。
      デフォルトでは設定されない。

      Parameters:
      location - 遷移先URI
      Returns:
      本オブジェクト
      See Also:
    • setContentDisposition

      @Published public HttpResponse setContentDisposition(String fileName)
      Content-Dispositionの値を設定する。

      Content-Typeが明示的に設定されていない場合、 設定されたファイル名の拡張子に応じたContent-Typeを自動的に設定する。
      本メソッドではattachment属性を指定するため、ダウンロード時にダイアログが必ず表示される。

      Parameters:
      fileName - ファイル名
      Returns:
      本オブジェクト
    • setContentDisposition

      @Published public HttpResponse setContentDisposition(String fileName, boolean inline)
      Content-Dispositionの値を設定する。

      Content-Typeが明示的に設定されていない場合、 設定されたファイル名の拡張子に応じたContent-Typeを自動的に設定する。
      inlinetrueを指定した場合、ダウンロードされたファイルは クライアントアプリで自動的に開かれる。
      ただし、実際にそのような挙動となるかどうかは、クライアントの設定 およびOSのセキュリティ設定に依存する。

      Parameters:
      fileName - ファイル名
      inline - インライン表示する場合はtrue
      Returns:
      本オブジェクト
    • getContentDisposition

      @Published(tag="architect") public String getContentDisposition()
      Content-Dispositionの値を取得する。
      Returns:
      Content-Dispositionの値
    • getTransferEncoding

      public String getTransferEncoding()
      Transfer-Encodingの値を取得する。

      このメソッドの処理は以下のソースコードと等価である。

         this.headers().get("Transfer-Encoding")
       
      Returns:
      Transfer-Encodingの値
    • setTransferEncoding

      public HttpResponse setTransferEncoding(String encoding)
      Transfer-Encodingの値を設定する。

      このヘッダの値が"chunked"であった場合、 コンテンツボディはchunked-encodingに従って読み書きされる。
      デフォルトではこのヘッダは設定されない。

      Parameters:
      encoding - Transfer-Encodingの値
      Returns:
      本オブジェクト
      See Also:
    • getCookie

      @Published @Deprecated public HttpCookie getCookie()
      Deprecated.
      本メソッドは、複数のクッキー情報のうち先頭のクッキーを返すことしかできません。 複数のクッキー情報を返すことができるgetCookieList()を使用してください。
      サーバ側から送信されたクッキー情報のうち先頭のクッキーをを取得する。
      Returns:
      サーバ側から送信されたクッキー情報のうち先頭のクッキー。クッキーが存在しない場合はnull
    • getCookieList

      public List<jakarta.servlet.http.Cookie> getCookieList()
      サーバ側から送信されたクッキー情報のリストを取得する。
      Returns:
      クッキー情報のリスト
    • getHttpCookies

      @Published public List<HttpCookie> getHttpCookies()
      サーバ側から送信されたクッキーのリストをHttpCookieとして取得する。 HttpCookieは同じ属性を持つ複数のクッキーを保持する仕様であるため、 クッキーの属性が各々異なることを考慮し、リストとして返却する。
      Returns:
      クッキー (HttpCookie)のリスト
    • setCookie

      @Published @Deprecated public HttpResponse setCookie(HttpCookie cookie)
      Deprecated.
      本メソッドは、複数のクッキー情報を設定することを意図したメソッド名を持つ addCookie(HttpCookie)に置き換わりました。
      サーバ側から送信されたクッキー情報を設定する。
      Parameters:
      cookie - クッキー情報オブジェクト
      Returns:
      本オブジェクト
    • addCookie

      @Published public HttpResponse addCookie(HttpCookie cookie)
      サーバ側から送信されたクッキー情報を設定する。
      Parameters:
      cookie - クッキー情報オブジェクト
      Returns:
      本オブジェクト
    • setContentPath

      @Published public HttpResponse setContentPath(String path)
      コンテンツパスを設定する。

      本処理はsetContentPath(ResourceLocator)に委譲する。

      Parameters:
      path - コンテンツパス
      Returns:
      本オブジェクト
    • setContentPath

      @Published public HttpResponse setContentPath(ResourceLocator resource)
      コンテンツパスを設定する。

      指定したResourceLocatorオブジェクトがnullでない場合は、 リソース名からContent-Typeを自動的に設定した後、コンテンツパスを設定する。
      ResourceLocatorオブジェクトがnullの場合は、コンテンツパスのみ設定する。

      Parameters:
      resource - コンテンツパス
      Returns:
      本オブジェクト
      See Also:
    • getContentPath

      @Published public ResourceLocator getContentPath()
      コンテンツパスを取得する。

      HTTPレスポンスボディに書き込むコンテンツパスを取得する。

      Returns:
      コンテンツパス
    • getContentLength

      @Published public String getContentLength()
      Content-Lengthの値を取得する。

      HTTPレスポンスボディの内容がこのオブジェクト自体に保持されている場合に限り、 そのバイト数を返す。
      それ以外はnullを返す。

      Returns:
      Content-Lengthの値
    • cleanup

      public HttpResponse cleanup()
      リソースを開放する。
      Returns:
      本オブジェクト
    • isBodyEmpty

      @Published(tag="architect") public boolean isBodyEmpty()
      HTTPレスポンスボディの内容が設定されていなければtrueを返す。
      Returns:
      ボディの内容が設定されていなければtrue
    • getBodyString

      @Published(tag="architect") public String getBodyString()
      HTTPレスポンスボディの内容を表す文字列を返す。
      Returns:
      ボディの内容を表す文字列を返す
    • getBodyStream

      @Published(tag="architect") public InputStream getBodyStream()
      HTTPレスポンスボディの内容を保持するストリームを取得する。
      Returns:
      HTTPレスポンスボディの内容を保持するストリーム
    • setBodyStream

      @Published(tag="architect") public HttpResponse setBodyStream(InputStream bodyStream)
      HTTPレスポンスボディの内容を保持するストリームを設定する。
      Parameters:
      bodyStream - HTTPレスポンスボディの内容を保持するストリーム
      Returns:
      本オブジェクト
    • write

      HTTPレスポンスボディに文字列を書き込む。

      このメソッドで書き込まれたデータは、本オブジェクトが保持する バッファに保持され、クライアントソケットに対する書き込みは一切発生しない。 (このライタに対するflush()は単に無視される。)
      実際にソケットに対するレスポンス処理が行われるのは、 HttpResponseHandlerにレスポンスオブジェクトが戻された後である。 また、このオブジェクトにコンテンツパスが設定されている場合、 このライタに書き込まれた内容は単に無視される。

      Parameters:
      text - 書き込む文字列
      Returns:
      本オブジェクト
      Throws:
      HttpErrorResponse - バッファの上限を越えてデータが書き込まれた場合
    • write

      @Published public HttpResponse write(byte[] bytes) throws HttpErrorResponse
      HTTPレスポンスボディにバイト配列を書き込む。

      このメソッドで書き込まれたデータは、本オブジェクトが保持する バッファに保持され、クライアントソケットに対する書き込みは一切発生しない。 (このライタに対するflush()は単に無視される。)
      実際にソケットに対するレスポンス処理が行われるのは、 HttpResponseHandlerにレスポンスオブジェクトが戻された後である。 また、このオブジェクトにコンテンツパスが設定されている場合、 このライタに書き込まれた内容は単に無視される。

      Parameters:
      bytes - 書き込むバイト配列
      Returns:
      本オブジェクト
      Throws:
      HttpErrorResponse - バッファの上限を越えてデータが書き込まれた場合
    • write

      @Published public HttpResponse write(ByteBuffer bytes) throws HttpErrorResponse
      HTTPレスポンスボディにバイト配列を書き込む。

      このメソッドで書き込まれたデータは、本オブジェクトが保持する バッファに保持され、クライアントソケットに対する書き込みは一切発生しない。 (このライタに対するflush()は単に無視される。)
      実際にソケットに対するレスポンス処理が行われるのは、 HttpResponseHandlerにレスポンスオブジェクトが戻された後である。 また、このオブジェクトにコンテンツパスが設定されている場合、 このライタに書き込まれた内容は単に無視される。

      Parameters:
      bytes - 書き込むバイト列を格納したバッファ
      Returns:
      本オブジェクト
      Throws:
      HttpErrorResponse - バッファの上限を越えてデータが書き込まれた場合
    • toString

      public String toString()
      オブジェクトの内容と等価なHTTPレスポンスメッセージを返す。
      Overrides:
      toString in class Object
    • isSuccess

      public boolean isSuccess()
      処理が正常終了したかどうかを返す。

      HTTPステータスコードが400未満であれば正常終了とみなす。

      Specified by:
      isSuccess in interface Result
      Returns:
      正常終了した場合はtrue