📄 compressionresponsewrapper.java
字号:
package com.dvd.web;
// Servlet imports
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpServletResponseWrapper;
import javax.servlet.ServletOutputStream;
// I/O imports
import java.io.IOException;
import java.io.PrintWriter;
import java.io.OutputStreamWriter;
import java.util.zip.GZIPOutputStream;
/**
* This response wrapper allows a filter to compression the response
* generated after processing the request.
*/
class CompressionResponseWrapper extends HttpServletResponseWrapper {
/** This variable holds the output stream compression buffer. */
private GZIPServletOutputStream gzsos = null;
/** This variable holds the PW object sent to the servlet. */
private PrintWriter pw = null;
CompressionResponseWrapper(HttpServletResponse resp) {
super(resp);
}
//
// Override HttpServletResponse methods to use our stream objects
//
public PrintWriter getWriter() throws IOException {
if ( gzsos != null ) {
throw new IllegalStateException();
}
if ( pw == null ) {
gzsos = new GZIPServletOutputStream(getResponse().getOutputStream());
// Use the response charset to create the OSWriter
OutputStreamWriter osw
= new OutputStreamWriter(gzsos, getResponse().getCharacterEncoding());
// Wrap the OSWriter in the PrintWriter
pw = new PrintWriter(osw);
}
return pw;
}
public ServletOutputStream getOutputStream() throws IOException {
if ( pw != null ) {
throw new IllegalStateException();
}
if ( gzsos == null ) {
gzsos = new GZIPServletOutputStream(getResponse().getOutputStream());
}
return gzsos;
}
public void setContentLength(int len) {
// ignore this, because the real output will be compressed
}
//
// Decorator methods (used by the Filter)
//
public GZIPOutputStream getGZIPOutputStream() {
if ( this.gzsos == null ) return null;
return this.gzsos.internalGZOS;
}
}
class GZIPServletOutputStream extends ServletOutputStream {
GZIPOutputStream internalGZOS;
GZIPServletOutputStream(ServletOutputStream sos) throws IOException {
this.internalGZOS = new GZIPOutputStream(sos);
}
public void write(int param) throws java.io.IOException {
internalGZOS.write(param);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -