【问题标题】:How does getWriter() function in an HttpServletResponse?getWriter() 如何在 HttpServletResponse 中起作用?
【发布时间】:2009-04-15 06:07:23
【问题描述】:

service()方法中,我们使用

PrintWriter out = res.getWriter();

请告诉我它如何返回PrintWriter类对象,然后与浏览器建立连接并将数据发送到浏览器。

【问题讨论】:

    标签: java servlets


    【解决方案1】:

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

    在缓冲场景中,可能有一个固定的缓冲区大小,如果超过这个值,到目前为止写入的数据将被“刷新”到网络连接。完全拥有缓冲区的最大优势是,如果中途出现问题,您可以更改对错误页面的响应。如果您已经开始在出现问题时编写响应,那么您可以做很多事情来清楚地指出错误。

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

    【讨论】:

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

    一个相当简单的实现:

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

    【讨论】:

      【解决方案3】:

      另请注意,Servlet API 的几个开源实现是可用的。这让您可以看到它是如何完成的。

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

      【讨论】:

        猜你喜欢
        • 2012-03-19
        • 2020-06-10
        • 1970-01-01
        • 1970-01-01
        • 2018-02-03
        • 2019-02-19
        • 1970-01-01
        • 1970-01-01
        • 2014-12-31
        相关资源
        最近更新 更多