All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.directwebremoting.util.SwallowingHttpServletResponse Maven / Gradle / Ivy

Go to download

DWR is easy Ajax for Java. It makes it simple to call Java code directly from Javascript. It gets rid of almost all the boiler plate code between the web browser and your Java code.

There is a newer version: 3.0.2-RELEASE
Show newest version
/*
 * Copyright 2005 Joe Walker
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */
package org.directwebremoting.util;

import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;
import java.util.Locale;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;

import org.apache.commons.logging.LogFactory;
import org.apache.commons.logging.Log;

/**
 * Used by ExecutionContext to forward results back via javascript.
 * 

We could like to implement {@link HttpServletResponse}, but there is a bug * in WebLogic where it casts to a {@link HttpServletResponseWrapper} so we * need to extend that. * @author Joe Walker [joe at getahead dot ltd dot uk] */ public final class SwallowingHttpServletResponse extends HttpServletResponseWrapper implements HttpServletResponse { /** * Create a new HttpServletResponse that allows you to catch the body * @param response The original HttpServletResponse * @param sout The place we copy responses to * @param characterEncoding The output encoding */ public SwallowingHttpServletResponse(HttpServletResponse response, Writer sout, String characterEncoding) { super(response); pout = new PrintWriter(sout); outputStream = new WriterOutputStream(sout, characterEncoding); this.characterEncoding = characterEncoding; } /* (non-Javadoc) * @see javax.servlet.http.HttpServletResponseWrapper#addCookie(javax.servlet.http.Cookie) */ @Override public void addCookie(Cookie cookie) { } /* (non-Javadoc) * @see javax.servlet.http.HttpServletResponseWrapper#addDateHeader(java.lang.String, long) */ @Override public void addDateHeader(String name, long value) { } /* (non-Javadoc) * @see javax.servlet.http.HttpServletResponseWrapper#addHeader(java.lang.String, java.lang.String) */ @Override public void addHeader(String name, String value) { } /* (non-Javadoc) * @see javax.servlet.http.HttpServletResponseWrapper#addIntHeader(java.lang.String, int) */ @Override public void addIntHeader(String name, int value) { } /* (non-Javadoc) * @see javax.servlet.http.HttpServletResponseWrapper#containsHeader(java.lang.String) */ @Override public boolean containsHeader(String name) { return false; } /** * @see javax.servlet.http.HttpServletResponseWrapper#encodeRedirectUrl(java.lang.String) * @deprecated */ @Override @Deprecated public String encodeRedirectUrl(String url) { return url; } /* (non-Javadoc) * @see javax.servlet.http.HttpServletResponseWrapper#encodeRedirectURL(java.lang.String) */ @Override public String encodeRedirectURL(String url) { return url; } /** * @see javax.servlet.http.HttpServletResponseWrapper#encodeUrl(java.lang.String) * @deprecated */ @Override @Deprecated public String encodeUrl(String url) { return url; } /* (non-Javadoc) * @see javax.servlet.http.HttpServletResponseWrapper#encodeURL(java.lang.String) */ @Override public String encodeURL(String url) { return url; } /* (non-Javadoc) * @see javax.servlet.ServletResponseWrapper#flushBuffer() */ @Override public void flushBuffer() throws IOException { pout.flush(); } /* (non-Javadoc) * @see javax.servlet.ServletResponseWrapper#getBufferSize() */ @Override public int getBufferSize() { return bufferSize; } /* (non-Javadoc) * @see javax.servlet.ServletResponseWrapper#getCharacterEncoding() */ @Override public String getCharacterEncoding() { return characterEncoding; } /** * @return The MIME type of the content * @see javax.servlet.ServletResponse#setContentType(String) */ @Override public String getContentType() { return contentType; } /** * Accessor for any error messages set using {@link #sendError(int)} or * {@link #sendError(int, String)} * @return The current error message */ public String getErrorMessage() { return errorMessage; } /* (non-Javadoc) * @see javax.servlet.ServletResponseWrapper#getLocale() */ @Override public Locale getLocale() { return locale; } /* (non-Javadoc) * @see javax.servlet.ServletResponseWrapper#getOutputStream() */ @Override public ServletOutputStream getOutputStream() { return outputStream; } /** * Accessor for the redirect URL set using {@link #sendRedirect(String)} * @return The redirect URL */ public String getRedirectedUrl() { return redirectedUrl; } /** * What HTTP status code should be returned? * @return The current http status code */ public int getStatus() { return status; } /* (non-Javadoc) * @see javax.servlet.ServletResponseWrapper#getWriter() */ @Override public PrintWriter getWriter() { return pout; } /* (non-Javadoc) * @see javax.servlet.ServletResponseWrapper#isCommitted() */ @Override public boolean isCommitted() { return false; } /* (non-Javadoc) * @see javax.servlet.ServletResponseWrapper#reset() */ @Override public void reset() { } /* (non-Javadoc) * @see javax.servlet.ServletResponseWrapper#resetBuffer() */ @Override public void resetBuffer() { } /* (non-Javadoc) * @see javax.servlet.http.HttpServletResponseWrapper#sendError(int) */ @Override public void sendError(int newStatus) { if (committed) { throw new IllegalStateException("Cannot set error status - response is already committed"); } log.warn("Ignoring call to sendError(" + newStatus + ')'); status = newStatus; committed = true; } /* (non-Javadoc) * @see javax.servlet.http.HttpServletResponseWrapper#sendError(int, java.lang.String) */ @Override public void sendError(int newStatus, String newErrorMessage) { if (committed) { throw new IllegalStateException("Cannot set error status - response is already committed"); } log.warn("Ignoring call to sendError(" + newStatus + ", " + newErrorMessage + ')'); status = newStatus; errorMessage = newErrorMessage; committed = true; } /* (non-Javadoc) * @see javax.servlet.http.HttpServletResponseWrapper#sendRedirect(java.lang.String) */ @Override public void sendRedirect(String location) { if (committed) { throw new IllegalStateException("Cannot send redirect - response is already committed"); } log.warn("Ignoring call to sendRedirect(" + location + ')'); redirectedUrl = location; committed = true; } /* (non-Javadoc) * @see javax.servlet.ServletResponseWrapper#setBufferSize(int) */ @Override public void setBufferSize(int bufferSize) { this.bufferSize = bufferSize; } /** * @param characterEncoding The new encoding to use for response strings * @see javax.servlet.ServletResponseWrapper#getCharacterEncoding() */ @Override public void setCharacterEncoding(String characterEncoding) { this.characterEncoding = characterEncoding; } /* (non-Javadoc) * @see javax.servlet.ServletResponseWrapper#setContentLength(int) */ @Override public void setContentLength(int i) { // The content length of the original document is not likely to be the // same as the content length of the new document. } /* (non-Javadoc) * @see javax.servlet.ServletResponseWrapper#setContentType(java.lang.String) */ @Override public void setContentType(String contentType) { this.contentType = contentType; } /* (non-Javadoc) * @see javax.servlet.http.HttpServletResponseWrapper#setDateHeader(java.lang.String, long) */ @Override public void setDateHeader(String name, long value) { } /* (non-Javadoc) * @see javax.servlet.http.HttpServletResponseWrapper#setHeader(java.lang.String, java.lang.String) */ @Override public void setHeader(String name, String value) { } /* (non-Javadoc) * @see javax.servlet.http.HttpServletResponseWrapper#setIntHeader(java.lang.String, int) */ @Override public void setIntHeader(String name, int value) { } /* (non-Javadoc) * @see javax.servlet.ServletResponseWrapper#setLocale(java.util.Locale) */ @Override public void setLocale(Locale locale) { this.locale = locale; } /* (non-Javadoc) * @see javax.servlet.http.HttpServletResponseWrapper#setStatus(int) */ @Override public void setStatus(int status) { this.status = status; log.warn("Ignoring call to setStatus(" + status + ')'); } /** * @see javax.servlet.http.HttpServletResponse#setStatus(int, java.lang.String) * @deprecated */ @Deprecated @Override public void setStatus(int newStatus, String newErrorMessage) { status = newStatus; errorMessage = newErrorMessage; log.warn("Ignoring call to setStatus(" + newStatus + ", " + newErrorMessage + ')'); } /** * The ignored buffer size */ private int bufferSize = 0; /** * The character encoding used */ private String characterEncoding; /** * Has the response been comitted */ private boolean committed = false; /** * The MIME type of the output body */ private String contentType = null; /** * The error message sent with a status != HttpServletResponse.SC_OK */ private String errorMessage = null; /** * Locale setting: defaults to platform default */ private Locale locale = Locale.getDefault(); /** * The forwarding output stream */ private final ServletOutputStream outputStream; /** * The forwarding output stream */ private final PrintWriter pout; /** * Where are we to redirect the user to? */ private String redirectedUrl = null; /** * The HTTP status */ private int status = HttpServletResponse.SC_OK; /** * The log stream */ private static final Log log = LogFactory.getLog(SwallowingHttpServletResponse.class); }





© 2015 - 2025 Weber Informatics LLC | Privacy Policy