try setting the encoding before you request the output stream. You may be
losing the header by requesting the output stream first.
httpResponse.setHeader("Content-Encoding", "gzip");
OutputStream out = response.getOutputStream();
I know you can't set headers after writing to the output stream, but I'm not
sure if you can after getting a reference to the outputstream. IIRC, the
getOutputStream() determines whether you have written anything or not(i.e.
try getWriter() immediately after getOutputStream() and it will throw an
error)
Charlie
> -----Original Message-----
> From: Jacob Kjome [mailto:[EMAIL PROTECTED]]
> Sent: Tuesday, January 07, 2003 9:19 AM
> To: Tomcat Users List
> Subject: RE: GZIP filter problem....
>
>
>
> 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/cl
asses/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]>
--
To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>