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

cat.inspiracio.servlet.http.BufferedResponse Maven / Gradle / Ivy

package cat.inspiracio.servlet.http;

import java.io.BufferedWriter;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.Writer;

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

/** It seems that in appengine, the response buffer cannot be reset.
 * 
 * See http://stackoverflow.com/questions/36691900/httpservletresponse-resetbuffer-doesnt-work.
 * 
 * Until I find out what's wrong or find a fix, this is a workaround. 
 * 
 * This implementation is not complete nor correct:
 * at the end of doGet(), must call response.flushBuffer(),
 * setting and getting buffer size is not accurate.
 * */
public class BufferedResponse extends HttpServletResponseWrapper{

	// state -----------------------------------------------------
	
	/** If null, getWriter() has not been called yet, or it has been reset. */
	private PrintWriter writer;
	
	private int bufferSize=8192;
	
	// construction ---------------------------------------------
	
	public BufferedResponse(HttpServletResponse response){
		super(response);
	}

	// API methods ---------------------------------------------
	
	/** Puts a buffer around super.getWriter(). */
	@Override public PrintWriter getWriter() throws IOException{
		if(writer==null){
			Writer w=super.getWriter();
			w=new BufferedWriter(w, bufferSize);
			writer=new PrintWriter(w);
		}
		return writer;
	}

	@Override public void flushBuffer() throws IOException{
		if(writer!=null)writer.flush();
		super.flushBuffer();
	}

//	@Override public boolean isCommitted(){
//		/* Not so easy. We have to count the bytes that are written,
//		 * or make our own implementation of BufferedWriter. */
//	}
	
	@Override public void reset(){
		writer=null;
		super.reset();
	}

	@Override public void resetBuffer(){
		writer=null;	
		super.resetBuffer();
	}
	
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy