java压缩传输gzip_java压缩Gzip

java压缩Gzip

package com.wordyun.web.filter;

import java.io.ByteArrayOutputStream;

import java.io.IOException;

import java.io.OutputStreamWriter;

import java.io.PrintWriter;

import java.util.zip.GZIPOutputStream;

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.WriteListener;

import javax.servlet.http.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpServletResponseWrapper;

/**

* GZIP压缩

* @author Administrator

*

*/

public class GzipFilter implements Filter {

@Override

public void init(FilterConfig filterConfig) throws ServletException {

// TODO Auto-generated method stub

}

@Override

public void doFilter(ServletRequest req, ServletResponse resp,

FilterChain chain) throws IOException, ServletException {

HttpServletRequest request=(HttpServletRequest) req;

HttpServletResponse response=(HttpServletResponse) resp;

MyResponse myResponse=new MyResponse(response);

chain.doFilter(request, myResponse);

byte[] mb=myResponse.getByte();

System.out.println(mb.length);

byte[] gb=getGzipByte(mb);

System.out.println(gb.length);

response.setHeader("content-encoding", "gzip");

response.setHeader("content-length", gb.length+"");

response.getOutputStream().write(gb);

}

private byte[] getGzipByte(byte[] mb){

try {

ByteArrayOutputStream bout=new ByteArrayOutputStream();

GZIPOutputStream gzipout = new GZIPOutputStream(bout);

gzipout.write(mb);

gzipout.close();

return bout.toByteArray();

} catch (IOException e) {

throw new RuntimeException(e);

}

}

class MyResponse extends HttpServletResponseWrapper{

private ByteArrayOutputStream bout=new ByteArrayOutputStream();

private PrintWriter pw=null;

private HttpServletResponse response;

public MyResponse(HttpServletResponse response) {

super(response);

this.response=response;

}

@Override

public ServletOutputStream getOutputStream() throws IOException {

return new ServletOutputStream(){

@Override

public boolean isReady() {

// TODO Auto-generated method stub

return false;

}

@Override

public void setWriteListener(WriteListener writeListener) {

// TODO Auto-generated method stub

}

@Override

public void write(int b) throws IOException {

bout.write(b);

}

};

}

@Override

public PrintWriter getWriter() throws IOException {

pw=new PrintWriter(new OutputStreamWriter(bout, "utf-8"));

return pw;

}

public byte[] getByte(){

if(pw!=null) pw.close();

return bout.toByteArray();

}

}

@Override

public void destroy() {

// TODO Auto-generated method stub

}

}

在web.xml配置过滤器<?xml version="1.0" encoding="UTF-8"?>

xmlns="http://xmlns.jcp.org/xml/ns/javaee"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

id="WebApp_ID" version="3.1">

GzipFilter

com.wordyun.web.filter.GzipFilter

GzipFilter

*.jsp

GzipFilter

*.html

GzipFilter

*.js

GzipFilter

*.css

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值