2009-04-15 173 views

回答

11

它不是使一個連接到瀏覽器 - 瀏覽器已經連接到服務器。它可以緩衝你在內存中寫入的內容,然後在請求結束時傳輸數據,或者確保所有頭文件已寫入網絡連接,然後返回PrintWriter,將數據直接寫入該網絡連接。

在緩衝場景中,可能會有一個固定的緩衝區大小,如果超過該數量,到目前爲止所寫入的數據將被「刷新」到網絡連接。擁有緩衝區的一大優勢是,如果中途出現問題,您可以將響應更改爲錯誤頁面。如果您在出現問題時已經開始編寫響應,那麼可以乾淨地指出錯誤的方法並不多。如果在完成響應之前用完了緩衝區,我會可靠地通知響應將使用分塊編碼(chunked encoding) 。)

+0

(塊編碼可以處理,你需要完成的內容,在緩衝之前已經寫出來頭的情況。) – 2009-04-15 07:20:26

-1

另請注意,Servlet API的幾個開源實現可用。這可以讓你看到它是如何完成的。

我相信官方的實施也是開源的,幷包含在Glassfish服務器中。

0

一個非常簡單的實現:

PrintWriter getWriter() throws java.io.IOException { 
     return new PrintWriter(socket.getOutputStream()); 
}