2009-04-15 2 views

答えて

11

いいえブラウザに接続してください - ブラウザは既にサーバーに接続しています。メモリに書き込む内容をバッファして、要求の最後にデータを送信するか、すべてのヘッダーがネットワーク接続に書き込まれたことを確認してから、そのネットワーク接続に直接データを書き込むPrintWriterを返します。

バッファリングのシナリオでは、バッファサイズが固定されている可能性があります。これを超えると、これまでに書き込まれたデータがネットワーク接続に「フラッシュ」されます。バッファーを持っていることの大きな利点は、途中で何かが間違っていたら、エラーページへの応答を変更できることです。何かがうまくいかなくなっても、すでに回答を書いているのであれば、エラーをきれいに示すためにできることはたくさんありません。

(キープアライブ接続の場合は、コンテンツの前にコンテンツの長さを送信することもあります)レスポンスを完了する前にバッファが足りなくなった場合、レスポンスがチャンクエンコーディングを使用することが確実に通知されます。)

+0

に –

+0

@Tom:私は、それがケースかもしれないと思いましたしかし、私は確信が持てませんでした。編集します。 –

-1

また、サーブレットAPIのいくつかのオープンソース実装が利用可能であることにも注意してください。これにより、どのように実行できるかを見ることができます。

公式の実装もオープンソースであり、Glassfishサーバーに含まれていると思います。

0

一つの非常に単純な実装:(。チャンクエンコーディングを使用すると、コンテンツのバッファリングを完了する前にヘッダを書かれている必要があるケースを扱うことができます)

PrintWriter getWriter() throws java.io.IOException { 
     return new PrintWriter(socket.getOutputStream()); 
} 
関連する問題