Reputation: 3341
I'm building a web application which is supposed to measure httprequests/response times as well as response size. for this task I used: http://angelborroy.wordpress.com/2009/03/04/dump-request-and-response-using-javaxservletfilter/ filter, which does everything I need only it dumps requests/response data instead of print the response size. It works just fine with Servlets, but there just seems to be a problem with JSPs... when I'm trying to load up a JSP in the browser, it displays a blank page, and the filter echos that the response size is 0.
Again, it works flawlessly when the requested page is a servlet... any idea what can cause this issue?
UPDATE: I've been trying to find any filter which wraps a servlet response and then able to forward the response back to the client (even as is!) but without any luck, if anyone can point me out to a working example, it doesn't matter what the wrapper does, just a simple wrapper which does something on the response content and forwards it back to the client after the change, i'll more than grateful.
P.S
I'm using Apache Tomcat 7
Upvotes: 2
Views: 1604
Reputation: 28885
Flush the writer and the stream after doFilter()
:
filterChain.doFilter(req, wrappedResp);
pw.getWriter().flush();
pw.getStream().flush();
Please note that the linked codes does not throw IllegalStateException
when:
getOutputStream()
and the getWriter
method has been called on this response or
getWriter()
and the getOutputStream
method has already been called for this response object.Check the source code of javamelody too. Their codes looks more robust.
The PrintWriter uses an inner BufferedReader and it needs a flush. It was just a quick solution so maybe the getStream().flush()
isn't really required. Please notice that I called pw.get*().flush()
, not response.get*().flush()
. But it's still just a quick answer for the specific problem when JSPs are not showed. If you need a production grade solution check the source of javamelody. They probably handle a lot more corner cases (like the mentioned IllegalStateException
) than the referred article.
I would start with the source of javamelody and I'd cut out the unnecessary features.
Upvotes: 3