以下是我压缩数据的方法:
<%@ page import="javax.servlet.jsp.*,java.io.*,java.util.zip.*" %>
<%
String encodings = request.getHeader("Accept-Encoding");
PrintWriter outWriter = null;
if ((encodings != null) && (encodings.indexOf("gzip") != -1)) {
OutputStream outA = response.getOutputStream();
outWriter = new PrintWriter(new GZIPOutputStream(outA), false);
response.setHeader("Content-Encoding", "gzip");
int a = response.getBufferSize();
System.out.println("ZIPPED VERSION BF:"+a);
}
else {
System.out.println("UN-ZIPPED VERSION");
outWriter = new PrintWriter(response.getOutputStream(), false);
}
outWriter.println("<HTML><BODY>");
for(int i=0; i<1000; i++) {
outWriter.println(" blah blah blah<br>");
}
outWriter.println("</BODY></HTML>");
outWriter.close();
%>
答案 0 :(得分:2)
抱歉听起来很苛刻,但这种做法完全错了。首先,您不希望在JSP文件中执行此操作,原因至少有两个:1)原始Java代码( scriptlet )属于真正的Java类,2)JSP用于字符数据,不是二进制数据,它只会破坏数据。其次,任何体面的appserver都提供配置选项,是否自动GZIP响应。例如Tomcat 6.0,您只需使用设置为<Connector>
的{{1}}属性扩展/conf/server.xml
中的compression
元素:
"on"
另请参阅this article以获取有关webapp性能的更多提示。
回到实际问题:没有设置来改变GZIP的压缩比。它也不需要。
更新:我意识到您要求获取,而不是设置。好吧,使用HTTP客户端并计算<Connector ... compression="on" />
的长度。以下是java.net.URLConnection
的帮助下的基本启动示例:
InputStream
然后只需进行小学数学计算即可获得压缩率。分割,乘法等;)
答案 1 :(得分:0)
除非我在这里遗漏了什么,否则你只需手动计算原始尺寸除以压缩尺寸。