转载自   Java压缩技术(五) GZIP相关——浏览器解析

GZIP本身就是一种网络流压缩算法,而且应用相当广泛。如果网络访问过程中,其数据流较大,势必降低网络访问效率,此时就需要考虑使用压缩!当然,在浏览器与服务器的交互中,要考虑浏览器是否支持这些算法,以及服务器运行压缩所带来的负载。如果你关注浏览器上传的“Accept-Encoding”属性,你就能看明白这一点。

GZIP如何压缩,我这里就不废话了,不清楚的朋友请关注(Java压缩技术(四) GZIP——Java原生实现) 
至于如何使得服务器支持gzip的流输出,关键点只有一行代码:

Java代码
  1. response.setHeader("Content-Encoding", "gzip");

经过这项设置,浏览器就能够很好的作出响应! 
先看FireFox,如图: 
 
再看Opera,如图: 
 
浏览器在打开该页面时,就可解压获得并展示其内容!
至于IE就惨了,愣是要求下载!  可能缺少什么设置!(注意后续服务器配置!  不是无解哦!) 
 你不信就这么简单?上代码!

Java代码 
  1. /**
  2. * 2010-4-14
  3. */
  4. import java.io.ByteArrayOutputStream;
  5. import java.io.IOException;
  6. import java.io.OutputStream;
  7. import java.util.zip.GZIPOutputStream;
  8. import javax.servlet.ServletException;
  9. import javax.servlet.http.HttpServlet;
  10. import javax.servlet.http.HttpServletRequest;
  11. import javax.servlet.http.HttpServletResponse;
  12. /**
  13. * GZip服务
  14. *
  15. * @author <a href="mailto:zlex.dongliang@gmail.com">梁栋</a>
  16. * @since 1.0
  17. */
  18. public class GZipServlet extends HttpServlet {
  19. private static final long serialVersionUID = -4811926975427533081L;
  20. private static final String ENCODING = "UTF-8";
  21. /**
  22. * 压缩
  23. *
  24. * @param data
  25. * @return
  26. * @throws Exception
  27. */
  28. private byte[] compress(byte[] data) throws Exception {
  29. ByteArrayOutputStream baos = new ByteArrayOutputStream();
  30. // 压缩
  31. GZIPOutputStream gos = new GZIPOutputStream(baos);
  32. gos.write(data, 0, data.length);
  33. gos.finish();
  34. byte[] output = baos.toByteArray();
  35. baos.flush();
  36. baos.close();
  37. return output;
  38. }
  39. /**
  40. * @param request
  41. * @param response
  42. * @throws ServletException
  43. * @throws IOException
  44. */
  45. private void excute(HttpServletRequest request, HttpServletResponse response)
  46. throws ServletException, IOException {
  47. byte[] data = "我是一个中国人!".getBytes(ENCODING);
  48. try {
  49. byte[] output = compress(data);
  50. // 设置Content-Encoding,这是关键点!
  51. response.setHeader("Content-Encoding", "gzip");
  52. // 设置字符集
  53. response.setCharacterEncoding(ENCODING);
  54. // 设定输出流中内容长度
  55. response.setContentLength(output.length);
  56. OutputStream out = response.getOutputStream();
  57. out.write(output);
  58. out.flush();
  59. out.close();
  60. } catch (Exception e) {
  61. e.printStackTrace();
  62. }
  63. }
  64. /**
  65. * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
  66. *      response)
  67. */
  68. protected void doGet(HttpServletRequest request,
  69. HttpServletResponse response) throws ServletException, IOException {
  70. excute(request, response);
  71. }
  72. /**
  73. * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
  74. *      response)
  75. */
  76. protected void doPost(HttpServletRequest request,
  77. HttpServletResponse response) throws ServletException, IOException {
  78. excute(request, response);
  79. }
  80. }

其实,就这些内容!  
当然,除了上述代码方式,针对于tomcat可以通过修改配置获得支持!

Xml代码 
  1. <Connector
  2. port="8080"
  3. protocol="HTTP/1.1"
  4. connectionTimeout="20000"
  5. redirectPort="443"
  6. URIEncoding="UTF-8"
  7. compression="on"
  8. noCompressionUserAgents="gozilla, traviata"
  9. compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json"
  10. />

说说配置细节: 
compression="on"   开启压缩支持  
noCompressionUserAgents="gozilla, traviata"   不压缩的内容  
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json" 压缩的类型  
至于代码,你无需写一行代码!轻松获得服务器访问加速!   并且IE也支持哦!  
借网友经验,如下实现,轻松获得IE支持:

Java代码  
  1. response.setContentType("text/plain;charset=utf-8");
  • gzipServer.rar (5.6 KB)
  • 下载次数: 452

Java压缩技术(五) GZIP相关——浏览器解析相关推荐

  1. java 压缩技术_Java压缩技术(三) ZIP解压缩——Java原生实现

    JavaEye的朋友跟我说:"你一口气把ZIP压缩和解压缩都写到一个帖子里,我看起来很累,不如分开好阅读".ok,面向读者需求,我做调整,这里单说ZIP解压缩! 相关链接: Jav ...

  2. Java压缩技术(四) GZIP——Java原生实现

    转载自  Java压缩技术(四) GZIP--Java原生实现 GZIP常常用在linxu环境下,是一种非常简单的压缩算法.在Java实现API中,它仅仅包含两个实现类:GZIPInputStream ...

  3. Java压缩技术(七) TAR——Commons实现

    转载自   Java压缩技术(七) TAR--Commons实现 顺便复习一遍linux命令:  tar cf <file.tar> <file>将由文件<file> ...

  4. Java压缩技术(二) ZIP压缩——Java原生实现

    转载自   Java压缩技术(二) ZIP压缩--Java原生实现 查过相关资料后才知道,ZIP应该算作归档类的压缩算法,每一门学科都可深可浅! 闲言少叙,先说ZIP压缩.  zip压缩需要通过Zip ...

  5. Java压缩技术(三) ZIP解压缩——Java原生实现

    转载自   Java压缩技术(三) ZIP解压缩--Java原生实现 解压缩与压缩运作方式相反,原理大抵相同,由ZipInputStream通过read方法对数据解压,同时需要通过CheckedInp ...

  6. 深入Java泛型(五):Json解析泛型

    前言 dio是一个强大的Dart Http请求库,支持Restful API.FormData.拦截器.请求取消.Cookie管理.文件上传/下载.超时.自定义适配器等- 为啥封装 统一处理请求域名: ...

  7. gzip java 压缩_Java压缩技术(四) GZIP——Java原生实现

    熟悉linux的朋友可能都用过文件压缩命令,譬如最为简单的gzip命令. 相关链接: Java压缩技术(一) ZLib Java压缩技术(二) ZIP压缩--Java原生实现 Java压缩技术(三) ...

  8. java技术详解_Java反射技术详解及实例解析

    前言 相信很多人都知道反射可以说是Java中最强大的技术了,它可以做的事情太多太多,很多优秀的开源框架都是通过反射完成的,比如最初的很多注解框架,后来因为java反射影响性能,所以被运行时注解APT替 ...

  9. java压缩_Java压缩

    java压缩 在最近的项目中,我们不得不做一些我个人从未真正看过的事情. 压缩. 我们需要拍摄几个文件和图像,将它们压缩并提供给FTP使用,是的,总有一天,感觉确实回到了90年代. 除了过去的FTP之 ...

最新文章

  1. JConsole是什么
  2. YOLOv4 中的 Mish 激活函数
  3. mssql sqlserver in 关键字在值为null的应用举例
  4. 安卓平板运行python_使用Python进行手机平板移动开发 | 学步园
  5. 动漫品牌“爆笑虫子”宣布与xNFT Protocol战略合作,开发NFT数字卡牌游戏
  6. Python 数据分析实战:经典的同期群分析
  7. 设计网页录入信息与自己定义server数据接收
  8. 系统内核快速编译并替换的方法
  9. Jacoco 实现 Android 端手工测试覆盖率统计
  10. 应用层协议和传输层协议
  11. 服务器安全(防止被攻击)
  12. ftp连接服务器失败:响应:220-FileZilla Server version 0.9.24 beta 响应:220-written by Tim Kosse (Tim.Kosse@gmx.d
  13. 【模拟电路】温度对器件特性的影响
  14. cpu.h-栈的宏定义-满减栈
  15. 歌曲:最初的梦想 原唱:范玮琪
  16. mysql5.5版本 64位+界面工具中文破解版版(有教程)
  17. 大数据面试题集锦-Hadoop面试题(一)
  18. VIVO可能在某一段时间内手机充电数据线上并没有ID脚
  19. mapbox初步使用
  20. 蓝桥杯练习题Java实现 入门训练 Fibonacci数列

热门文章

  1. leetcode199. 二叉树的右视图(层序遍历03)
  2. 满汉楼(德鲁伊连接池+DBUtils+DAO+Mysql)保姆级别分析+代码实现
  3. 7-23 还原二叉树 (25 分)(分析加详解)
  4. 算法-排序-快速排序(包含多种快速排序)
  5. 算法-计算逆序对个数
  6. 家居灯光控制系统设计 android,基于Android的室内照明控制系统设计与实现
  7. Mac(OS X)安装、配置并使用MySQL数据库
  8. HDU 1404 Digital Deletions(博弈 + SG函数打表)
  9. [2021.1.27多校省选模拟10]染色(min-max容斥/二项式反演)
  10. 2021牛客暑期多校训练营7 xay loves trees dfs序 + 主席树