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

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

其实,就这些内容!  
当然,除了上述代码方式,针对于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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/327857.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

在实际使用中 mysql所支持的触发器有_2016计算机二级MySQL冲刺题及答案

2016计算机二级MySQL冲刺题及答案11[简答题] 请使用UPDATE语句将数据库db_test的表content中留言人姓名为“MySQL初学者”的留言内容修改为“如何使用INSERT语句?”。参考解析&#xff1a;在MySQL命令行客户端输入如下SQL语句即可实现&#xff1a;mysql>USE db-test;Databa…

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c

[Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated c 解决MySQL报错&#xff1a;1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column informat [Err] 1055 - Expression #1 of ORDER BY …

在mysql中插入日期

preparedStatement.setDate(5,new Date(new java.util.Date().getTime()));//给第五个占位符&#xff1f; 的值赋值为new Date(new java.util.Date().getTime())&#xff1b; 外面的Date是SQL中的java.sql.*&#xff1b; 里面的Date是java中的java.util.Date&#xff1b;

Hibernate中使用Criteria查询及注解——(HibernateUtil)

HibernateUtil hibernate工具类&#xff1a; package cn.bdqn.hibernate_Criteria.Util;import org.hibernate.Session; import org.hibernate.cfg.Configuration;public class HibernateUtil {private static Session session; …

进程管理supervisor的简单说明

背景&#xff1a; 项目中遇到有些脚本需要通过后台进程运行&#xff0c;保证不被异常中断&#xff0c;之前都是通过nohup、&、screen来实现&#xff0c;带着能否做一个start/stop/restart/reload的服务启动的想法找到里Supervisor。关于supervisor的介绍在网上大致搜索总结…

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

转载自 Java压缩技术&#xff08;四&#xff09; GZIP——Java原生实现 GZIP常常用在linxu环境下&#xff0c;是一种非常简单的压缩算法。在Java实现API中&#xff0c;它仅仅包含两个实现类&#xff1a;GZIPInputStream和GZIPOutputStream。 GZIPOutputStream类用于压缩 GZIPI…

数据结构树的基本操作_树的各类基本操作(数据结构)

#include "iostream"/*输入&#xff1a;ABC DE G FABC DE G F*/#include "bits/stdc.h"using namespace std;typedef struct bitnode{char data;bitnode *lchild,*rchild;} *bintree;bintree creatree(bintree &root)//先序创建树{char agetchar();if(…

下载bilibli网站视频

https://www.videofk.com/bilibili-video-download/ bilibili https://www.videofk.com/bilibili-video-download/search?urlhttps%3A%2F%2Fwww.bilibili.com%2Fvideo%2Fav50186988&selectbilibili

处理js乱码

1.将time.js编码格式更改外 2.在Tomcat设置VM-OPTION 选项为-Dfile.encodingutf-8

asp.net core 实战之 redis 负载均衡和quot;高可用quot;实现

1.概述 分布式系统缓存已经变得不可或缺,本文主要阐述如何实现redis主从复制集群的负载均衡,以及 redis的"高可用"实现, 呵呵双引号的"高可用"并不是传统意义的高可用哈,而是 redis集群挂了,并不影响asp.net core 的运行, 欲知详情,请看下文. 注意: 本文主…

Java IO: 其他字符流(下)

转载自 Java IO: 其他字符流(下)作者: Jakob Jenkov 译者: 李璟(jlee381344197gmail.com) 本小节会简要概括Java IO中的PushbackReader&#xff0c;LineNumberReader&#xff0c;StreamTokenizer&#xff0c;PrintWriter&#xff0c;StringReader&#xff0c;StringWriter。P…

java 长字符串 比较_Java字符串比较(3种方法)

字符串比较是常见的操作&#xff0c;包括比较相等、比较大小、比较前缀和后缀串等。在 Java 中&#xff0c;比较字符串的常用方法有 3 个&#xff1a;equals() 方法、equalsIgnoreCase() 方法、 compareTo() 方法。下面详细介绍这 3 个方法的使用。equals() 方法equals() 方法将…

IntelliJ IDEA 项目结构旁边出现 0%methods,0% lines covered 解决

IntelliJ IDEA 项目结构旁边出现 0%methods,0% lines covered 解决 windows 1.选中根目录文件夹 ctrl alt f6弹出如下框,取消勾选-->点击Show Selected就可以去掉了 mac 1.选中根目录文件夹 option fn command f6弹出如下框,取消勾选-->点击Show Select…

javaweb---简易邮件发送

邮件发送 2.jar包的支持 activation-1.1.1.jar mail-1.4.7.jar 3.授权码的获取 4.简易文本邮件发送的实现 由上图我们可以确定几个必须步骤 1.创建session对象 2.创建Transport对象 3.使用邮箱的用户名和授权码连上邮件服务器 4.创建一个Message对象&#xff08;需要传递…

Hibernate中使用Criteria查询及注解——(DeptTest.java)

DeptTest.java 测试类&#xff1a; 先创建Session&#xff1a; private Session session;private Transaction tx;Beforepublic void beforeMethod(){sessionnew Configuration().configure().buildSessionFactory().openSession();}关闭Session&#xff1a; Afterpublic void…

asp.net core 负载均衡集群搭建(centos7+nginx+supervisor+kestrel)

概述 本文目的是搭建三台asp.net core 集群, 并配上 nginx做负载均衡 首先准备要运行的源码 http://pan.baidu.com/s/1c20x0bA 准备三台服务器(或则虚拟机) 192.168.182.129 , 192.168.182.130 , 192.168.182.131 并将源码发布至三台服务器的 /root/aspnetcore/anuoapc 目录 …

Java IO教程

转载自 Java IO教程译文链接 作者&#xff1a;Jakob Jenkov 译者&#xff1a;Connor (cronnorcgmail.com) &#xff0c;李璟 校对&#xff1a;方腾飞 Java IO 是一套Java用来读写数据&#xff08;输入和输出&#xff09;的API。大部分程序都要处理一些输入&#xff0c;并由输…

Java web登录拦截器_SpringMVC拦截器(实现登录验证拦截器)

本例实现登陆时的验证拦截&#xff0c;采用SpringMVC拦截器来实现核心代码首先是index.jsp,显示链接String path request.getContextPath();String basePath request.getScheme()"://"request.getServerName()":"request.getServerPort()path"/&quo…

Java Poi 向excel中插入图片

博客 package com.unicom.yangjiabin.utils;import java.awt.image.BufferedImage; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import javax.imageio.ImageIO; import org.apache.po…

visual studio for mac的离线安装初体验

微软2016 Connect 大会发布了visuo studio for mac的pre版本&#xff0c;由于工作原因&#xff0c;现在工作环境是mac&#xff0c;虽然开发现在是在用python&#xff0c;但一直关注着.net的发展&#xff0c;于是自己很激动的体验了一把&#xff0c;在张善友老师的提醒下,把安装…