views:

199

answers:

3

I'm getting the following error:

javax.servlet.jsp.JspException: Broken pipe

Now I have seen questions/answers with respects to the socket exception, but this error is coming from a different package. Any help is greatly appreciated.
BTW, I am seeing quite a lot of these errors in a struts web app Weblogic Node logs and I am thinking that it has to do with end users closing their web browser before the page reloads/executes the next step (database transaction which takes quite a bit of time to execute, anywhere from 30 seconds to 4 mins).

A: 

I am sure the underlying package uses pipes internally to transfer the result from a to b. Now B (the ServletOutputStream) closes, and the other end of the pipe notifies this by throwing this exception.

Daniel
+1  A: 

I am thinking that it has to do with end users closing their web browser before the page reloads/executes the next step

You are entirely correct. This exception will be thrown when the client aborts the current request by navigating away, closing the tab/window, refreshing the request, etc while the request is still running. In other words, the client abruptly closed the connection and the server side can't write/flush any byte to it anymore. It has normally an IOException as the root cause, usually in flavor of a servletcontainer specific subclass like ClientAbortException in case of Tomcat and clones. If you investigate the entire stacktrace in the server logs, you'll find it somewhere at the bottom.

BalusC
Thanks BalusC for the explanation.
Ruepen
You're welcome.
BalusC
A: 

The HTTPRequest is handled by a chain of servlets which are connected to each other using pipes. When the browser abandons the connection and the socket gets closed, that is being caught by the servlet chaining managment layer. The servlet probably is indirectly catching the socket closed exception and is thowing it as the broken pipe. Look at any wrapped exception for more details.

Kelly French