From 99cfdfd6f66ec56b165ef2ac1381bff1fff649a9 Mon Sep 17 00:00:00 2001 From: hns Date: Mon, 2 Feb 2009 15:35:00 +0000 Subject: [PATCH] Allow applications to explicitly set the HTTP status code with res.redirect(). --- src/helma/servlet/AbstractServletClient.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/src/helma/servlet/AbstractServletClient.java b/src/helma/servlet/AbstractServletClient.java index ec0641de..1c33a869 100644 --- a/src/helma/servlet/AbstractServletClient.java +++ b/src/helma/servlet/AbstractServletClient.java @@ -311,7 +311,7 @@ public abstract class AbstractServletClient extends HttpServlet { } if (hopres.getRedirect() != null) { - sendRedirect(req, res, hopres.getRedirect()); + sendRedirect(req, res, hopres.getRedirect(), hopres.getStatus()); } else if (hopres.getNotModified()) { res.setStatus(HttpServletResponse.SC_NOT_MODIFIED); } else { @@ -383,7 +383,7 @@ public abstract class AbstractServletClient extends HttpServlet { } } - void sendRedirect(HttpServletRequest req, HttpServletResponse res, String url) { + void sendRedirect(HttpServletRequest req, HttpServletResponse res, String url, int status) { String location = url; if (url.indexOf("://") == -1) { @@ -421,8 +421,11 @@ public abstract class AbstractServletClient extends HttpServlet { location = loc.toString(); } - // send status code 303 for HTTP 1.1, 302 otherwise - if (isOneDotOne(req.getProtocol())) { + // if status code was explicitly set use that, or use 303 for HTTP 1.1, + // 302 for earlier protocol versions + if (status >= 301 && status <= 303) { + res.setStatus(status); + } else if (isOneDotOne(req.getProtocol())) { res.setStatus(HttpServletResponse.SC_SEE_OTHER); } else { res.setStatus(HttpServletResponse.SC_MOVED_TEMPORARILY);