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:[EMAIL PROTECTED]]
> 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:[EMAIL PROTECTED]
>
>
> --
> To unsubscribe, e-mail:
<mailto:[EMAIL PROTECTED]>
For additional commands, e-mail:
<mailto:[EMAIL PROTECTED]>

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to