博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
利用Filter实现数据的压缩回写
阅读量:6239 次
发布时间:2019-06-22

本文共 2715 字,大约阅读时间需要 9 分钟。

具体的Filter实现

public class GzipFilter implements Filter {    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);  //response.getwriter  response.getOutputStream                  //取出缓冲的数据压缩后输出        byte out[] = myresponse.getBuffer();  //得到目标资源的输出        System.out.println("压之前:" + out.length);                        byte gzipout[] = gzip(out);        System.out.println("压之后:" + gzipout.length);                response.setHeader("content-encoding", "gzip");        response.setHeader("content-length", gzipout.length + "");        response.getOutputStream().write(gzipout);    }        public byte[] gzip(byte b[]) throws IOException{                ByteArrayOutputStream bout = new ByteArrayOutputStream();        GZIPOutputStream gout = new GZIPOutputStream(bout);        gout.write(b);        gout.close();        return bout.toByteArray();    }        class MyResponse extends HttpServletResponseWrapper{        private ByteArrayOutputStream bout = new ByteArrayOutputStream();        private PrintWriter pw;                private HttpServletResponse response;        public MyResponse(HttpServletResponse response) {            super(response);            this.response = response;        }        @Override        public ServletOutputStream getOutputStream() throws IOException {            return new MyServletOutputStream(bout);    //myresponse.getOutputStream().write("hahah");        }                @Override        public PrintWriter getWriter() throws IOException {            pw = new PrintWriter(new OutputStreamWriter(bout,response.getCharacterEncoding()));            return pw;  //MyResponse.getWriter().write("中国");        }        public byte[] getBuffer(){            if(pw!=null){                pw.close();            }            return bout.toByteArray();        }    }        class MyServletOutputStream extends ServletOutputStream{        private ByteArrayOutputStream bout;        public MyServletOutputStream(ByteArrayOutputStream bout){            this.bout = bout;        }        @Override        public void write(int b) throws IOException {            bout.write(b);        }            }    public void destroy() {        // TODO Auto-generated method stub    }        public void init(FilterConfig filterConfig) throws ServletException {        // TODO Auto-generated method stub    }}

 

转载于:https://www.cnblogs.com/zhangbaowei/p/4730922.html

你可能感兴趣的文章
WBS分解
查看>>
centos5.6安装FTP
查看>>
http-equiv,很强大
查看>>
安装字体与ubuntu-tweak
查看>>
平均值方法:Avg API-Medoo使用指南
查看>>
centos6,7没有安装ifconfig命令的解决方法
查看>>
web页面禁用右键、禁用左键、禁止查看源代码、禁用触摸板
查看>>
Linux Kernel Device Tree 配置框架
查看>>
笔记:Python进行数据库文件导出备份
查看>>
Android开发学习记录(2015-05-19 23:05:34更新)
查看>>
一封高三老师,写给进入大学的学生的信,看完沉思良久
查看>>
解决checkbox选中但是不显示打钩的问题
查看>>
大数据公司如何实现标准化服务输出?NO.410华量软件
查看>>
bias和variance
查看>>
SpringBoot基础教程2-1-1 搭建RESTful风格Web服务
查看>>
uniupload mapping
查看>>
问题(1)
查看>>
python发邮件
查看>>
Linux系统管理笔记
查看>>
Spring Cloud和聚合工程架构设计微服务框架
查看>>