私は、サーブレットを使用してデータ転送アプリケーションを書いていますし、サーブレットの応答が書き込まれた後に問題が発生した場合にエラー応答を送信できるようにしたいと思います。それは可能ですか?
サーバー側ではありません。サーバーは既にフラッシュされたバイトをクライアントから戻すことはできません。これは返品のない点です。私はこれが応答のWriter
またはOutputStream
の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);