compression servlet
-
derek hayes
hi jason, i found your site as i was looking for a sample implementation of doing stream compression using java filters. i was unable to get the code working though, and will post the trace folllowing this message, in hopes you'll have some input. i'm running this on BEA WLS8.1, and did not rebuild your dist jar (maybe that would be a logical place to start). here's the trace:
java.lang.NullPointerException
at com.netspade.servlet.compress.CompressedStream.write(CompressedStream.java:104)
at com.netspade.servlet.compress.CompressedStream.write(CompressedStream.java:96)
at java.util.zip.GZIPOutputStream.writeHeader(GZIPOutputStream.java:123)
at java.util.zip.GZIPOutputStream.<init>(GZIPOutputStream.java:48)
at java.util.zip.GZIPOutputStream.<init>(GZIPOutputStream.java:58)
at com.netspade.servlet.compress.CompressedStream.<init>(CompressedStream.java:38)
at com.netspade.servlet.compress.CompressionResponse.<init>(CompressionResponse.java:37)
at com.netspade.servlet.compress.CompressionFilter.doFilter(CompressionFilter.java:56)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at weblogic.servlet.internal.RequestDispatcherImpl.include(RequestDispatcherImpl.java:597)
at weblogic.servlet.internal.RequestDispatcherImpl.include(RequestDispatcherImpl.java:409)
at weblogic.servlet.jsp.PageContextImpl.include(PageContextImpl.java:155)
at weblogic.servlet.jsp.PageContextImpl.handlePageException(PageContextImpl.java:309)
at jsp_servlet.__pgicdetail._jspService(__pgicdetail.java:881)
at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
at weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1053)
at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:387)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at com.netspade.servlet.compress.CompressionFilter.doFilter(CompressionFilter.java:58)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6316)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:317)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:118)
at weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3622)
at weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2569)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:197)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:170)
>Posted: 2004-10-20 00:33:02.692259 #
-
jason
Hi there,
I fixed the problem after a lot of debugging. If you're interested, the problem was that <jsp:forward> caused the ServletResponse buffer to be reset, but this reset the GZIP header as well. So when the compressed output was written, most browsers didn't recognise it as GZIP and so just displayed a blank screen. Simple to fix by making a new GZIP stream whenever the response buffer is reset.
So, download the latest version from http://www.netspade.com/software/java/compression-filter/ and report any more bugs if you find any!
Cheers,
JasonPosted: 2004-10-20 23:13:04.860372 #
-
derek hayes
thanks jason, that fixed everything right up. nice code; very clean.
Posted: 2004-10-21 00:35:15.416005 #