tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jacob Kjome <h...@visi.com>
Subject RE: GZIP filter problem....
Date Tue, 07 Jan 2003 14:18:52 GMT

Hi Charlie,

I looked at it a little bit, but, to be honest, that one is less 
straightforward (kind of messy, actually) and I'm not even sure it is doing 
any compression as it doesn't provide any logging stating the difference 
between the original size of the response and the compressed size (although 
it logs lots of other stuff).  I'll continue to investigate, however, I 
guess my point is that I've seen a good number of examples of how to do the 
GZIP compression and the example I am following pretty much does exactly 
what all of them recommend.  There is one from "More Servlets and Java 
Server Pages" by Marty Hall that also doesn't work under Tomcat-4.1.18
( 
http://archive.moreservlets.com/Filter-Code/filters/WEB-INF/classes/moreservlets/filters/CompressionFilter.java

).  I have a really hard time believing that all these people are just 
plain wrong about how they did this.  The code looks valid based on all 
examples I've seen, and I've proven that the GZIP compression was done 
properly because I was able to decompress and print that to logging.  I 
just can't get it to the browsers (IE5.5/6.0 and Mozilla) to understand the 
output.

So, apart from looking at the example in Tomcat which, presumably, works 
(and I will continue to study it),  is there anything in my code that is 
just obviously incorrect?  If not, why doesn't it work?

Jake

At 07:03 AM 1/7/2003 -0500, you wrote:
>did you look at CompressionFilter.java that is part of the examples
>distributed with Tomcat?
>
>Charlie
>
> > -----Original Message-----
> > From: Jacob Kjome [mailto:hoju@visi.com]
> > Sent: Monday, January 06, 2003 8:22 PM
> > To: Tomcat Users List
> > Subject: GZIP filter problem....
> >
> >
> >
> > I'm trying to use a GZIP servlet filter under Tomcat-4.1.18.
> > I am basing this filter on
> > an existing example at Orion (
> > http://www.orionserver.com/tutorials/filters/5.html )
> >
> > It GZIPs fine and, in my debugging, I can decompress the data back to
> > what it was originally (more on that below).  The problem
> > is, all I get when I send the data out to the browser is
> > non-decompressed garbled data.  That is, the browser doesn't
> > seem to understand that it is
> > gzip'ed stream and doesn't decode it.  Here is the relevant
> > code.  Can anyone see what the
> > problem might be?  Note that in the no compression case where
> > I simply call
> > dofilter(res, wrapper.getData()) it works just fine, so it isn't a
> > problem with the filter in general....
> >
> >
> > ...
> > ...
> > ...
> > httpResponse.setHeader("Vary", "Accept-Encoding");
> > OutputStream out = response.getOutputStream();
> > httpResponse.setHeader("Content-Encoding", "gzip");
> > ByteArrayOutputStream compressed = new ByteArrayOutputStream();
> > GZIPOutputStream gzout = new GZIPOutputStream(compressed);
> > gzout.write(wrapper.getData());
> > gzout.finish();
> > gzout.close();
> >
> > if (logger.isDebugEnabled()) {
> >     logger.debug("compressed data...");
> >     logger.debug(compressed);
> >
> >     ByteArrayInputStream bais = new
> > ByteArrayInputStream(compressed.toByteArray());
> >     GZIPInputStream gzin = new GZIPInputStream(bais);
> >     byte[] buffer = new byte[1024];
> >     int n, i = 0, m = buffer.length;
> >     while ((n = gzin.read (buffer, i, m - i)) >= 0) {
> >         i += n;
> >         if (i >= m) {
> >             byte[] newBuffer = new byte[m *= 2];
> >             System.arraycopy (buffer, 0, newBuffer, 0, i);
> >             buffer = newBuffer;
> >         }
> >     }
> >     byte[] result = new byte[i];
> >     System.arraycopy (buffer, 0, result, 0, i);
> >     ByteArrayOutputStream decompressed = new ByteArrayOutputStream();
> >     DataOutputStream daos = new DataOutputStream(decompressed);
> >     daos.write(result);
> >     daos.flush();
> >     daos.close();
> >     logger.debug("decompressed data...");
> >     logger.debug(decompressed);
> > }
> >
> > out.write(compressed.toByteArray());
> > response.setContentLength(compressed.size());
> > if (logger.isDebugEnabled()) logger.debug("Wrote filter
> > compressed data: "+compressed.size()+" bytes");
> > out.flush();
> > response.flushBuffer();
> > out.close();
> > ...
> > ...
> > ...
> >
> >
> > Here is an example of the debugging output so you can see that I can
> > compress and decompress the data without issue...
> >
> > compressed data...
> > <       ³±¯ÈÍQ(K-*ÎÌϳU2Ô3P²·ã²qÉÏMÌÌ+¶f2òsSm*'ós
> > ó**ôÑÄ
> > Ró
> > rRAÂú0? ºÓ'sX
> > decompressed data...
> > <?xml version="1.0"?>
> > <Root><MyElement name="someName"/><MyElement
> > name="someOtherName"/></Root>
> >
> > Note that the contentType was set by the servlet as "text/xml" and was
> > not reset by the filter.
> >
> > Any ideas?  It wouldn't be a bug in Tomcat, would it?  I just don't
> > see anything wrong with the code???
> >
> >
> > Thanks,
> >
> > Jake
> >
> >
> > --
> > Best regards,
> >  Jacob                          mailto:hoju@visi.com
> >
> >
> > --
> > To unsubscribe, e-mail:
><mailto:tomcat-user-unsubscribe@jakarta.apache.org>
>For additional commands, e-mail:
><mailto:tomcat-user-help@jakarta.apache.org>
>
>--
>To unsubscribe, e-mail:   <mailto:tomcat-user-unsubscribe@jakarta.apache.org>
>For additional commands, e-mail: <mailto:tomcat-user-help@jakarta.apache.org>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message