CompressionServletResponseWrapper.java
上传用户:bj_pst
上传日期:2019-07-07
资源大小:7353k
文件大小:7k
源码类别:

Java编程

开发平台:

Java

  1. /*
  2. * Licensed to the Apache Software Foundation (ASF) under one or more
  3. * contributor license agreements.  See the NOTICE file distributed with
  4. * this work for additional information regarding copyright ownership.
  5. * The ASF licenses this file to You under the Apache License, Version 2.0
  6. * (the "License"); you may not use this file except in compliance with
  7. * the License.  You may obtain a copy of the License at
  8. *
  9. *     http://www.apache.org/licenses/LICENSE-2.0
  10. *
  11. * Unless required by applicable law or agreed to in writing, software
  12. * distributed under the License is distributed on an "AS IS" BASIS,
  13. * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  14. * See the License for the specific language governing permissions and
  15. * limitations under the License.
  16. */
  17. package compressionFilters;
  18. import java.io.IOException;
  19. import java.io.OutputStreamWriter;
  20. import java.io.PrintWriter;
  21. import javax.servlet.ServletOutputStream;
  22. import javax.servlet.http.HttpServletResponse;
  23. import javax.servlet.http.HttpServletResponseWrapper;
  24. /**
  25.  * Implementation of <b>HttpServletResponseWrapper</b> that works with
  26.  * the CompressionServletResponseStream implementation..
  27.  *
  28.  * @author Amy Roh
  29.  * @author Dmitri Valdin
  30.  * @version $Revision: 496190 $, $Date: 2007-01-14 16:21:45 -0700 (Sun, 14 Jan 2007) $
  31.  */
  32. public class CompressionServletResponseWrapper extends HttpServletResponseWrapper {
  33.     // ----------------------------------------------------- Constructor
  34.     /**
  35.      * Calls the parent constructor which creates a ServletResponse adaptor
  36.      * wrapping the given response object.
  37.      */
  38.     public CompressionServletResponseWrapper(HttpServletResponse response) {
  39.         super(response);
  40.         origResponse = response;
  41.         if (debug > 1) {
  42.             System.out.println("CompressionServletResponseWrapper constructor gets called");
  43.         }
  44.     }
  45.     // ----------------------------------------------------- Instance Variables
  46.     /**
  47.      * Original response
  48.      */
  49.     protected HttpServletResponse origResponse = null;
  50.     /**
  51.      * Descriptive information about this Response implementation.
  52.      */
  53.     protected static final String info = "CompressionServletResponseWrapper";
  54.     /**
  55.      * The ServletOutputStream that has been returned by
  56.      * <code>getOutputStream()</code>, if any.
  57.      */
  58.     protected ServletOutputStream stream = null;
  59.     /**
  60.      * The PrintWriter that has been returned by
  61.      * <code>getWriter()</code>, if any.
  62.      */
  63.     protected PrintWriter writer = null;
  64.     /**
  65.      * The threshold number to compress
  66.      */
  67.     protected int threshold = 0;
  68.     /**
  69.      * Debug level
  70.      */
  71.     private int debug = 0;
  72.     /**
  73.      * Content type
  74.      */
  75.     protected String contentType = null;
  76.     // --------------------------------------------------------- Public Methods
  77.     /**
  78.      * Set content type
  79.      */
  80.     public void setContentType(String contentType) {
  81.         if (debug > 1) {
  82.             System.out.println("setContentType to "+contentType);
  83.         }
  84.         this.contentType = contentType;
  85.         origResponse.setContentType(contentType);
  86.     }
  87.     /**
  88.      * Set threshold number
  89.      */
  90.     public void setCompressionThreshold(int threshold) {
  91.         if (debug > 1) {
  92.             System.out.println("setCompressionThreshold to " + threshold);
  93.         }
  94.         this.threshold = threshold;
  95.     }
  96.     /**
  97.      * Set debug level
  98.      */
  99.     public void setDebugLevel(int debug) {
  100.         this.debug = debug;
  101.     }
  102.     /**
  103.      * Create and return a ServletOutputStream to write the content
  104.      * associated with this Response.
  105.      *
  106.      * @exception IOException if an input/output error occurs
  107.      */
  108.     public ServletOutputStream createOutputStream() throws IOException {
  109.         if (debug > 1) {
  110.             System.out.println("createOutputStream gets called");
  111.         }
  112.         CompressionResponseStream stream = new CompressionResponseStream(origResponse);
  113.         stream.setDebugLevel(debug);
  114.         stream.setBuffer(threshold);
  115.         return stream;
  116.     }
  117.     /**
  118.      * Finish a response.
  119.      */
  120.     public void finishResponse() {
  121.         try {
  122.             if (writer != null) {
  123.                 writer.close();
  124.             } else {
  125.                 if (stream != null)
  126.                     stream.close();
  127.             }
  128.         } catch (IOException e) {
  129.         }
  130.     }
  131.     // ------------------------------------------------ ServletResponse Methods
  132.     /**
  133.      * Flush the buffer and commit this response.
  134.      *
  135.      * @exception IOException if an input/output error occurs
  136.      */
  137.     public void flushBuffer() throws IOException {
  138.         if (debug > 1) {
  139.             System.out.println("flush buffer @ CompressionServletResponseWrapper");
  140.         }
  141.         ((CompressionResponseStream)stream).flush();
  142.     }
  143.     /**
  144.      * Return the servlet output stream associated with this Response.
  145.      *
  146.      * @exception IllegalStateException if <code>getWriter</code> has
  147.      *  already been called for this response
  148.      * @exception IOException if an input/output error occurs
  149.      */
  150.     public ServletOutputStream getOutputStream() throws IOException {
  151.         if (writer != null)
  152.             throw new IllegalStateException("getWriter() has already been called for this response");
  153.         if (stream == null)
  154.             stream = createOutputStream();
  155.         if (debug > 1) {
  156.             System.out.println("stream is set to "+stream+" in getOutputStream");
  157.         }
  158.         return (stream);
  159.     }
  160.     /**
  161.      * Return the writer associated with this Response.
  162.      *
  163.      * @exception IllegalStateException if <code>getOutputStream</code> has
  164.      *  already been called for this response
  165.      * @exception IOException if an input/output error occurs
  166.      */
  167.     public PrintWriter getWriter() throws IOException {
  168.         if (writer != null)
  169.             return (writer);
  170.         if (stream != null)
  171.             throw new IllegalStateException("getOutputStream() has already been called for this response");
  172.         stream = createOutputStream();
  173.         if (debug > 1) {
  174.             System.out.println("stream is set to "+stream+" in getWriter");
  175.         }
  176.         //String charset = getCharsetFromContentType(contentType);
  177.         String charEnc = origResponse.getCharacterEncoding();
  178.         if (debug > 1) {
  179.             System.out.println("character encoding is " + charEnc);
  180.         }
  181.         // HttpServletResponse.getCharacterEncoding() shouldn't return null
  182.         // according the spec, so feel free to remove that "if"
  183.         if (charEnc != null) {
  184.             writer = new PrintWriter(new OutputStreamWriter(stream, charEnc));
  185.         } else {
  186.             writer = new PrintWriter(stream);
  187.         }
  188.         
  189.         return (writer);
  190.     }
  191.     public void setContentLength(int length) {
  192.     }
  193. }