tomcat-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Cox, Charlie" <c...@cincom.com>
Subject RE: GZIP filter problem....
Date Tue, 07 Jan 2003 19:00:37 GMT
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:hoju@visi.com]
> 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: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>

--
To unsubscribe, e-mail:   <mailto:tomcat-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:tomcat-user-help@jakarta.apache.org>


Mime
View raw message