码迷,mamicode.com
首页 > Web开发 > 详细

Web压缩过滤器

时间:2016-07-23 21:33:54      阅读:187      评论:0      收藏:0      [点我收藏+]

标签:压缩过滤器

                        Web压缩过滤器



           

    package mytest.gzipfilter;

    

    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.http.HttpServletRequest;

    import javax.servlet.http.HttpServletResponse;

    import javax.servlet.http.HttpServletResponseWrapper;

    

    /**

     * Servlet Filter implementation class GzipFilter

     */

    public class GzipFilter implements Filter {

    

     /**

     * Default constructor.

     */

     public GzipFilter() {

     // 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 req, ServletResponse res,

     FilterChain chain) throws IOException, ServletException {

     // TODO Auto-generated method stub

     // place your code here

     HttpServletRequest request = (HttpServletRequest) req;

     HttpServletResponse response = (HttpServletResponse) res;

    

     BufferHttpResponse bufferHttpResponse = new BufferHttpResponse(response);

     // pass the request along the filter chain

     chain.doFilter(request, bufferHttpResponse);

     byte out[] = bufferHttpResponse.getBuffer();

     ByteArrayOutputStream bout = new ByteArrayOutputStream();

     GZIPOutputStream gout = new GZIPOutputStream(bout);

     gout.write(out);

     gout.close();

    

     byte gzip[] = bout.toByteArray();

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

     response.setContentLength(gzip.length);

     response.getOutputStream().write(gzip);

     }

    

     /**

     * @see Filter#init(FilterConfig)

     */

     public void init(FilterConfig fConfig) throws ServletException {

     // TODO Auto-generated method stub

     }

    

    }

    

    class BufferHttpResponse extends HttpServletResponseWrapper {

     private HttpServletResponse response;

     private ByteArrayOutputStream bout = new ByteArrayOutputStream();

     private PrintWriter pw;

    

     public BufferHttpResponse(HttpServletResponse response) {

     super(response);

     this.response = response;

     }

    

     @Override

     public ServletOutputStream getOutputStream() throws IOException {

     return new MyServletOutputStream(bout);

     }

    

     @Override

     public PrintWriter getWriter() throws IOException {

     pw = new PrintWriter(new OutputStreamWriter(bout,this.response.getCharacterEncoding()));

     return pw;

     }

    

     public byte[] getBuffer() {

     try {

                if(pw != null){

                pw.close();

                }

     if (bout != null)

     bout.flush();

     return bout.toByteArray();

     } catch (Exception e) {

     throw new RuntimeException(e);

     }

     }

    

    }

    

    class MyServletOutputStream extends ServletOutputStream {

     private ByteArrayOutputStream bout;

    

     public MyServletOutputStream(ByteArrayOutputStream bout) {

     this.bout = bout;

     }

    

     @Override

     public void write(int arg0) throws IOException {

    

     }

    

    }


web.xml中配置压缩内容

   

    

 <filter>

    <display-name>GzipFilter</display-name>

    <filter-name>GzipFilter</filter-name>

    <filter-class>mytest.gzipfilter.GzipFilter</filter-class>

  </filter>

  <filter-mapping>

    <filter-name>GzipFilter</filter-name>

    <url-pattern>/*.jsp</url-pattern>

    <dispatcher>FORWARD</dispatcher>

    <dispatcher>REQUEST</dispatcher>

  </filter-mapping>

  <filter-mapping>

    <filter-name>GzipFilter</filter-name>

    <url-pattern>/*.css</url-pattern>

  </filter-mapping>

  <filter-mapping>

    <filter-name>GzipFilter</filter-name>

    <url-pattern>/*.js</url-pattern>

  </filter-mapping>

  <filter-mapping>

    <filter-name>GzipFilter</filter-name>

    <url-pattern>/*.html</url-pattern>

  </filter-mapping>


    

本文出自 “德泽无忧” 博客,谢绝转载!

Web压缩过滤器

标签:压缩过滤器

原文地址:http://dezewuyou.blog.51cto.com/2628602/1829012

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!