`
meiyx
  • 浏览: 180934 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

使用GZIP压缩的方式向客户端传输响应数据

阅读更多
1, 工具类:测试客户端是否支持GZIP编码压缩方式 & 获得支持GZIP的PrintWriter对象

package freebsd;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.zip.GZIPOutputStream;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;


public class Utilities {
/*
* 测试客户端浏览器是否支持gzip的编码方式
*/
public static boolean isSurpported(HttpServletRequest request)
{
   String encodingString = request.getHeader("Accept-Encoding");
   return (encodingString!=null) && (encodingString.indexOf("gzip")!=-1);
}
/*
* 取得一个压缩的PrintWriter
*/
public static PrintWriter getWriter(HttpServletResponse response) throws IOException
{
   ServletOutputStream sos = response.getOutputStream();
   GZIPOutputStream gzipos = new GZIPOutputStream(sos);
   return new PrintWriter(gzipos);
}

}
2,Servlet类,产生一个长字符串,然后在html页面中请求该servlet:

import freebsd.*;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
* Servlet implementation class ServletGzip
*/
public class ServletGzip extends HttpServlet {
private static final long serialVersionUID = 1L;
       
    /**
     * @see HttpServlet#HttpServlet()
     */
    public ServletGzip() {
        super();
        // TODO Auto-generated constructor stub
    }

/**
* @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
*/
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   doPost(request, response);
}

/**
* @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
   response.setContentType("text/html");
   response.setStatus(response.SC_OK);
   PrintWriter out;
   if(Utilities.isSurpported(request))
   {
    out = Utilities.getWriter(response);

   //协议: 通知客户端使用gzip这种压缩方式而不是其它的,如compress
   response.setHeader("Content-Encoding", "gzip");
   }else {
    out = response.getWriter();
   }
  StringBuilder sBuilder = new StringBuilder();
   for(int i=0; i!=5000; ++i)
   {
    sBuilder.append("Printing the long string... ...!");
   }
   out.println(sBuilder);
out.close();
}
}

分享到:
评论

相关推荐

    IIS的Gzip压缩图文教程

    网站的访问速度是由多个因素所共同决定的,这些因素例如应用程序的响应速度、网络带宽、服务器性能、与客户端之间的网络传输速度,服务器是否启用GZip压缩等等。

    Android中使用OkHttp包处理HTTP的get和post请求的方法

    使用GZIP压缩减少传输的数据量 缓存响应避免重复的网络请求 当你的网络出现拥挤的时候,就是OKHttp 大显身手的时候, 它可以避免常见的网络问题,如果你的服务是部署在不同的IP上面的,如果第一个连接失败, OkHT

    X3-BLOG 博客源码

    存资源的占用降至最低水平,并通过gzip压缩进一步缩减服务器的网络带宽消耗,提高响应速度 。 无Session设计杜绝了用户会话无故丢失的尴尬,客户端关联的会话加密方式带来了用户数据的高安全性,独特的 XSL结构...

    最新.net技术博客源代码.rar

    屏弃了传统的控件开发方式,所有执行过程采用单向流的生成方式,使其对服务器CPU及内存资源的占用降至最低水平,并通过gzip压缩进一步缩减服务器的网络带宽消耗,提高响应速度 。 无Session设计杜绝了用户会话...

    graphql-crunch:通过合并重复值来减小GraphQL响应的大小

    图ql 通过最小化重复并改善可压缩性来优化JSON响应。 在,我们看到原始JSON大小减少了76%,gzip大小减少了30%。 这样可以减少传输时间,并在移动设备上更快地进行JSON解析。客户支持graphql-crunch与客户端无关,...

    JAVA上百实例源码以及开源项目源代码

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    X3BLOG 单用户版 1.0 build80707 (access)

    屏弃了传统的控件开发方式,所有执行过程采用单向流的生成方式,使其对服务器CPU及内存资源的占用降至最低水平,并通过gzip压缩进一步缩减服务器的网络带宽消耗,提高响应速度 。 <br> 无Session设计杜绝了用户...

    java源码包---java 源码 大量 实例

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包2

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包3

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    java源码包4

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    JAVA上百实例源码以及开源项目

     Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、关闭输入流、关闭套接字关闭输出流、输出错误信息等Java编程小技巧。 Java数组倒置...

    gofast:分布式应用程序的高性能传输协议

    添加传输级别压缩,例如gzip , lzw ... 低于μs的协议开销。 与连接数和核心数成比例。 最重要的是-不会尝试解决世界上所有的问题。快速链接。 。 。 。 。 。 开发者笔记Transport{}对于并发访问是安全的。 ...

    XML,XSLT,AJAX三大技术打造开源多用户博客X3BLOG

    屏弃了传统的控件开发方式,所有执行过程采用单向流的生成方式,使其对服务器CPU及内存资源的占用降至最低水平,并通过gzip压缩进一步缩减服务器的网络带宽消耗,提高响应速度 。 无Session设计杜绝了用户会话无故...

    X3BLOG AJAX国产大型开源多用户博客系统 1.1.0.beta1源码版

    存资源的占用降至最低水平,并通过gzip压缩进一步缩减服务器的网络带宽消耗,提高响应速度 。 无Session设计杜绝了用户会话无故丢失的尴尬,客户端关联的会话加密方式带来了用户数据的高安全性,独特的 XSL结构...

    X3BLOG AJAX国产大型开源多用户博客系统 1.1.0.beta1编译版

    存资源的占用降至最低水平,并通过gzip压缩进一步缩减服务器的网络带宽消耗,提高响应速度 。 无Session设计杜绝了用户会话无故丢失的尴尬,客户端关联的会话加密方式带来了用户数据的高安全性,独特的 XSL结构...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    Java数据压缩与传输实例 1个目标文件 摘要:Java源码,文件操作,数据压缩,文件传输 Java数据压缩与传输实例,可以学习一下实例化套按字、得到文件输入流、压缩输入流、文件输出流、实例化缓冲区、写入数据到文件、...

    基于C ++ 14/17的HTTP应用程序框架drogon.rar

    *支持gzip,brotli压缩传输; *支持流水线; *提供轻量级的命令行工具drogon_ctl,以简化Drogon中各种类的创建以及视图代码的生成; *支持基于非阻塞I / O的异步读写数据库(PostgreSQL和MySQL(MariaDB)数据库);...

Global site tag (gtag.js) - Google Analytics