gpt4 book ai didi

java - 为什么直到上传操作结束后客户端才检测到 HttpServletResponse 的 PrintWriter 内容?

转载 作者:行者123 更新时间:2023-12-02 04:25:20 31 4
gpt4 key购买 nike

我有一个 servlet,它使用 Apache Commons FileUpload 包来尝试向客户端发送进度信息。问题是,即使 servlet 在正确的时间将消息打印到 PrintWriter,客户端也不会在上传过程结束之前收到该信息。

这是来自服务器的片段:

servletFileUpload.setProgressListener(new ProgressListener() {

private static final long BYTE_THRESHOLD = 10 * 1024 * 1024;
private long bytesReadLastTime = -1;

@Override
public void update(final long bytesRead, final long contentLengthInBytes,
final int itemNumber) {
if ((bytesRead / BYTE_THRESHOLD) == (bytesReadLastTime / BYTE_THRESHOLD)) {
return;
}
String message = itemNumber + "|" + bytesRead + "|" + contentLengthInBytes;
sendResponse(message); // Uses HttpServletResponse.getWriter().println()
bytesReadLastTime = bytesRead;
}

});

这是来自客户端的代码片段(JavaScript):

_responseHandler: function (response) {
var data = response.split("|");
var fileNumber = data[0];
var bytesUploaded = data[1];
var bytesTotal = data[2];
console.log("File number: " + fileNumber +
", Bytes uploaded: " + bytesUploaded +
", Bytes total: " + bytesTotal);
}
}

当我上传大文件时,我发现 servlet 的 sendResponse() 方法按照预期以正确的时间间隔被多次调用。但是使用 Chrome 的开发者控制台,我看到 _responseHandler 直到上传操作结束才被调用,然后它被调用了很多次(就好像来自 servlet 的所有消息都聚集在一起一样)放在最后)。

如果相关,我的 servlet 会在本地运行以用于开发目的。

最佳答案

HTTP 是一种请求-响应协议(protocol)。客户端在发送完请求之前不会寻找响应。

关于java - 为什么直到上传操作结束后客户端才检测到 HttpServletResponse 的 PrintWriter 内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32260277/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com