天天看點

JavaWeb-過濾器Filter學習(五)全站壓縮簡單示範:全站壓縮執行個體:完整項目源碼:

全站壓縮,最大的好久就是幫用戶端節省流量。

資料壓縮,我們需要用到二個Java類,也就是java.util.zip 中的

類 GZIPOutputStream

此類為使用 GZIP 檔案格式寫入壓縮資料實作流過濾器。

java.io

類 ByteArrayOutputStream

此類實作了一個輸出流,其中的資料被寫入一個 byte 數組。緩沖區會随着資料的不斷寫入而自動增長。可使用 toByteArray() 和 toString() 擷取資料。

我們利用GZIPOutputStream(OutputStream out) 使用預設緩沖區大小建立新的輸出流。

再用write(byte[] b)将 b.length 個位元組寫入此輸出流。

也就是把資料壓縮後寫入ByteArrayOutputStream。

然後通過記憶體流輸出到用戶端。

也就是在一個servlet這樣寫:

JavaWeb-過濾器Filter學習(五)全站壓縮簡單示範:全站壓縮執行個體:完整項目源碼:

這樣可以實作壓縮,但是每次我們有一個servlet就要寫一大長串的代碼,很臃腫,也很麻煩,畢竟代碼是一樣的。而且還無法壓縮jsp和html字元檔案。

這個時候,我們就需要用到過濾器了。隻要攔截所有的servlet和jsp/html就ok。隻要寫一次!很友善。

用過濾器來做全站壓縮,無論你怎麼增加servlet,jsp,html,還是照原來的寫,不用你增加代碼,我們隻要在過濾器中對你的資料進行壓縮發送到前台去就可以了!!!

注意,過濾器中用了裝飾模式。

<a href="https://github.com/chenhaoxiang/Java/tree/master/myGzipWeb">https://github.com/chenhaoxiang/Java/tree/master/myGzipWeb</a>

myGzipWeb.zip

轉載請附上原文部落格連結:

<a href="http://blog.csdn.net/qq_26525215">http://blog.csdn.net/qq_26525215</a>