1. 程式人生 > >GzipUtilities快速傳輸大量資料的例子!

GzipUtilities快速傳輸大量資料的例子!

//GzipUtilities傳輸資料
下面是GzipUtilities能傳輸大量資料!

import java.io.*;
import java.util.zip.*;
import javax.servlet.*;
import javax.servlet.http.*;
/*
  判斷是否能傳遞壓縮資料
*/
public class GzipUtilities
{
 //判斷客戶端瀏覽器是否支援gzip壓縮格式的資料,
 //如果支援,可將傳遞壓縮資料,這樣比沒壓縮資料的傳輸速度快。
 public static boolean isGzipSupported(HttpServletRequest request) {

  String encodings = request.getHeader("Accept-Encoding");
  return ((encodings != null)&&(encodings.indexOf("gzip") !=-1));
 }
   
 //判斷客戶端瀏覽器是否遮蔽壓縮資料,即傳遞壓縮資料時,客戶端是否能顯示
 public static boolean isGzipDisabled(HttpServletRequest request) {

  String flag = request.getParameter("disableGzip");
  return ((flag != null)&&(!flag.equalsIgnoreCase("false")));
 }

   //返回壓縮流
 public static PrintWriter getGzipWriter(HttpServletResponse response)
        throws IOException {
        return (new PrintWriter(new GZIPOutputStream(response.getOutputStream())));
 }
}

_____________________________________________________________________________

下面是LongServlet類測!

import java.io.*;
import java.util.zip.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class LongServlet extends HttpServlet {

 public void doGet(HttpServletRequest request,HttpServletResponse response)
               throws ServletException, java.io.IOException {

            PrintWriter out;
   if(GzipUtilities.isGzipSupported(request) &&
    !GzipUtilities.isGzipDisabled(request)) {
    out = GzipUtilities.getGzipWriter(response);
    response.setHeader("Content-Encoding","gzip");
   }
   else {
    out = response.getWriter();
   }
   out.println("<html><body>");
   String str = "I love you!!";
   for(int i=0;i<10000;i++) {
    out.println(str);
   }
      
   out.println("</body></html>");
   out.close();
 
 }

 public void doPost(HttpServletRequest request,HttpServletResponse response)
               throws ServletException, java.io.IOException {
  doGet(request,response);
 }

}