【发布时间】:2009-04-15 06:07:23
【问题描述】:
在service()方法中,我们使用
PrintWriter out = res.getWriter();
请告诉我它如何返回PrintWriter类对象,然后与浏览器建立连接并将数据发送到浏览器。
【问题讨论】:
在service()方法中,我们使用
PrintWriter out = res.getWriter();
请告诉我它如何返回PrintWriter类对象,然后与浏览器建立连接并将数据发送到浏览器。
【问题讨论】:
它没有建立到浏览器的连接——浏览器已经建立了到服务器的连接。它要么缓冲您在内存中写入的内容,然后在请求结束时传输数据,要么确保所有标头都已写入网络连接,然后返回PrintWriter,将数据直接写入该网络连接.
在缓冲场景中,可能有一个固定的缓冲区大小,如果超过这个值,到目前为止写入的数据将被“刷新”到网络连接。完全拥有缓冲区的最大优势是,如果中途出现问题,您可以更改对错误页面的响应。如果您已经开始在出现问题时编写响应,那么您可以做很多事情来清楚地指出错误。
(还有在任何内容之前传输内容长度的问题,以保持连接。如果您在完成响应之前用完了缓冲区,我会可靠地通知响应将使用分块编码。 )
【讨论】:
一个相当简单的实现:
PrintWriter getWriter() throws java.io.IOException {
return new PrintWriter(socket.getOutputStream());
}
【讨论】:
另请注意,Servlet API 的几个开源实现是可用的。这让您可以看到它是如何完成的。
我相信官方实现也是开源的,并且包含在 Glassfish 服务器中。
【讨论】: