Tomcat5.5使用gzip压缩(HTTP压缩)功能配置如下:

本文介绍如何通过配置文件启用HTTP响应的压缩功能,详细解释了压缩配置参数的意义,并提供了一个使用Java Servlet过滤器实现压缩功能的具体示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1    <Connector port="80" maxHttpHeaderSize="8192"
 2               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
 3               enableLookups="false" redirectPort="8443" acceptCount="100"
 4               connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf-8"
 5                  compression="on" 
 6               compressionMinSize="2048" 
 7               noCompressionUserAgents="gozilla, traviata" 
 8               compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"  />
 9    <!-- Note : To disable connection timeouts, set connectionTimeout value
10     to 0 -->
11    
12    <!-- Note : To use gzip compression you could set the following properties :
13    
14               compression="on" 
15               compressionMinSize="2048" 
16               noCompressionUserAgents="gozilla, traviata" 
17               compressableMimeType="text/html,text/xml"
18    -->

其中

1) compression="on" 打开压缩功能
2) compressionMinSize="2048" 启用压缩的输出内容大小,这里面默认为2KB
3) noCompressionUserAgents="gozilla, traviata" 对于以下的浏览器,不启用压缩 
4) compressableMimeType="text/html,text/xml" 压缩类型
 

使用过滤器的方法如下:

package com.jsptw.filter;
import java.io.*;
import java.util.zip.GZIPOutputStream;
import javax.servlet.*;
import javax.servlet.http.*;
public class GZIPEncodeFilter implements Filter {
      public void init(FilterConfig filterConfig) {}
      public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain)
                                      throws IOException, ServletException {        
        String transferEncoding = getGZIPEncoding((HttpServletRequest)request);        
        if (transferEncoding == null) 
        {            
          chain.doFilter(request, response);        
        } 
        else
        {          
          ((HttpServletResponse)response).setHeader("Content-Encoding", transferEncoding);
            GZIPEncodableResponse wrappedResponse = new GZIPEncodableResponse((HttpServletResponse)response);
            chain.doFilter(request, wrappedResponse);          
            wrappedResponse.flush();        
        }    
      }    
      public void destroy() {}    
      private static String getGZIPEncoding(HttpServletRequest request) {        
        String acceptEncoding = request.getHeader("Accept-Encoding");        
          if (acceptEncoding == null)
            return null;        
          acceptEncoding = acceptEncoding.toLowerCase();        
          if (acceptEncoding.indexOf("x-gzip") >= 0) 
          {
            return "x-gzip";
          }        
          if (acceptEncoding.indexOf("gzip") >= 0) 
          {            
            return "gzip";        
          }        
          return null;    
      }    
      
      private class GZIPEncodableResponse extends HttpServletResponseWrapper {        
        private GZIPServletStream wrappedOut;        
          public GZIPEncodableResponse(HttpServletResponse response) throws IOException {           
            super(response);            
              wrappedOut = new GZIPServletStream(response.getOutputStream());        
          }        
          public ServletOutputStream getOutputStream() throws IOException {            
            return wrappedOut;        
          }        
          private PrintWriter wrappedWriter;        
          public PrintWriter getWriter() throws IOException {            
            if (wrappedWriter == null) {                
                wrappedWriter = new PrintWriter( new OutputStreamWriter( getOutputStream(), getCharacterEncoding()));            }            
                 return wrappedWriter;        
              }        
          public void flush() throws IOException {            
            if (wrappedWriter != null) {               
                wrappedWriter.flush();            
              }           
              wrappedOut.finish();        
          }    
      }    
      
      private class GZIPServletStream extends ServletOutputStream {        
        private GZIPOutputStream outputStream;        
          public GZIPServletStream(OutputStream source) throws IOException {            
         outputStream = new GZIPOutputStream(source);        
       }        
       public void finish() throws IOException {
         OutputStream.finish();        
       }        
      public void write(byte[] buf) throws IOException {            
        outputStream.write(buf);        
      }        
      public void write(byte[] buf, int off, int len) throws IOException {            
        outputStream.write(buf, off, len);        
      }        
      public void write(int c) throws IOException {            
        outputStream.write(c);        
      }        
      public void flush() throws IOException {            
        outputStream.flush();        
      }       
      public void close() throws IOException {            
        outputStream.close();         
      }    
    }
}
package com.jsptw.filter;
import java.io.*;
import java.util.zip.GZIPOutputStream;
import javax.servlet.*;
import javax.servlet.http.*;
public class GZIPEncodeFilter implements Filter {
      public void init(FilterConfig filterConfig) {}
      public void doFilter( ServletRequest request, ServletResponse response, FilterChain chain)
                                      throws IOException, ServletException {        
        String transferEncoding = getGZIPEncoding((HttpServletRequest)request);        
        if (transferEncoding == null) 
        {            
          chain.doFilter(request, response);        
        } 
        else
        {          
          ((HttpServletResponse)response).setHeader("Content-Encoding", transferEncoding);
            GZIPEncodableResponse wrappedResponse = new GZIPEncodableResponse((HttpServletResponse)response);
            chain.doFilter(request, wrappedResponse);          
            wrappedResponse.flush();        
        }    
      }    
      public void destroy() {}    
      private static String getGZIPEncoding(HttpServletRequest request) {        
        String acceptEncoding = request.getHeader("Accept-Encoding");        
          if (acceptEncoding == null)
            return null;        
          acceptEncoding = acceptEncoding.toLowerCase();        
          if (acceptEncoding.indexOf("x-gzip") >= 0) 
          {
            return "x-gzip";
          }        
          if (acceptEncoding.indexOf("gzip") >= 0) 
          {            
            return "gzip";        
          }        
          return null;    
      }    
      
      private class GZIPEncodableResponse extends HttpServletResponseWrapper {        
        private GZIPServletStream wrappedOut;        
          public GZIPEncodableResponse(HttpServletResponse response) throws IOException {           
            super(response);            
              wrappedOut = new GZIPServletStream(response.getOutputStream());        
          }        
          public ServletOutputStream getOutputStream() throws IOException {            
            return wrappedOut;        
          }        
          private PrintWriter wrappedWriter;        
          public PrintWriter getWriter() throws IOException {            
            if (wrappedWriter == null) {                
                wrappedWriter = new PrintWriter( new OutputStreamWriter( getOutputStream(), getCharacterEncoding()));            }            
                 return wrappedWriter;        
              }        
          public void flush() throws IOException {            
            if (wrappedWriter != null) {               
                wrappedWriter.flush();            
              }           
              wrappedOut.finish();        
          }    
      }    
      
      private class GZIPServletStream extends ServletOutputStream {        
        private GZIPOutputStream outputStream;        
          public GZIPServletStream(OutputStream source) throws IOException {            
         outputStream = new GZIPOutputStream(source);        
       }        
       public void finish() throws IOException {
         OutputStream.finish();        
       }        
      public void write(byte[] buf) throws IOException {            
        outputStream.write(buf);        
      }        
      public void write(byte[] buf, int off, int len) throws IOException {            
        outputStream.write(buf, off, len);        
      }        
      public void write(int c) throws IOException {            
        outputStream.write(c);        
      }        
      public void flush() throws IOException {            
        outputStream.flush();        
      }       
      public void close() throws IOException {            
        outputStream.close();         
      }    
    }
}
web.xml中的设定为:
 
<filter>        
<filter-name>GZIPEncoder</filter-name>        
<filter-class>com.jsptw.filter.GZIPEncodeFilter</filter-class>
</filter>
<filter-mapping>  
<filter-name> GZIPEncoder</filter-name>  
<url-pattern>/*</url-pattern>
</filter-mapping>  

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值