在方法service()
中,我们使用
PrintWriter out = res.getWriter();
请告诉我它如何返回PrintWriter
类对象,然后连接到浏览器并将数据发送到浏览器。
答案 0 :(得分:11)
它没有制作与浏览器的连接 - 浏览器已经建立了与服务器的连接。它可以缓冲你在内存中写入的内容,然后在请求结束时传输数据,或者确保所有头文件都已写入网络连接,然后返回PrintWriter
,直接将数据写入网络连接。
在缓冲方案中,可能存在固定的缓冲区大小,如果超过该大小,则到目前为止写入的数据将“刷新”到网络连接。拥有一个缓冲区的最大好处是,如果在中途出现问题,您可以将响应更改为错误页面。如果您在出现问题时已经开始编写响应,那么您可以做很多事情来干净地指出错误。
(还有在任何内容之前传输内容长度的问题,用于保持活动连接。如果在完成响应之前用完了缓冲区,我可以确切地知道响应将使用分块编码。 )
答案 1 :(得分:0)
一个相当简单的实现:
PrintWriter getWriter() throws java.io.IOException {
return new PrintWriter(socket.getOutputStream());
}
答案 2 :(得分:-1)
另请注意,Servlet API的几个开源实现可用。这使您可以看到它是如何完成的。
我认为官方实施也是开源的,并且包含在Glassfish服务器中。