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
Flush the writer and the stream after
doFilter():Please note that the linked codes does not throw
IllegalStateExceptionwhen:getOutputStream()and thegetWritermethod has been called on this responseor
getWriter()and thegetOutputStreammethod 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 calledpw.get*().flush(), notresponse.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 mentionedIllegalStateException) than the referred article.I would start with the source of javamelody and I’d cut out the unnecessary features.