我正在使用servlet编写数据传输应用程序,并希望能够在写入servlet响应后出现问题时发送错误响应。这可能吗?
我的问题是我将发送大型压缩csv文件,这些文件是从数据库中读取的数据创建的。一切都是使用流完成的,因此在写入servlet响应之后,可能会在创建csv文件时发生错误。我看到它发生了。
我注意到这只是在刷新servlet OutputStream之后的一个问题。如果没有刷新我可以发送错误响应,但不能发送。由于我处理的是大量数据,因此无法一次性发送所有数据。
答案 0 :(得分:1)
我正在使用servlet编写数据传输应用程序,并希望能够在写入servlet响应后出现问题时发送错误响应。这可能吗?
不是从服务器端开始的。服务器无法从客户端获取已刷新的字节。这是一个不归路。我认为这与响应的IOException
或Writer
上的OutputStream
不同。
如果它是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);