java实现gzip
来源:互联网 发布:九阴真经捏脸数据 明星 编辑:程序博客网 时间:2024/06/05 17:11
package com.test;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletOutputStream;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import org.apache.commons.io.FilenameUtils;import org.apache.commons.lang.StringUtils;/** * * @author LiMing * */@WebFilter("/MyFilter")public class MyFilter implements Filter { public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException { HttpServletRequest request = (HttpServletRequest)req; HttpServletResponse response = (HttpServletResponse)res; //获取请求路径 String uri = request.getRequestURI(); //获取请求后缀 .js .css .do 。。。 String ext = FilenameUtils.getExtension(uri); try{ //设置想用头信息 //关于相应头属性意思可以看博客: http://blog.csdn.net/qq_36291682/article/details/71860958 response.setHeader("Pragma", "No-cache"); response.setHeader("Cache-Control", "no-cache"); response.setDateHeader("Expires", -1); //设置相应编码信息 request.setCharacterEncoding("UTF-8"); response.setCharacterEncoding("UTF-8"); response.setHeader("renderer", "webkit"); response.setHeader("viewport", "width=device-width, initial-scale=1.0, minimum-scale=1.0, maximum-scale=1.0 user-scalable=no"); if(isGZipEncoding(request)){ //需要过滤的扩展名:.htm,.html,.jsp,.js,.ajax,.css String gzippPattern=",.htm,.html,.jsp,.js,.ajax,.css,.do,"; //如果是需要gzip压缩的路径 if(StringUtils.indexOf(gzippPattern, ",."+ext+",")!=-1){ //把response转换成gzipResponse BufferedResponse gzipResponse = new BufferedResponse(response); //doFilter 之后还会等待ServletOutputStream 返回数据 chain.doFilter(request, gzipResponse); //获取源数据 byte[] srcData = gzipResponse.getResponseData(); //输出数据 byte[] outData = null; //如果源数据的长度大于512 if(srcData.length > 512){ //gzip byte[] gzipData = ZipUtil.gZip(srcData); response.addHeader("Content-Encoding", "gzip"); response.setContentLength(gzipData.length); // outData = gzipData; } else { outData = srcData; } ServletOutputStream output = response.getOutputStream(); output.write(outData); output.flush(); output.close(); } else { chain.doFilter(request, response); } return; } chain.doFilter(request, response); }catch(Exception e){ e.printStackTrace(); }finally{ } }/** * 判断浏览器是不是支持gzip *@author LiMing E-mail:1151143484@qq.com *2017年5月13日 下午3:46:33 */ private boolean isGZipEncoding(HttpServletRequest request){ boolean flag=false; String encoding=request.getHeader("Accept-Encoding"); //gzip, deflate, sdch if(encoding.indexOf("gzip")!=-1){ flag=true; } return flag; } public void destroy() {}public void init(FilterConfig fConfig) throws ServletException {}}zipUtil.javapackage com.test;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.util.zip.GZIPOutputStream;public class ZipUtil {/** * 压缩GZip * * @param data * @return * @throws CustomizeException */public static byte[] gZip(byte[] data) {byte[] b = null;ByteArrayOutputStream bos = null;GZIPOutputStream gzip = null;try {bos = new ByteArrayOutputStream();gzip = new GZIPOutputStream(bos);gzip.write(data);gzip.finish();b = bos.toByteArray();} catch (IOException e) {e.printStackTrace();} finally {try {bos.close();gzip.close();} catch (IOException e) {e.printStackTrace();}}return b;}}
CSDN下载地址:http://download.csdn.net/detail/qq_36291682/9841687
git下载地址 整个项目下载地址:http://git.oschina.net/shadow00/he
0 0
- gzip算法java实现
- Java实现GZIP压缩
- java实现gzip
- Java实现Gzip的压缩和解压
- java web实现Gzip压缩传输
- java web实现Gzip压缩传输
- java Gzip
- Java实现文件压缩 使用GZIP和Zip方式
- Java实现文件压缩与解压[zip格式,gzip格式]
- Java实现文件压缩与解压[zip格式,gzip格式]
- Java实现文件压缩与解压[zip格式,gzip格式]
- java过滤器实现Gzip压缩实例源码教程
- java中zip与gzip实现文件压缩,解压
- Java实现文件压缩与解压[zip格式,gzip格式]
- gzip原理与实现
- gzip原理与实现
- gzip算法实现
- gzip原理与实现
- Android studio git忽略文件
- SublimeText3使用笔记
- 【APIO2016】uoj206 Gap
- java语言基础(49)——匿名内部类的本质理解
- 【快斗】JavaScript 图片弹窗
- java实现gzip
- Linux文件管理(1)——文件类型和文件属性
- 分布式消息队列
- ubuntu svn 出现Error validating server certificate for 'https://192.168.1.103:8443'
- 物理内存与虚拟内存区别与联系
- POJ
- BZOJ1432(ZJOI2009)[Function]题解--找规律||数论
- Linux系统中将普通用户添加到sudoers
- MVP详解---利用MVP模式实现一个登录界面