title: Compress dynamic content to ServletOutputStream
body: <p>I want to compress the dynamic created content and write to ServletOutputStream directly, without saving it as a file on the server before compressing.</p>
  
  <p>For example, I created an Excel Workbook and a StringBuffer that includes strings with the SQL template.  I don't want to save the dynamic content to .xlsx and .sql file on the server before zipping the files and writing to ServletOutputStream for downloading.</p>
  
  <p>Sample Code:</p>
  
  <pre><code>ServletOutputStream out = response.getOutputStream();
  workbook.write(byteArrayOutputStream);    
  zipIt(byteArrayOutputStream,out);
  
  public static boolean zipIt(ByteArrayOutputStream input, ServletOutputStream output) {
          try {
              ZipOutputStream zos = new ZipOutputStream(new BufferedOutputStream(output));
              ZipEntry zipEntry = new ZipEntry("test.xlsx");
              zos.putNextEntry(zipEntry);
              if (input != null) {
                  zipEntry.setSize(input.size());
                  zos.write(input.toByteArray());
                  zos.closeEntry();
              }
          } catch (IOException e) {
              logger.error("error {}", e);
              return false;
          }
          return true;
      }
  </code></pre>