使用IE8浏览器部署在jboss上的应用程序的ClientAbortException

时间:2012-03-20 14:38:31

标签: java jsp java-ee jboss

我在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

1 个答案:

答案 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;
    }
}