パッケージ jakarta.servlet

インターフェース ServletResponse

すべての既知のサブインターフェース:
HttpServletResponse
すべての既知の実装クラス:
HttpServletResponseWrapperServletResponseWrapper

public interface ServletResponse
サーブレットがクライアントにレスポンスを送信するのを支援するオブジェクトを定義します。サーブレットコンテナーは ServletResponse オブジェクトを作成し、それを引数としてサーブレットの service メソッドに渡します。

MIME 本文レスポンスでバイナリデータを送信するには、getOutputStream() によって返される ServletOutputStream を使用します。文字データを送信するには、getWriter() によって返される PrintWriter オブジェクトを使用します。たとえば、バイナリデータとテキストデータを混在させて、マルチパートレスポンスを作成するには、ServletOutputStream を使用して、文字セクションを手動で管理します。

MIME 本文レスポンスの文字セットは、次のいずれかの手法を使用して明示的に指定できます: リクエストごと、Web アプリごと ( ServletContext.setRequestCharacterEncoding(java.lang.String)、デプロイ記述子を使用)、およびコンテナーごと (そのコンテナーにデプロイされているすべての Web アプリケーションに対して、ベンダー固有の構成を使用))。前述の手法が複数使用されている場合、優先順位はリストされている順序になります。リクエストごとに、レスポンスの文字セットは、setCharacterEncoding(String)setCharacterEncoding(Charset)setContentType(java.lang.String) メソッドを使用して明示的に指定するか、setLocale(java.util.Locale) メソッドを使用して暗黙的に指定できます。明示的な指定は暗黙的な指定よりも優先されます。文字セットが明示的に指定されていない場合は、ISO-8859-1 が使用されます。setCharacterEncodingsetContentType、または setLocale メソッドは、getWriter の前、使用する文字エンコーディングのレスポンスをコミットする前に呼び出す必要があります。

MIME の詳細については、RFC 2045 などのインターネット RFC を参照してください。SMTP や HTTP などのプロトコルは、MIME のプロファイルを定義し、それらの標準はまだ進化しています。

作成者:
Various
関連事項:
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    void
    バッファ内のコンテンツを強制的にクライアントに書き込みます。
    int
    レスポンスに使用される実際のバッファサイズを返します。
    このレスポンスで送信される本文に使用される文字エンコード(MIME 文字セット)の名前を返します。
    このレスポンスで送信される MIME 本文に使用されるコンテンツ型を返します。
    setLocale(java.util.Locale) メソッドを使用して、このレスポンスに指定されたロケールを返します。
    レスポンスにバイナリデータを書き込むのに適した ServletOutputStream を返します。
    クライアントに文字テキストを送信できる PrintWriter オブジェクトを返します。
    boolean
    レスポンスがコミットされたかどうかを示すブール値を返します。
    void
    バッファーに存在するすべてのデータとステータスコード、ヘッダーをクリアします。
    void
    ヘッダーまたはステータスコードをクリアせずに、レスポンスの基になるバッファのコンテンツをクリアします。
    void
    setBufferSize(int size)
    レスポンスの本文の優先バッファサイズを設定します。
    void
    クライアントに送信されるレスポンスの文字エンコード(MIME 文字セット)を、たとえば UTF-8 に設定します。
    default void
    クライアントに送信されるレスポンスの文字エンコード(MIME 文字セット)を、たとえば UTF-8 に設定します。
    void
    レスポンス内のコンテンツ本文の長さを設定します。HTTP サーブレットでは、このメソッドは HTTP Content-Length ヘッダーを設定します。
    void
    レスポンス内のコンテンツ本文の長さを設定します。HTTP サーブレットでは、このメソッドは HTTP Content-Length ヘッダーを設定します。
    void
    レスポンスがまだコミットされていない場合、クライアントに送信されるレスポンスのコンテンツ型を設定します。
    void
    レスポンスがまだコミットされていない場合、レスポンスのロケールを設定します。
  • メソッドの詳細

    • getCharacterEncoding

      StringSE getCharacterEncoding()
      このレスポンスで送信された本文に使用される文字エンコーディング (MIME 文字セット) の名前を返します。レスポンスの文字エンコーディングを指定するための次のメソッドが、優先度の高い順に参照されます: リクエストごと、Web アプリごと ( ServletContext.setResponseCharacterEncoding(java.lang.String)、デプロイ記述子を使用)、およびコンテナーごと (ベンダー固有の構成を使用して、そのコンテナーにデプロイされたすべての Web アプリケーション)。これらのメソッドのうち、最初に結果が得られたものが返されます。リクエストごとに、レスポンスの文字セットは、setCharacterEncoding(String)setCharacterEncoding(Charset)setContentType(java.lang.String) メソッドを使用して明示的に指定するか、setLocale(java.util.Locale) メソッドを使用して暗黙的に指定できます。明示的な指定は暗黙的な指定よりも優先されます。getWriter が呼び出された後、またはレスポンスがコミットされた後にこれらのメソッドを呼び出しても、文字エンコーディングには影響しません。文字エンコーディングが指定されていない場合は、ISO-8859-1 が返されます。

      文字エンコードと MIME の詳細については、RFC 2047(http://www.ietf.org/rfc/rfc2047.txt) を参照してください。

      戻り値:
      文字エンコードの名前を指定する String、たとえば UTF-8
    • getContentType

      StringSE getContentType()
      このレスポンスで送信される MIME 本文に使用されるコンテンツ型を返します。レスポンスをコミットする前に、setContentType(java.lang.String) を使用して適切なコンテンツ型を指定する必要があります。コンテンツ型が指定されていない場合、このメソッドは null を返します。コンテンツ型が指定されており、getCharacterEncoding() または getWriter() に従って文字エンコードが明示的または暗黙的に指定されている場合、charset パラメーターは返される文字列に含まれます。文字エンコードが指定されていない場合、charset パラメーターは省略されます。
      戻り値:
      text/html; charset=UTF-8 などのコンテンツ型を指定する String または null
      導入:
      Servlet 2.4
    • getOutputStream

      ServletOutputStream getOutputStream() throws IOExceptionSE
      レスポンスにバイナリデータを書き込むのに適した ServletOutputStream を返します。サーブレットコンテナーはバイナリデータをエンコードしません。

      ServletOutputStream で flush() を呼び出すと、レスポンスがコミットされます。reset() が呼び出された場合を除き、このメソッドまたは getWriter() のいずれかを呼び出して、両方ではなく本体を書き込むことができます。

      戻り値:
      バイナリデータを書き込むための ServletOutputStream
      例外:
      IllegalStateExceptionSE - getWriter メソッドがこのレスポンスで呼び出された場合
      IOExceptionSE - 入力または出力の例外が発生した場合
      関連事項:
    • getWriter

      PrintWriterSE getWriter() throws IOExceptionSE
      クライアントに文字テキストを送信できる PrintWriter オブジェクトを返します。PrintWriter は、getCharacterEncoding() によって返される文字エンコードを使用します。getCharacterEncoding に従って、レスポンスの文字エンコードが指定されていない場合(つまり、メソッドはデフォルト値 ISO-8859-1 を返すだけ)、getWriter はそれを ISO-8859-1 に更新します。

      PrintWriter で flush() を呼び出すと、レスポンスがコミットされます。

      reset() が呼び出された場合を除き、このメソッドまたは getOutputStream() のいずれかを呼び出して、両方ではなく本体を書き込むことができます。

      戻り値:
      クライアントに文字データを返すことができる PrintWriter オブジェクト
      例外:
      UnsupportedEncodingExceptionSE - getCharacterEncoding によって返された文字エンコードを使用できない場合
      IllegalStateExceptionSE - getOutputStream メソッドがこのレスポンスオブジェクトに対してすでに呼び出されている場合
      IOExceptionSE - 入力または出力の例外が発生した場合
      関連事項:
    • setCharacterEncoding

      void setCharacterEncoding(StringSE encoding)
      クライアントに送信されるレスポンスの文字エンコード (MIME charset) を、たとえば UTF-8 に設定します。レスポンス文字エンコードが ServletContext.setResponseCharacterEncoding(java.lang.String)、デプロイ記述子、または setCharacterEncoding(Charset)setContentType(java.lang.String) または setLocale(java.util.Locale) メソッドを使用してすでに設定されている場合、このメソッドで設定された値はそれらの値をすべてオーバーライドします。text/html の String を使用して setContentType(java.lang.String) を呼び出し、UTF-8 の String を使用してこのメソッドを呼び出すことは、text/html; charset=UTF-8 の String を使用して setContentType(java.lang.String) を呼び出すことと同等です。

      このメソッドを繰り返し呼び出して、文字エンコーディングを変更できます。getWriter が呼び出された後、またはレスポンスがコミットされた後に呼び出された場合、このメソッドは効果がありません。

      (前の段落のとおり) このメソッドの呼び出しに効果がある場合、null を使用してこのメソッドを呼び出すと、このメソッドへの以前の呼び出しによって設定された文字エンコーディング ( setCharacterEncoding(Charset)setContentType(java.lang.String) または setLocale(java.util.Locale) ) がクリアされますが、ServletContext.setResponseCharacterEncoding(java.lang.String) または ServletContext.setResponseCharacterEncoding(java.lang.String) によって構成されたデフォルトの文字エンコーディングには影響しません。デプロイ記述子。

      このメソッドが無効または認識されない文字エンコーディングで呼び出された場合、その後 getWriter() を呼び出すと UnsupportedEncodingExceptionSE がスローされます。不明なエンコーディングのコンテンツは、getOutputStream() から返された ServletOutputStream で送信できます。

      コンテナーは、無効または認識されない文字エンコーディングを使用するこのメソッドへの呼び出しをログに記録することを選択できます。

      プロトコルがその方法を提供する場合、コンテナーは、サーブレットレスポンスのライターに使用される文字エンコーディングをクライアントに伝える必要があります。HTTP の場合、文字エンコードは、テキストメディア型の Content-Type ヘッダーの一部として通信されます。サーブレットがコンテンツ型を指定しない場合、文字エンコードは HTTP ヘッダーを介して通信できないことに注意してください。ただし、サーブレットレスポンスのライターを介して書き込まれたテキストのエンコードには引き続き使用されます。

      パラメーター:
      encoding - IANA 文字セット (http://www.iana.org/assignments/character-sets) または null) によって定義された文字セットのみを指定する文字列
      導入:
      Servlet 2.4
      関連事項:
    • setCharacterEncoding

      default void setCharacterEncoding(CharsetSE encoding)
      クライアントに送信されるレスポンスの文字エンコード (MIME charset) を、たとえば UTF-8 に設定します。レスポンス文字エンコードが ServletContext.setResponseCharacterEncoding(java.lang.String)、デプロイ記述子、または setCharacterEncoding(String)setContentType(java.lang.String) または setLocale(java.util.Locale) メソッドを使用してすでに設定されている場合、このメソッドで設定された値はそれらの値をすべてオーバーライドします。text/html の String を使用して setContentType(java.lang.String) を呼び出し、StandardCharsets.UTF_8SE を使用してこのメソッドを呼び出すことは、text/html; charset=UTF-8 の String を使用して setContentType(java.lang.String) を呼び出すことと同じです。

      このメソッドを繰り返し呼び出して、文字エンコーディングを変更できます。getWriter が呼び出された後、またはレスポンスがコミットされた後に呼び出された場合、このメソッドは効果がありません。

      (前の段落のとおり) このメソッドの呼び出しに効果がある場合、null を使用してこのメソッドを呼び出すと、このメソッドへの以前の呼び出しによって設定された文字エンコーディング ( setCharacterEncoding(String)setContentType(java.lang.String) または setLocale(java.util.Locale) ) がクリアされますが、ServletContext.setResponseCharacterEncoding(java.lang.String) または ServletContext.setResponseCharacterEncoding(java.lang.String) によって構成されたデフォルトの文字エンコーディングには影響しません。デプロイ記述子。

      プロトコルがその方法を提供する場合、コンテナーは、サーブレットレスポンスのライターに使用される文字エンコーディングをクライアントに伝える必要があります。HTTP の場合、文字エンコードは、テキストメディア型の Content-Type ヘッダーの一部として通信されます。サーブレットがコンテンツ型を指定しない場合、文字エンコードは HTTP ヘッダーを介して通信できないことに注意してください。ただし、サーブレットレスポンスのライターを介して書き込まれたテキストのエンコードには引き続き使用されます。

      実装では、このデフォルトのメソッドをオーバーライドして、より効率的な実装を提供することを強くお勧めします。

      パラメーター:
      encoding - 使用するエンコーディングまたは null を表す Charset インスタンス
      導入:
      Servlet 6.1
      関連事項:
    • setContentLength

      void setContentLength(int len)
      レスポンス内のコンテンツ本文の長さを設定します。HTTP サーブレットでは、このメソッドは HTTP Content-Length ヘッダーを設定します。

      このメソッドは、コンテンツの長さを変更するために繰り返し呼び出される場合があります。このメソッドは、レスポンスがコミットされた後に呼び出された場合には効果がありません。

      パラメーター:
      len - クライアントに返されるコンテンツの長さを指定する整数。Content-Length ヘッダーを設定します
    • setContentLengthLong

      void setContentLengthLong(long len)
      レスポンス内のコンテンツ本文の長さを設定します。HTTP サーブレットでは、このメソッドは HTTP Content-Length ヘッダーを設定します。

      このメソッドは、コンテンツの長さを変更するために繰り返し呼び出される場合があります。このメソッドは、レスポンスがコミットされた後に呼び出された場合には効果がありません。

      パラメーター:
      len - クライアントに返されるコンテンツの長さを指定する long; Content-Length ヘッダーを設定します
      導入:
      Servlet 3.1
    • setContentType

      void setContentType(StringSE type)
      レスポンスがまだコミットされていない場合、クライアントに送信されるレスポンスのコンテンツ型を設定します。指定されたコンテンツ型には、文字エンコーディング仕様 ( text/html;charset=UTF-8 など) が含まれる場合があります。レスポンスの文字エンコーディングは、getWriter() が呼び出される前にこのメソッドが呼び出された場合にのみ、指定されたコンテンツ型から設定されます。

      このメソッドは、コンテンツ型と文字エンコーディングを変更するために繰り返し呼び出される場合があります。このメソッドは、レスポンスがコミットされた後に呼び出されても効果がありません。getWriter が呼び出された後、またはレスポンスがコミットされた後に呼び出された場合、レスポンスの文字エンコードは設定されません。

      (前の段落のとおり) このメソッドの呼び出しに効果がある場合、null を使用してこのメソッドを呼び出すと、このメソッドへの以前の呼び出しによって設定されたすべてのコンテンツ型がクリアされ、このメソッドへの以前の呼び出しによって設定されたすべての文字エンコーディング ( setCharacterEncoding(String)setCharacterEncoding(Charset)、または setLocale(java.util.Locale) ですが、ServletContext.setResponseCharacterEncoding(java.lang.String) または デプロイ記述子を介して構成されたデフォルトの文字エンコーディングには影響しません。

      このメソッドが無効または認識されない文字エンコーディングで呼び出された場合、その後 getWriter() を呼び出すと UnsupportedEncodingExceptionSE がスローされます。不明なエンコーディングのコンテンツは、getOutputStream() から返された ServletOutputStream で送信できます。

      コンテナーは、無効または認識されない文字エンコーディングを使用するこのメソッドへの呼び出しをログに記録することを選択できます。

      プロトコルがそうする方法を提供する場合、コンテナーはサーブレットレスポンスのライターに使用されるコンテンツ型と文字エンコーディングをクライアントに通信する必要があります。HTTP の場合、Content-Type ヘッダーが使用されます。

      パラメーター:
      type - コンテンツの MIME 型を指定する String または null
      関連事項:
    • setBufferSize

      void setBufferSize(int size)
      レスポンスの本文の優先バッファサイズを設定します。サーブレットコンテナーは、少なくともリクエストされたサイズと同じ大きさのバッファを使用します。使用される実際のバッファサイズは、getBufferSize を使用して見つけることができます。

      バッファを大きくすると、実際に何かが送信される前により多くのコンテンツを書き込むことができるため、サーブレットに適切なステータスコードとヘッダーを設定する時間をより多く提供できます。バッファを小さくすると、サーバーのメモリ負荷が減少し、クライアントがデータをより早く受信できるようになります。

      このメソッドは、レスポンス本文のコンテンツが書き込まれる前に呼び出す必要があります。コンテンツが書き込まれた場合、またはレスポンスオブジェクトがコミットされた場合、このメソッドは IllegalStateException をスローします。

      パラメーター:
      size - 優先バッファサイズ
      例外:
      IllegalStateExceptionSE - コンテンツが書き込まれた後にこのメソッドが呼び出された場合
      関連事項:
    • getBufferSize

      int getBufferSize()
      レスポンスに使用される実際のバッファサイズを返します。バッファリングが使用されていない場合、このメソッドは 0 を返します。
      戻り値:
      使用される実際のバッファサイズ
      関連事項:
    • flushBuffer

      void flushBuffer() throws IOExceptionSE
      バッファ内のコンテンツを強制的にクライアントに書き込みます。このメソッドを呼び出すと、レスポンスが自動的にコミットされます。つまり、ステータスコードとヘッダーが書き込まれます。
      例外:
      IOExceptionSE - バッファをフラッシュする動作を完了できない場合。
      関連事項:
    • resetBuffer

      void resetBuffer()
      ヘッダーまたはステータスコードをクリアせずに、レスポンスの基になるバッファのコンテンツをクリアします。レスポンスがコミットされている場合、このメソッドは IllegalStateException をスローします。
      導入:
      Servlet 2.3
      関連事項:
    • isCommitted

      boolean isCommitted()
      レスポンスがコミットされたかどうかを示すブール値を返します。コミットされたレスポンスには、すでにステータスコードとヘッダーが書き込まれています。
      戻り値:
      レスポンスがコミットされたかどうかを示すブール値
      関連事項:
    • reset

      void reset()
      バッファーに存在するすべてのデータとステータスコード、ヘッダーをクリアします。getWriter() または getOutputStream() の呼び出し状態もクリアされます。たとえば、getWriter()reset()getOutputStream() を呼び出すことは正当です。このメソッドの前に getWriter() または getOutputStream() が呼び出された場合、対応する返された Writer または OutputStream が停止し、古いオブジェクトを使用する動作は未定義になります。レスポンスがコミットされている場合、このメソッドは IllegalStateException をスローします。
      例外:
      IllegalStateExceptionSE - レスポンスがすでにコミットされている場合
      関連事項:
    • setLocale

      void setLocale(LocaleSE loc)
      レスポンスがまだコミットされていない場合は、レスポンスのロケールを設定します。また、文字エンコーディングが setContentType(java.lang.String)setCharacterEncoding(String) または setCharacterEncoding(Charset) を使用して明示的に設定されておらず、getWriter がまだ呼び出されておらず、レスポンスがまだコミットされていない場合は、レスポンスの文字エンコーディングをロケールに応じて適切に設定します。デプロイ記述子に locale-encoding-mapping-list 要素が含まれており、その要素が指定されたロケールのマッピングを提供する場合、そのマッピングが使用されます。それ以外の場合、ロケールから文字エンコーディングへのマッピングはコンテナーに依存します。

      このメソッドは、ロケールと文字エンコーディングを変更するために繰り返し呼び出される場合があります。このメソッドは、レスポンスがコミットされた後に呼び出された場合には効果がありません。文字セット指定で setContentType(java.lang.String) が呼び出された後、setCharacterEncoding(String) が呼び出された後、setCharacterEncoding(Charset) が呼び出された後、getWriter が呼び出された後、またはレスポンスがコミットされた後に呼び出された場合、レスポンスの文字エンコーディングは設定されません。

      このメソッドの呼び出しが (前の段落のように) ロケールに影響を与える場合、null を指定してこのメソッドを呼び出すと、このメソッドへの以前の呼び出しで設定されたすべてのロケールがクリアされます。このメソッドの呼び出しが文字エンコーディングに影響する場合、null でこのメソッドを呼び出すと、以前に設定された文字エンコーディングがクリアされます。

      プロトコルがその方法を提供する場合、コンテナーは、サーブレットレスポンスのライタに使用されるロケールと文字エンコーディングをクライアントに伝える必要があります。HTTP の場合、ロケールは、Content-Language ヘッダー、テキストメディア型の Content-Type ヘッダーの一部としての文字エンコードを介して通信されます。サーブレットがコンテンツ型を指定しない場合、文字エンコードは HTTP ヘッダーを介して通信できないことに注意してください。ただし、サーブレットレスポンスのライターを介して書き込まれたテキストのエンコードには引き続き使用されます。

      パラメーター:
      loc - レスポンスのロケールまたは {code @null}
      関連事項:
    • getLocale

      LocaleSE getLocale()
      setLocale(java.util.Locale) メソッドを使用して、このレスポンスに指定されたロケールを返します。レスポンスのコミット後に setLocale を呼び出しても効果はありません。ロケールが指定されていない場合、コンテナーのデフォルトのロケールが返されます。
      戻り値:
      このレスポンスのロケール。
      関連事項: