昨天一篇GZIP相关实现引起大家的广泛关注,为一位朋友验证一下浏览器对gzip的支持情况,才有此文!
相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现
GZIP本身就是一种网络流压缩算法,而且应用相当广泛。如果网络访问过程中,其数据流较大,势必降低网络访问效率,此时就需要考虑使用压缩!当然,在浏览器与服务器的交互中,要考虑浏览器是否支持这些算法,以及服务器运行压缩所带来的负载。如果你关注浏览器上传的“Accept-Encoding”属性,你就能看明白这一点。
GZIP如何压缩,我这里就不废话了,不清楚的朋友请关注(
Java压缩技术(四) GZIP——Java原生实现)
至于如何使得服务器支持gzip的流输出,关键点只有一行代码:
response.setHeader("Content-Encoding", "gzip");
经过这项设置,浏览器就能够很好的作出响应!
先看FireFox,如图:
再看Opera,如图:
浏览器在打开该页面时,就可解压获得并展示其内容!
至于IE就惨了,愣是要求下载!
可能缺少什么设置!(注意后续服务器配置!
不是无解哦!)
你不信就这么简单?上代码!
/**
* 2010-4-14
*/
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.zip.GZIPOutputStream;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* GZip服务
*
* @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>
* @since 1.0
*/
public class GZipServlet extends HttpServlet {
private static final long serialVersionUID = -4811926975427533081L;
private static final String ENCODING = "UTF-8";
/**
* 压缩
*
* @param data
* @return
* @throws Exception
*/
private byte[] compress(byte[] data) throws Exception {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
// 压缩
GZIPOutputStream gos = new GZIPOutputStream(baos);
gos.write(data, 0, data.length);
gos.finish();
byte[] output = baos.toByteArray();
baos.flush();
baos.close();
return output;
}
/**
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void excute(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
byte[] data = "我是一个中国人!".getBytes(ENCODING);
try {
byte[] output = compress(data);
// 设置Content-Encoding,这是关键点!
response.setHeader("Content-Encoding", "gzip");
// 设置字符集
response.setCharacterEncoding(ENCODING);
// 设定输出流中内容长度
response.setContentLength(output.length);
OutputStream out = response.getOutputStream();
out.write(output);
out.flush();
out.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doGet(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
excute(request, response);
}
/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
* response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
excute(request, response);
}
}
其实,就这些内容!
当然,除了上述代码方式,针对于tomcat可以通过修改配置获得支持!
<Connector
port="8080"
protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="443"
URIEncoding="UTF-8"
compression="on"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json"
/>
说说配置细节:
compression="on" 开启压缩支持
noCompressionUserAgents="gozilla, traviata" 不压缩的内容
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json" 压缩的类型
至于代码,你无需写一行代码!轻松获得服务器访问加速!
并且IE也支持哦!
借网友经验,如下实现,轻松获得IE支持:
response.setContentType("text/plain;charset=utf-8");
工程在我的附件里,请下载验证!
相关链接:
Java压缩技术(一) ZLib
Java压缩技术(二) ZIP压缩——Java原生实现
Java压缩技术(三) ZIP解压缩——Java原生实现
Java压缩技术(四) GZIP——Java原生实现
Java压缩技术(五) GZIP相关——浏览器解析
Java压缩技术(六) BZIP2——Commons实现
Java压缩技术(七) TAR——Commons实现
- 大小: 31.9 KB
- 大小: 19.4 KB
分享到:
相关推荐
ZLib ZIP 压缩——Java 原生实现 ZIP 解压缩——Java 原生实现 GZIP——Java 原生实现 GZIP 相关——浏览器解析 BZIP2——Commons 实现 TAR——Commons 实现
摘要:Java源码,网络相关,浏览器 Java编写的HTML浏览器源代码,一个很简单甚至不算是浏览器的HTML浏览器,使用方法: 可直接输入文件名或网络地址,但必需事先连入网络。 Java编写的山寨QQ,多人聊天+用户在线 ...
摘要:Java源码,网络相关,浏览器 Java编写的HTML浏览器源代码,一个很简单甚至不算是浏览器的HTML浏览器,使用方法: 可直接输入文件名或网络地址,但必需事先连入网络。 Java编写的山寨QQ,多人聊天+用户在线...
摘要:Java源码,网络相关,浏览器 Java编写的HTML浏览器源代码,一个很简单甚至不算是浏览器的HTML浏览器,使用方法: 可直接输入文件名或网络地址,但必需事先连入网络。 Java编写的山寨QQ,多人聊天+用户在线...
其中,`yuicompressor-2.4.7.jar`是一个著名的CSS和JS压缩工具——YUI Compressor的Java版本。它由雅虎开发,能有效地压缩JavaScript和CSS,通过消除冗余代码和压缩语法,显著减小文件体积。 压缩JS文件的原理类似...
Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四”...
Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四”...
摘要:Java源码,网络相关,浏览器 Java编写的HTML浏览器源代码,一个很简单甚至不算是浏览器的HTML浏览器,使用方法: 可直接输入文件名或网络地址,但必需事先连入网络。 Java编写的山寨QQ,多人聊天+用户在线...
Java非对称加密源码实例 1个目标文件 摘要:Java源码,算法相关,非对称加密 Java非对称加密源程序代码实例,本例中使用RSA加密技术,定义加密算法可用 DES,DESede,Blowfish等。 设定字符串为“张三,你好,我是李四”...
4. **数据传输优化**:考虑到无线网络的限制,可能使用了GZIP压缩或者其他优化技术来减少数据传输量,提高响应速度。 5. **安全性**:由于涉及到用户信息的查询,系统必须考虑安全问题,如防止SQL注入,使用加密...
《上传与压缩技术详解——以"upload.zip"为例》 在信息技术领域,数据的传输与存储经常涉及到文件的压缩操作,以节省空间、提高传输效率。"upload.zip"就是一个典型的例子,它代表了一个使用ZIP格式压缩的文件。...
【标签】"opera" 和 "opera_mini" 明确了这个压缩包与 Opera 浏览器的迷你版——Opera Mini 相关。Opera Mini 作为一个衍生自桌面版 Opera 浏览器的产品,它采用了服务器端预处理技术,将网页内容压缩后再传输到手机...
- **编码**:支持多种编码方式,如GZIP压缩。 - **状态码100的使用**:允许服务器在处理完请求头部后立即响应100继续的状态码。 ##### Connector接口 Connector接口定义了连接器的行为,包括如何接收客户端连接...