diff --git a/core/src/main/java/org/apache/struts2/result/ServletRedirectResult.java b/core/src/main/java/org/apache/struts2/result/ServletRedirectResult.java index 0879ab06d..704f80ab6 100644 --- a/core/src/main/java/org/apache/struts2/result/ServletRedirectResult.java +++ b/core/src/main/java/org/apache/struts2/result/ServletRedirectResult.java @@ -250,13 +250,24 @@ public class ServletRedirectResult extends StrutsResultSupport implements Reflec * @throws IOException in case of IO errors */ protected void sendRedirect(HttpServletResponse response, String finalLocation) throws IOException { - if (SC_FOUND == statusCode) { - response.sendRedirect(finalLocation); - } else { - response.setStatus(statusCode); - response.setHeader("Location", finalLocation); - response.getWriter().write(finalLocation); - response.getWriter().close(); + try { + if (SC_FOUND == statusCode) { + response.sendRedirect(finalLocation); + } else { + response.setStatus(statusCode); + response.setHeader("Location", finalLocation); + try { + response.getWriter().write(finalLocation); + } finally { + response.getWriter().close(); + } + } + } catch (IOException ioe) { + LOG.warn("Unable to redirect to: {}, code: {}! (IOException): {}", finalLocation, statusCode, ioe.toString()); + throw ioe; // Re-throw required to preserve existing default behaviour + } catch (IllegalStateException ise) { + LOG.warn("Unable to redirect to: {}, code: {}! isCommited: {}. (IllegalStateException): {}", finalLocation, statusCode, response.isCommitted(), ise.toString()); + throw ise; // Re-throw required to preserve existing default behaviour } }