gpt4 book ai didi

java - 写入 servlet 响应后发送错误响应

转载 作者:行者123 更新时间:2023-12-01 15:35:11 24 4
gpt4 key购买 nike

我正在使用 servlet 编写数据传输应用程序,并且希望在写入 servlet 响应后出现问题时能够发送错误响应。这可能吗?

我的问题是,我将发送根据从数据库读取的数据创建的大型压缩 csv 文件。一切都是通过流完成的,因此在写入 servlet 响应后创建 csv 文件时可能会出现错误。我已经看到它发生了。

我注意到这只是在刷新 servlet OutputStream 后才会出现的问题。如果它还没有被刷新,我可以发送错误响应,但不能在之后发送。由于我正在处理大量数据,因此一次性发送所有内容是不可行的。

最佳答案

I am writing a data transfer application using a servlet and would like to be able to send an error response if a problem occurs after the servlet response has been written to. Is that possible?

不是从服务器端开始。服务器无法从客户端取回已刷新的字节。这是一个不归路。我认为这涉及与响应的 WriterOutputStream 上的 IOException 不同的异常。

如果它是 HTML(尽管这是一个不好的做法;HTML 属于 JSP),您可以打印一些强制位置更改的 JS 代码,如下所示:

try {
writer.write(someHtml);
} catch (SomeException e) {
writer.write("<script>window.location = 'error.jsp';</script>");
// ...
}

但这在非 HTML 响应中是不可能的。您确实需要事先将整个响应缓冲在内存或(临时)磁盘上。如果缓冲完美无缺,那么您可以再次将其传送到响应。

try {
processAndSaveInMemoryOrTempDiskFile(someData, byteArrayOrFileLocation);
} catch (SomeException e) {
throw new ServletException(e, "Processing some data failed.");
}

copyFromMemoryOrTempDiskToResponse(byteArrayOrFileLocation, writer);

关于java - 写入 servlet 响应后发送错误响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8976526/

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