java js css 压缩_使用JAVA实现JS/CSS的gzip压缩功能

ZGIPFilter

com.ztesoft.zsmart.web.filter.ZGIPFilter

ZGIPFilter

*.js

ZGIPFilter

*.css

public class ZGIPFilter extends HttpServlet implements Filter {

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,

ServletException {

// 判断是否包含了 Accept-Encoding 请求头部

HttpServletRequest s = (HttpServletRequest) request;

String header = s.getHeader("Accept-Encoding");

if (header != null && header.toLowerCase().contains("gzip")) {

HttpServletResponse resp = (HttpServletResponse) response;

final ByteArrayOutputStream buffer = new ByteArrayOutputStream();

HttpServletResponseWrapper hsrw = new HttpServletResponseWrapper(resp) {

@Override

public PrintWriter getWriter() throws IOException {

return new PrintWriter(new OutputStreamWriter(buffer, getCharacterEncoding()));

}

@Override

public ServletOutputStream getOutputStream() throws IOException {

return new ServletOutputStream() {

@Override

public void write(int b) throws IOException {

buffer.write(b);

}

};

}

};

chain.doFilter(request, hsrw);

byte[] gzipData = gzip(buffer.toByteArray());

resp.addHeader("Content-Encoding", "gzip");

resp.setContentLength(gzipData.length);

ServletOutputStream output = response.getOutputStream();

output.write(gzipData);

output.flush();

}

else {

chain.doFilter(request, response);

}

}

// 用 GZIP 压缩字节数组

private byte[] gzip(byte[] data) {

ByteArrayOutputStream byteOutput = new ByteArrayOutputStream(10240);

GZIPOutputStream output = null;

try {

output = new GZIPOutputStream(byteOutput);

output.write(data);

}

catch (IOException e) {

}

finally {

try {

output.close();

}

catch (IOException e) {

}

}

return byteOutput.toByteArray();

}

}

GZIP前

97395387e03fab7485cb98c0420c1c95.png

GZIP后

bad539a3af18e2baf36bcafe5a934360.png

结论:如果服务器端未采用gzip格式压缩,可以通过这样的配置实现。由上图看出来,文件压缩之后大小由原来的94890变成33673,将近减小了三分之二,还是可观的。这里只配置了JS和CSS的压缩,HTML静态页面应可以使用,图片使用GZIP压缩会有点问题(以png为例,大小由原来的480605变成了480736,反而变大了)。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值