Java getWriter()如何在HttpServletResponse中起作用?

Java getWriter()如何在HttpServletResponse中起作用?,java,servlets,Java,Servlets,在方法service()中,我们使用 PrintWriter out = res.getWriter(); 请告诉我它如何返回PrintWriter类对象,然后连接到浏览器并将数据发送到浏览器。它没有连接到浏览器-浏览器已经连接到服务器。它要么缓冲您在内存中写入的内容,然后在请求结束时传输数据,要么确保所有标题都已写入网络连接,然后返回一个将数据直接写入该网络连接的PrintWriter 在缓冲场景中,可能存在固定的缓冲区大小,如果超过该大小,则到目前为止写入的数据将“刷新”到网络连接。有一个

在方法
service()
中,我们使用

PrintWriter out = res.getWriter();
请告诉我它如何返回
PrintWriter
类对象,然后连接到浏览器并将数据发送到浏览器。

它没有连接到浏览器-浏览器已经连接到服务器。它要么缓冲您在内存中写入的内容,然后在请求结束时传输数据,要么确保所有标题都已写入网络连接,然后返回一个将数据直接写入该网络连接的
PrintWriter

在缓冲场景中,可能存在固定的缓冲区大小,如果超过该大小,则到目前为止写入的数据将“刷新”到网络连接。有一个缓冲区的最大优点是,如果中途出错,您可以更改对错误页面的响应。如果您已经开始在出现错误时编写响应,那么您无法清楚地指出错误


(还有在任何内容之前传输内容长度的问题,用于保持活动连接。如果在完成响应之前缓冲区用完,我会可靠地被告知响应将使用分块编码。)

还请注意,Servlet API的几个开源实现是可用的。这使您可以看到如何做到这一点


我相信官方的实现也是开源的,并且包含在Glassfish服务器中

一个相当简单的实现:

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

(分块编码可以处理在完成内容缓冲之前需要写出标题的情况。)@Tom:我想可能是这样,但我不确定。将编辑。