remm 01/09/26 17:58:14 Modified: catalina/src/share/org/apache/catalina/connector HttpResponseFacade.java ResponseFacade.java Log: - The response facade now have its own committed flag, so that the application layer can be committed (during a sendRedirect or sendError) while not committing the underlying response object. Revision Changes Path 1.3 +70 -4 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/HttpResponseFacade.java Index: HttpResponseFacade.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/HttpResponseFacade.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- HttpResponseFacade.java 2001/07/22 20:25:06 1.2 +++ HttpResponseFacade.java 2001/09/27 00:58:14 1.3 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/HttpResponseFacade.java,v 1.2 2001/07/22 20:25:06 pier Exp $ - * $Revision: 1.2 $ - * $Date: 2001/07/22 20:25:06 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/HttpResponseFacade.java,v 1.3 2001/09/27 00:58:14 remm Exp $ + * $Revision: 1.3 $ + * $Date: 2001/09/27 00:58:14 $ * * ==================================================================== * @@ -79,7 +79,7 @@ * * @author Remy Maucherat * @author Craig R. McClanahan - * @version $Revision: 1.2 $ $Date: 2001/07/22 20:25:06 $ + * @version $Revision: 1.3 $ $Date: 2001/09/27 00:58:14 $ */ public final class HttpResponseFacade @@ -104,7 +104,12 @@ public void addCookie(Cookie cookie) { + + if (isCommitted()) + return; + ((HttpServletResponse) response).addCookie(cookie); + } @@ -135,59 +140,120 @@ public void sendError(int sc, String msg) throws IOException { + + if (isCommitted()) + return; + + committed = true; + ((HttpServletResponse) response).sendError(sc, msg); + } public void sendError(int sc) throws IOException { + + if (isCommitted()) + return; + + committed = true; + ((HttpServletResponse) response).sendError(sc); + } public void sendRedirect(String location) throws IOException { + + if (isCommitted()) + return; + + committed = true; + ((HttpServletResponse) response).sendRedirect(location); + } public void setDateHeader(String name, long date) { + + if (isCommitted()) + return; + ((HttpServletResponse) response).setDateHeader(name, date); + } public void addDateHeader(String name, long date) { + + if (isCommitted()) + return; + ((HttpServletResponse) response).addDateHeader(name, date); + } public void setHeader(String name, String value) { + + if (isCommitted()) + return; + ((HttpServletResponse) response).setHeader(name, value); + } public void addHeader(String name, String value) { + + if (isCommitted()) + return; + ((HttpServletResponse) response).addHeader(name, value); + } public void setIntHeader(String name, int value) { + + if (isCommitted()) + return; + ((HttpServletResponse) response).setIntHeader(name, value); + } public void addIntHeader(String name, int value) { + + if (isCommitted()) + return; + ((HttpServletResponse) response).addIntHeader(name, value); + } public void setStatus(int sc) { + + if (isCommitted()) + return; + ((HttpServletResponse) response).setStatus(sc); + } public void setStatus(int sc, String sm) { + + if (isCommitted()) + return; + ((HttpServletResponse) response).setStatus(sc, sm); + } 1.3 +48 -5 jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseFacade.java Index: ResponseFacade.java =================================================================== RCS file: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseFacade.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -r1.2 -r1.3 --- ResponseFacade.java 2001/07/22 20:25:06 1.2 +++ ResponseFacade.java 2001/09/27 00:58:14 1.3 @@ -1,7 +1,7 @@ /* - * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseFacade.java,v 1.2 2001/07/22 20:25:06 pier Exp $ - * $Revision: 1.2 $ - * $Date: 2001/07/22 20:25:06 $ + * $Header: /home/cvs/jakarta-tomcat-4.0/catalina/src/share/org/apache/catalina/connector/ResponseFacade.java,v 1.3 2001/09/27 00:58:14 remm Exp $ + * $Revision: 1.3 $ + * $Date: 2001/09/27 00:58:14 $ * * ==================================================================== * @@ -80,7 +80,7 @@ * object. All methods are delegated to the wrapped response. * * @author Remy Maucherat - * @version $Revision: 1.2 $ $Date: 2001/07/22 20:25:06 $ + * @version $Revision: 1.3 $ $Date: 2001/09/27 00:58:14 $ */ public class ResponseFacade implements ServletResponse { @@ -96,6 +96,7 @@ */ public ResponseFacade(Response response) { this.response = (ServletResponse) response; + committed = false; } @@ -108,6 +109,12 @@ protected ServletResponse response = null; + /** + * Application level commit. + */ + protected boolean committed = false; + + // ------------------------------------------------ ServletResponse Methods @@ -129,17 +136,33 @@ public void setContentLength(int len) { + + if (isCommitted()) + return; + response.setContentLength(len); + } public void setContentType(String type) { + + if (isCommitted()) + return; + response.setContentType(type); + } public void setBufferSize(int size) { + + if (isCommitted()) + throw new IllegalStateException + (/*sm.getString("responseBase.reset.ise")*/); + response.setBufferSize(size); + } @@ -150,26 +173,46 @@ public void flushBuffer() throws IOException { + + committed = true; + response.flushBuffer(); + } public void resetBuffer() { + + if (isCommitted()) + throw new IllegalStateException + (/*sm.getString("responseBase.reset.ise")*/); + response.resetBuffer(); + } public boolean isCommitted() { - return response.isCommitted(); + return (committed || response.isCommitted()); } public void reset() { + + if (isCommitted()) + throw new IllegalStateException + (/*sm.getString("responseBase.reset.ise")*/); + response.reset(); + } public void setLocale(Locale loc) { + + if (isCommitted()) + return; + response.setLocale(loc); }