public interface ServletResponse
ServletResponse
オブジェクトを作成し、サーブレットのservice
メソッドに渡します。
レスポンスのMIMEボディでバイナリデータを送るにはgetOutputStream()
が返すServletOutputStream
を使用してください。
文字データを送るにはgetWriter()
が返すPrintWriter
オブジェクトを使用してください。
バイナリとテキストデータを混在させる、例えば、マルチパートのレスポンスを作成するのであればServletOutputStream
を使用して文字列の部分は手動で管理します。
レスポンスのMIMEボディの文字コードは以下のような設定で指定することができます。
ServletContext.setRequestCharacterEncoding(java.lang.String)
やデプロイメントディスクリプタを使用)
setCharacterEncoding(java.lang.String)
およびsetContentType(java.lang.String)
メソッドを使用して明示的に指定するか、
暗黙的にsetLocale(java.util.Locale)
メソッドを使用して指定できます。
明示的(explicit)な指定が暗黙(implicit)の指定よりも優先されます。
文字セットが明示的に指定されていない場合はISO-8859-1が使用されます。
setCharacterEncoding
やsetContentType
、setLocale
メソッドは
getWriter
を呼び出す前かつ文字エンコーディングが使用されるレスポンスをコミットする前にs呼び出す必要があります。
MIMEの詳細情報については、RFC 2045などのインターネットRFCを参照してください。 SMTPやHTTPなどのプロトコルでMIMEのプロファイルを定義しており、これらの標準はまだ進化し続けています。
ServletOutputStream
修飾子とタイプ | メソッドと説明 |
---|---|
void |
flushBuffer()
バッファ内のすべてのコンテンツを強制的にクライアントに書き出します。
|
int |
getBufferSize()
レスポンスに使用される実際のバッファサイズを返します。
|
String |
getCharacterEncoding()
このレスポンスで送信されるボディに使用されている文字エンコーディング(MIME文字セット)の名前を返します。
|
String |
getContentType()
レスポンスの中で送られるMIMEボディに使用されるコンテンツタイプを返します。
|
Locale |
getLocale()
setLocale(java.util.Locale) メソッドを使用してこのレスポンスに指定されたロケールを返します。 |
ServletOutputStream |
getOutputStream()
レスポンスのバイナリデータを書き出すのに適した
ServletOutputStream を返します。 |
PrintWriter |
getWriter()
文字のテキストをクライアントに送信することが出来る
PrintWriter のオブジェクトを返します。 |
boolean |
isCommitted()
レスポンスがすでにコミットされているかどうかを示すbooleanを返します。
|
void |
reset()
バッファに存在するすべてのデータとステータスコード、ヘッダーをクリアします。
|
void |
resetBuffer()
ヘッダーやステータスコードをクリアせずにレスポンスのバッファの内容をクリアします。
|
void |
setBufferSize(int size)
レスポンスボディの優先バッファサイズを設定します。
|
void |
setCharacterEncoding(String charset)
クライアントに送られるレスポンスの文字エンコーディング(MIME charset)を、例えばUTF-8に設定します。
|
void |
setContentLength(int len)
レスポンス内のコンテンツ本文の長さを設定します。
|
void |
setContentLengthLong(long len)
レスポンス内のコンテンツ本文の長さを設定します。
|
void |
setContentType(String type)
クライアントに送られるコンテンツタイプをレスポンスがまだコミットされていない場合に設定します。
|
void |
setLocale(Locale loc)
レスポンスがまたコミットされてない場合にレスポンスにロケールを設定します。
|
String getCharacterEncoding()
ServletContext.setRequestCharacterEncoding(java.lang.String)
やデプロイメントディスクリプタを使用)
setCharacterEncoding
およびsetContentType
メソッドを使用して明示的に指定することも、
setLocale
メソッドを暗黙的に使用して明示的に指定することもできます。明示的な指定は暗黙の指定よりも優先されます。
getWriter
が呼び出された後もしくはレスポンスがコミットされた後にこれらの方法が呼び出されても文字エンコーディングには影響しません。
文字エンコーディングが指定されていない場合はISO-8859-1
が返されます。
MIMEと文字エンコーディングの詳細情報については、RFC 2047を参照してください。
String
、例としてUTF-8
String getContentType()
setContentType(java.lang.String)
を使用して適切なコンテンツタイプが指定されていなければいけません。
コンテンツタイプが指定されていない場合、このメソッドはnullを返します。
コンテンツタイプが指定されており、文字エンコーディングが明示的またはgetCharacterEncoding()
やgetWriter()
が呼び出され暗黙的に指定されている場合は、
返された文字列にcharsetパラメータが含まれます。
文字エンコーディングが指定されていない場合、charsetパラメータは省略されます。String
、例としてtext/html; charset=UTF-8
、もしくはnullServletOutputStream getOutputStream() throws IOException
ServletOutputStream
を返します。
サーブレットコンテナはバイナリデータをエンコードしません。
OutputStream.flush()
を呼び出すことでレスポンスをコミットします。
このメソッドかgetWriter()
はどちらかのみを呼び出すことが出来ます。
reset()
メソッドが呼び出されてない限り両方を呼び出すことは出来ません。
ServletOutputStream
IllegalStateException
- このレスポンスでgetWriter
メソッドがすでに呼び出されている場合IOException
- I/Oエラーが発生したgetWriter()
,
reset()
PrintWriter getWriter() throws IOException
PrintWriter
のオブジェクトを返します。
このPrintWriter
はgetCharacterEncoding()
から返される文字エンコーディングを使用します。
getCharacterEncoding
で取得されるレスポンスの文字エンコーディングが指定されていない(つまり、メソッドがデフォルト値ISO-8859-1
を返す)場合、
getWriter
の文字エンコーディングをISO-8859-1
に更新します。
PrintWriter.flush()
を呼び出すことでレスポンスをコミットします。
このメソッドかgetOutputStream()
はどちらかのみを呼び出すことが出来ます。
reset()
メソッドが呼び出されてない限り両方を呼び出すことは出来ません。
PrintWriter
オブジェクトUnsupportedEncodingException
- getCharacterEncoding
から返された文字エンコーディングが使用できない文字エンコーディングだったIllegalStateException
- このレスポンスでgetOutputStream
メソッドがすでに呼び出されている場合IOException
- I/Oエラーが発生したgetOutputStream()
,
setCharacterEncoding(java.lang.String)
,
reset()
void setCharacterEncoding(String charset)
ServletContext.setResponseCharacterEncoding(String)
やデプロイメントディスクリプタや
setContentType(String)
メソッドやsetLocale(Locale)
メソッドで設定されている場合、
このメソッドはそれらの値を上書きします。
setContentType(java.lang.String)
をtext/html
というString
で呼び出し
このメソッドをUTF-8
というString
で呼び出すことは、
setContentType(java.lang.String)
をtext/html; charset=UTF-8
というString
で呼び出すことと同等です。
このメソッドは文字エンコーディングを変更するために繰り返し呼び出すことが出来ます。
このメソッドはgetWriter
が呼び出された後もしくはレスポンスがコミットされた後に呼び出しても何も行いません。
プロトコルが文字エンコーディングをクライアントに送信する方法を提供している場合、
コンテナはサーブレットレスポンスのwriterに使用されている文字エンコーディングをクライアントに送信する必要があります。
HTTPの場合は文字エンコーディングはテキストのメディアタイプにおいてContent-Type
ヘッダーの一部分として伝えられます。
サーブレットでコンテンツタイプが指定されていない場合、文字エンコーディングはHTTPヘッダーを介して伝えられないことに注意してください。
しかしながらサーブレットレスポンスのwriterを使用して書き込まれたテキストをエンコードするために使用されています。
charset
- IANA 定義の文字セットを示す文字列
(http://www.iana.org/assignments/character-sets)setContentType(java.lang.String)
,
setLocale(java.util.Locale)
void setContentLength(int len)
len
- クライアントに返されるコンテンツの長さを指定するinteger、Content-Lengthヘッダーを設定するvoid setContentLengthLong(long len)
len
- クライアントに返されるコンテンツの長さを指定するlong、Content-Lengthヘッダーを設定するvoid setContentType(String type)
text/html;charset=UTF-8
です。
レスポンスの文字エンコーディングはgetWriter
が呼び出される前にこのメソッドが呼び出された場合にのみ指定されたコンテンツタイプから設定されます。
このメソッドはコンテンツタイプと文字エンコーディングを変更するために繰り返し呼び出されることがあります。
このメソッドはレスポンスがコミットされた後に呼び出しても何も行いません。
このメソッドはgetWriter
が呼び出された後もしくはレスポンスがコミットされた後に呼び出しても文字エンコーディングの設定を行いません。
プロトコルが文字エンコーディングをクライアントに送信する方法を提供している場合、
コンテナはサーブレットレスポンスのwriterに使用されている文字エンコーディングをクライアントに送信する必要があります。
HTTPの場合は文字エンコーディングはテキストのメディアタイプにおいてContent-Type
ヘッダーの一部分として伝えられます。
type
- コンテンツのMIMEタイプを示すString
setLocale(java.util.Locale)
,
setCharacterEncoding(java.lang.String)
,
getOutputStream()
,
getWriter()
void setBufferSize(int size)
getBufferSize
を使用して取得することができます。
バッファを大きくすると実際に何かが送信される前に多くのコンテンツを書き込むことができ、 サーブレットに適切なステータスコードとヘッダーを設定できる期間が長くなります。 バッファを小さくするとサーバーのメモリー負荷が減少し、クライアントはデータの受信をより素早く開始できます
このメソッドは、レスポンスボディの内容が書き込まれる前に呼び出される必要があります。
コンテンツが書き込まれている場合、またはレスポンスオブジェクトがコミットされている場合、このメソッドはIllegalStateException
を投げます。
size
- 好ましいバッファーサイズIllegalStateException
- コンテンツがすでに書き込まれた後にこのメソッドが呼び出されたgetBufferSize()
,
flushBuffer()
,
isCommitted()
,
reset()
int getBufferSize()
setBufferSize(int)
,
flushBuffer()
,
isCommitted()
,
reset()
void flushBuffer() throws IOException
IOException
- バッファーを完全にフラッシュすることができなかったsetBufferSize(int)
,
getBufferSize()
,
isCommitted()
,
reset()
void resetBuffer()
IllegalStateException
を投げます。setBufferSize(int)
,
getBufferSize()
,
isCommitted()
,
reset()
boolean isCommitted()
setBufferSize(int)
,
getBufferSize()
,
flushBuffer()
,
reset()
void reset()
getWriter()
やgetOutputStream()
を呼び出した状態もクリアされます。
例えば、getWriter()
、reset()
、getOutputStream()
の順で呼び出すことは適正な方法です。
このメソッドの前にgetWriter()
やgetOutputStream()
が呼び出されていた場合、
対応する返されたWriterまたはOutputStreamは古いオブジェクトとなり、このオブジェクトを使用する動作は未定義です。
レスポンスがコミットされている場合、このメソッドはIllegalStateException
を投げます。IllegalStateException
- レスポンスがすでにコミットされていたsetBufferSize(int)
,
getBufferSize()
,
flushBuffer()
,
isCommitted()
void setLocale(Locale loc)
setContentType(java.lang.String)
やsetCharacterEncoding(java.lang.String)
を使用して文字エンコーディングが明示的に設定されておらず、
getWriter
がまだ呼び出されていない場合かつレスポンスがまだコミットされてない場合にレスポンスの文字エンコーディングをロケールから適切に設定します。
デプロイメントディスクリプタにlocale-encoding-mapping-list
要素が含まれ、
与えられたロケールに対して文字エンコーディングへのマッピングが用意されている場合はそれが使用されます。
そうでない場合はロケールから文字文字エンコーディングへのマッピングはコンテナに依存します。
このメソッドは文字エンコーディングを変更するために繰り返し呼び出されることがあります。
このメソッドはレスポンスがコミットされた後に呼び出しても何も行いません。
このメソッドはすでにsetContentType(java.lang.String)
がcharsetの指定を伴う呼び出しをされている場合、setCharacterEncoding(java.lang.String)
が呼び出されている場合、
getWriter
が呼び出されている場合、レスポンスがコミットされている場合は、レスポンスに文字エンコーディングの設定を行いません。
プロトコルが文字エンコーディングをクライアントに送信する方法を提供している場合、
コンテナはサーブレットレスポンスのwriterに使用されている文字エンコーディングをクライアントに送信する必要があります。
HTTPの場合は文字エンコーディングはテキストのメディアタイプにおいてContent-Type
ヘッダーの一部分として伝えられます。
サーブレットでコンテンツタイプが指定されていない場合、文字エンコーディングはHTTPヘッダーを介して伝えられないことに注意してください。
しかしながらサーブレットレスポンスのwriterを使用して書き込まれたテキストをエンコードするために使用されています。
loc
- レスポンスのロケールgetLocale()
,
setContentType(java.lang.String)
,
setCharacterEncoding(java.lang.String)
Locale getLocale()
setLocale(java.util.Locale)
メソッドを使用してこのレスポンスに指定されたロケールを返します。
レスポンスがコミットされた後にsetLocale
に対して行われた呼び出しは何も行いません。
ロケールが指定されていない場合、コンテナのデフォルトのロケールが返されます。setLocale(java.util.Locale)
Copyright © 1999-2017, Oracle and/or its affiliates. All Rights Reserved. Use is subject to license terms. Portions Copyright © 1999-2002 The Apache Software Foundation. Portions Copyright © 2017- @megascus. Translated by @megascus.