java使用Filter实现全栈压缩
来源:互联网 发布:红薯夫妇知乎扒皮 编辑:程序博客网 时间:2024/05/18 00:52
在服务器向浏览器响应数据的时候,对响应的数据进行压缩,便于传输和提升效率。
实现思路:
1、拦截所有请求
2、获取写出的内容
3、对写出的内容进行压缩
4、将压缩内容返回给浏览器
采用的压缩格式为gzip,浏览器支持。
过滤器:
/** * Servlet Filter implementation class GlobalGzipFilter * 实现的全栈压缩 */@WebFilter("/*")public class GlobalGzipFilter implements Filter { /** * Default constructor. */ public GlobalGzipFilter() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub // 重构响应对象 GzipResponse rsp=new GzipResponse((HttpServletResponse)response, new ByteArrayOutputStream()); // pass the request along the filter chain chain.doFilter(request, rsp); //获取响应的内容 ByteArrayOutputStream baos=rsp.getOutStream(); System.out.println("压缩之前:"+baos.size()+"字节"); //开始压缩 //创建内存流对象,存储压缩之后的的内容 ByteArrayOutputStream newbaos=new ByteArrayOutputStream(); GZIPOutputStream gzip=new GZIPOutputStream(newbaos); gzip.write(baos.toByteArray()); gzip.flush(); gzip.close(); System.out.println("压缩之后:"+newbaos.size()+"字节"); HttpServletResponse resp=(HttpServletResponse)response; //设置消息头,标记内容为gzip resp.setHeader("Content-Encoding", "gzip");resp.getOutputStream().write(newbaos.toByteArray());//写出真正的内容 } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub } //自定义的响应对象 private class GzipResponse extends HttpServletResponseWrapper{ private ByteArrayOutputStream baos;//内存输出字节流 private PrintWriter pw; public GzipResponse(HttpServletResponse response,ByteArrayOutputStream baos) { super(response); this.baos=baos; // TODO Auto-generated constructor stub } //获取响应内容的内存流对象,存储着要响应的数据 public ByteArrayOutputStream getOutStream(){ // TODO Auto-generated method stub if(pw!=null){ pw.flush(); } return baos; } @Override public PrintWriter getWriter() throws IOException { //将响应的内容写出到指定的内存流中 pw=new PrintWriter(new OutputStreamWriter(baos,"UTF-8")); return pw; } }}
阅读全文
0 0
- java使用Filter实现全栈压缩
- Filter-----全栈压缩
- java web使用filter进行全站压缩的原理及实现
- Filter-全站压缩
- 9Filter高级开发2--实现全站压缩
- Filter技术实现全网站的压缩输出
- Filter 全站GZIP压缩过滤的原理及其实现
- 使用filter实现网站的gzip压缩
- javaweb--Filter全站压缩
- 解决全站压缩Filter
- Filter拦截器压缩全网站数据
- Java中使用filter机制来GZIP压缩网页
- 过滤器Filter的案例4——实现全站的数据的压缩
- 过滤器(Filter)应用:全站压缩----Gzip网页压缩输出
- 全站压缩(java)
- 使用Java实现文件的压缩和解压缩
- 使用Java实现文件的压缩和解压缩
- 使用Java实现文件的压缩和解压缩
- InnoDB存储引擎--1、全文索引
- 无铅工艺中的可焊性分析
- Densely Connected Convolutional Networks-2017 CVPR 优秀论文
- Linux内核 kmalloc, kzalloc & devm_kzalloc 区别
- java8源码分析ArrayList
- java使用Filter实现全栈压缩
- 简单的第三方分享QQ
- jar包和war包的介绍和区别
- acm网站
- mybatis-generator 代码自动生成工具(maven方式)
- 深入理解RunLoop
- 浅谈flex布局
- LIN总线协议记录
- 在Max上安装opencv3 并在Xcode下使用