生活随笔
收集整理的這篇文章主要介紹了
Java压缩技术(五) GZIP相关——浏览器解析
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載自? ?Java壓縮技術(五) GZIP相關——瀏覽器解析
GZIP本身就是一種網絡流壓縮算法,而且應用相當廣泛。如果網絡訪問過程中,其數據流較大,勢必降低網絡訪問效率,此時就需要考慮使用壓縮!當然,在瀏覽器與服務器的交互中,要考慮瀏覽器是否支持這些算法,以及服務器運行壓縮所帶來的負載。如果你關注瀏覽器上傳的“Accept-Encoding”屬性,你就能看明白這一點。?
GZIP如何壓縮,我這里就不廢話了,不清楚的朋友請關注(Java壓縮技術(四) GZIP——Java原生實現)?
至于如何使得服務器支持gzip的流輸出,關鍵點只有一行代碼:?
Java代碼
response.setHeader("Content-Encoding",?"gzip");??
經過這項設置,瀏覽器就能夠很好的作出響應!?
先看FireFox,如圖:?
?
再看Opera,如圖:?
?
瀏覽器在打開該頁面時,就可解壓獲得并展示其內容!
至于IE就慘了,愣是要求下載!
?可能缺少什么設置!(注意后續服務器配置!
?不是無解哦!)?
?你不信就這么簡單?上代碼!?
Java代碼?
????import?java.io.ByteArrayOutputStream;??import?java.io.IOException;??import?java.io.OutputStream;??import?java.util.zip.GZIPOutputStream;????import?javax.servlet.ServletException;??import?javax.servlet.http.HttpServlet;??import?javax.servlet.http.HttpServletRequest;??import?javax.servlet.http.HttpServletResponse;???????????public?class?GZipServlet?extends?HttpServlet?{????????private?static?final?long?serialVersionUID?=?-4811926975427533081L;??????private?static?final?String?ENCODING?=?"UTF-8";????????????????????private?byte[]?compress(byte[]?data)?throws?Exception?{????????????ByteArrayOutputStream?baos?=?new?ByteArrayOutputStream();??????????????????????GZIPOutputStream?gos?=?new?GZIPOutputStream(baos);????????????gos.write(data,?0,?data.length);????????????gos.finish();????????????byte[]?output?=?baos.toByteArray();????????????baos.flush();??????????baos.close();????????????return?output;??????}???????????????????private?void?excute(HttpServletRequest?request,?HttpServletResponse?response)??????????????throws?ServletException,?IOException?{????????????byte[]?data?=?"我是一個中國人!".getBytes(ENCODING);????????????try?{??????????????byte[]?output?=?compress(data);??????????????????????????????response.setHeader("Content-Encoding",?"gzip");????????????????????????????response.setCharacterEncoding(ENCODING);????????????????????????????response.setContentLength(output.length);????????????????OutputStream?out?=?response.getOutputStream();??????????????out.write(output);??????????????out.flush();??????????????out.close();??????????}?catch?(Exception?e)?{??????????????e.printStackTrace();??????????}??????}?????????????????protected?void?doGet(HttpServletRequest?request,??????????????HttpServletResponse?response)?throws?ServletException,?IOException?{??????????excute(request,?response);??????}?????????????????protected?void?doPost(HttpServletRequest?request,??????????????HttpServletResponse?response)?throws?ServletException,?IOException?{??????????excute(request,?response);??????}????}??
其實,就這些內容!
?
當然,除了上述代碼方式,針對于tomcat可以通過修改配置獲得支持!
Xml代碼?
<Connector?????????????????port="8080"?????????????????protocol="HTTP/1.1"????????????????connectionTimeout="20000"????????????????redirectPort="443"?????????????????URIEncoding="UTF-8"????????????????compression="on"???????????????????noCompressionUserAgents="gozilla,?traviata"???????????????????compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json"???/>????
說說配置細節:?
compression="on"?? 開啟壓縮支持
?
noCompressionUserAgents="gozilla, traviata"?? 不壓縮的內容
?
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain,application/json" 壓縮的類型
?
至于代碼,你無需寫一行代碼!輕松獲得服務器訪問加速!
?
并且IE也支持哦!
?
借網友經驗,如下實現,輕松獲得IE支持:?
Java代碼??
response.setContentType("text/plain;charset=utf-8");? ?
- gzipServer.rar?(5.6 KB)
- 下載次數: 452
總結
以上是生活随笔為你收集整理的Java压缩技术(五) GZIP相关——浏览器解析的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。