69 lines
2.0 KiB
Java
69 lines
2.0 KiB
Java
|
JSP Http servlet response wrapper
|
||
|
|
||
|
|
||
|
|
||
|
package com.ack.web.servlet;
|
||
|
|
||
|
import java.io.IOException;
|
||
|
import java.io.PrintWriter;
|
||
|
import javax.servlet.ServletOutputStream;
|
||
|
import javax.servlet.http.HttpServletResponse;
|
||
|
import javax.servlet.http.HttpServletResponseWrapper;
|
||
|
|
||
|
/**
|
||
|
* JSPHttpServletResponseWrapper is used to adapt the response of a servlet.
|
||
|
* The wrappers sole responsibility is to create a JSPServletOutputStream
|
||
|
* off the provided HttpServletResponse. The JSPServletOutputStream is when
|
||
|
* we can customize when is streamed back to the HTTP client. The
|
||
|
* JSPHttpServletResponseWrapper provides the infrastructural scaffolding to
|
||
|
* plug into our specialising output stream.
|
||
|
*/
|
||
|
|
||
|
public class JSPHttpServletResponseWrapper extends HttpServletResponseWrapper {
|
||
|
protected ServletOutputStream stream = null;
|
||
|
protected PrintWriter writer = null;
|
||
|
protected HttpServletResponse origResponse = null;
|
||
|
|
||
|
public JSPHttpServletResponseWrapper( HttpServletResponse response ) {
|
||
|
super( response );
|
||
|
response.setContentType("text/plain");
|
||
|
origResponse = response;
|
||
|
}
|
||
|
|
||
|
public ServletOutputStream createOutputStream()
|
||
|
throws IOException {
|
||
|
return ( new JSPServletOutputStream( origResponse ) );
|
||
|
}
|
||
|
|
||
|
public ServletOutputStream getOutputStream()
|
||
|
throws IOException {
|
||
|
if( writer != null ) {
|
||
|
throw new IllegalStateException( "getWriter() has already been " +
|
||
|
"called for this response" );
|
||
|
}
|
||
|
|
||
|
if( stream == null ) {
|
||
|
stream = createOutputStream();
|
||
|
}
|
||
|
|
||
|
return stream;
|
||
|
}
|
||
|
|
||
|
public PrintWriter getWriter()
|
||
|
throws IOException {
|
||
|
if( writer != null ) {
|
||
|
return writer;
|
||
|
}
|
||
|
|
||
|
if( stream != null ) {
|
||
|
throw new IllegalStateException( "getOutputStream() has already " +
|
||
|
"been called for this response" );
|
||
|
}
|
||
|
|
||
|
stream = createOutputStream();
|
||
|
writer = new PrintWriter( stream );
|
||
|
|
||
|
return writer;
|
||
|
}
|
||
|
}
|