我在Jboss部署的应用程序有以下异常,浏览器是IE8
2012-03-19 09:17:12,014 WARN [org.apache.catalina.core.ContainerBase.jboss.web]. [localhost]] Exception Processing ErrorPage[errorCode=404, location=/internalError.jsp]
ClientAbortException: java.net.SocketException: Broken pipe
at org.apache.catalina.connector.OutputBuffer.doFlush(OutputBuffer.java:327)
似乎浏览器在服务器将internalError.jsp写入之前关闭了套接字。 请建议如何解决它,或至少我如何隐藏此异常。
由于 Hikumar
答案 0 :(得分:18)
你无法解决它。在服务器仍在处理HTTP请求/响应时,您无法控制客户端是按Esc,还是仓促单击其他链接,或关闭浏览器,或让其计算机崩溃等等。
您可以通过全局过滤器(映射到/*
)“隐藏”它,它可以执行以下操作:
try {
chain.doFilter(request, response);
}
catch (ClientAbortException e) {
// Ignore.
}
然而,这会在代码中带来servletcontainer-specfic依赖项。有问题的过滤器会在不同make的servlet容器上生成NoClassDefFoundError
,而不使用特定于Tomcat的ClientAbortException
。您可能希望检查类简单名称。利用它是IOException
:
try {
chain.doFilter(request, response);
}
catch (IOException e) {
if (!e.getClass().getSimpleName().equals("ClientAbortException")) {
throw e;
}
}