109 lines
2.6 KiB
Plaintext
Executable File
109 lines
2.6 KiB
Plaintext
Executable File
package com.fp.frontend.filter;
|
|
|
|
import java.io.ByteArrayOutputStream;
|
|
import java.io.IOException;
|
|
import java.util.zip.GZIPOutputStream;
|
|
|
|
import javax.servlet.ServletOutputStream;
|
|
import javax.servlet.http.HttpServletResponse;
|
|
|
|
/**
|
|
* Clase que devuelve filtrado el contenido
|
|
*
|
|
* @author Jorge Vaca
|
|
* @version 2.1
|
|
*/
|
|
public class GZIPResponseStream extends ServletOutputStream {
|
|
|
|
protected ByteArrayOutputStream baos = null;
|
|
|
|
protected GZIPOutputStream gzipstream = null;
|
|
|
|
protected boolean closed = false;
|
|
|
|
protected HttpServletResponse response = null;
|
|
|
|
protected ServletOutputStream output = null;
|
|
|
|
public GZIPResponseStream(HttpServletResponse response) throws IOException {
|
|
super();
|
|
closed = false;
|
|
this.response = response;
|
|
this.output = response.getOutputStream();
|
|
baos = new ByteArrayOutputStream();
|
|
gzipstream = new GZIPOutputStream(baos);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @throws IOException
|
|
*/
|
|
@Override
|
|
public void close() throws IOException {
|
|
if (closed) {
|
|
throw new IOException("This output stream has already been closed");
|
|
}
|
|
gzipstream.finish();
|
|
byte[] bytes = baos.toByteArray();
|
|
response.addHeader("Content-Length", Integer.toString(bytes.length));
|
|
response.addHeader("Content-Encoding", "gzip");
|
|
output.write(bytes);
|
|
output.flush();
|
|
output.close();
|
|
closed = true;
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @throws IOException
|
|
*/
|
|
@Override
|
|
public void flush() throws IOException {
|
|
if (closed) {
|
|
throw new IOException("Cannot flush a closed output stream");
|
|
}
|
|
gzipstream.flush();
|
|
}
|
|
|
|
@Override
|
|
public void write(int b) throws IOException {
|
|
if (closed) {
|
|
throw new IOException("Cannot write to a closed output stream");
|
|
}
|
|
gzipstream.write((byte) b);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param b
|
|
* @throws IOException
|
|
*/
|
|
@Override
|
|
public void write(byte b[]) throws IOException {
|
|
write(b, 0, b.length);
|
|
}
|
|
|
|
/**
|
|
*
|
|
* @param b
|
|
* @param off
|
|
* @param len
|
|
* @throws IOException
|
|
*/
|
|
@Override
|
|
public void write(byte b[], int off, int len) throws IOException {
|
|
if (closed) {
|
|
throw new IOException("Cannot write to a closed output stream");
|
|
}
|
|
gzipstream.write(b, off, len);
|
|
}
|
|
|
|
public boolean closed() {
|
|
return (this.closed);
|
|
}
|
|
|
|
public void reset() {
|
|
// noop
|
|
}
|
|
}
|