2013年3月22日 星期五

Tomcat網頁GZIP壓縮設定

0


先說明一下什麼是網頁GZIP壓縮設定,因為目前網頁都是以原始碼的模式進行傳遞,再藉由瀏覽器去直譯產出你看到的網頁,所以當你看到網頁原始碼時,都是一些如何呈現的語法,如果我們先將網頁原始碼壓縮後再傳輸,到了瀏覽者的電腦上再解開,這樣就可以簡省很多傳輸的頻寬。而網頁原始碼這種純文字格式的檔案,壓縮起來非常有成就感,因為裡面太多空白及相同的字眼,所以一般壓起來,都可以壓縮到只剩下十之一以下的容量,這樣就能快速傳送網頁資訊。
目前有支援GZIP的瀏覽器非常眾多,包含IE、Firefox、chrome等目前市佔率極高的瀏覽器都有支援,所以等於九成以上的瀏覽者都可以適用,這次我們就來說說JAVA WEB APPLICATION Tomcat如何設定 GZIP壓縮傳輸設定,首先我們開啟Tomcat/conf/server.xml,找尋以下設定

<Connector port="8080″ maxHttpHeaderSize="8192″
  maxThreads="150″ minSpareThreads="25″ maxSpareThreads="75″
  enableLookups="false" redirectPort="8443″ acceptCount="100″
  connectionTimeout="20000″
  disableUploadTimeout="true" />
這主要是設定Tomcat系統在運行時的一些參數,包含監聽的Port、同時最大接受的request等,其實還有很多參數可以設定,當然包含了GZIP的壓縮設定,所以我們可以在此加上以下參數
  compression="on"  
是否啟用壓縮機制
  compressionMinSize="2048″ 
設定壓縮檔案最小的size,單位是Bytes,所以預設值為2K,這裡的意思是當檔案超過2K時才會進行壓縮
  noCompressionUserAgents="gozilla, traviata"
設定不支援的瀏覽器就不使用壓縮
  compressableMimeType="text/html,text/xml"
設定要壓縮的contextType為何,除了html及xml之外,還可以多設定一些也是原始碼的檔案例如text/css,text/javascript等,讓css及javascript的檔案也能壓縮傳輸,至於一些圖檔及已經壓縮過的檔案建議不要設進來,因為圖檔一般都已經有壓縮過了,如果將一些壓縮過的檔案再壓,除了浪費時間外,搞不好檔案還會愈壓愈大喔
所以我們就趕快設定看看是否有改善,加入上述壓縮的設定後,參數如下:
<Connector port="8080″ maxHttpHeaderSize="8192″
  maxThreads="150″ minSpareThreads="25″ maxSpareThreads="75″
  enableLookups="false" redirectPort="8443″ acceptCount="100″
  disableUploadTimeout="true"
  connectionTimeout="20000″
  compression="on"
  compressionMinSize="2048″
  noCompressionUserAgents="gozilla, traviata"
  compressableMimeType="text/html,text/xml"/> 



  1. <%@ page import="javax.servlet.jsp.*,                  
  2.                  java.io.*,  
  3.                  java.util.zip.*"  
  4. %>  
  5.                    
  6. <%  
  7.     String encodings = request.getHeader("Accept-Encoding");  
  8.     PrintWriter outWriter = null;  
  9.       
  10.     if ((encodings != null) && (encodings.indexOf("gzip") != -1)) {  
  11.          OutputStream outA = response.getOutputStream();  
  12.          outWriter = new PrintWriter(new GZIPOutputStream(outA), false);        
  13.          response.setHeader("Content-Encoding""gzip");  
  14.          System.out.println("ZIPPED VERSION");  
  15.     } else {  
  16.   System.out.println("UN-ZIPPED VERSION");  
  17.         outWriter = new PrintWriter(response.getOutputStream(), false);        
  18.     }  
  19.     
  20.     outWriter.println("<HTML><BODY>");      
  21.       
  22.     for(int i=0; i<10000; i++) {        
  23.        outWriter.println("blah blah blah<br>");      
  24.     }      
  25.       
  26.     outWriter.println("</BODY></HTML>");      
  27.     outWriter.close();  
  28.       
  29. %>  



http://herolin.twbbs.org/entry/how-to-setting-GZIP-compression-in-tomcat/

0 意見:

張貼留言