对于在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之前关闭了套接字。
请提出解决方案的建议,或至少隐藏该异常的方法。

谢谢
希玛

最佳答案

您无法解决。当服务器仍在处理HTTP请求/响应时,您无法控制客户端是按Esc键,还是匆匆单击其他链接,或关闭浏览器,或使其机器崩溃等。

您可以通过执行以下操作的全局过滤器(映射到/*)来“隐藏”它:

try {
    chain.doFilter(request, response);
}
catch (ClientAbortException e) {
    // Ignore.
}

但是,这在代码中带来了特定于servletcontainer的依赖性。有问题的过滤器将导致在不使用Tomcat特定NoClassDefFoundError的其他品牌的servlet容器上生成ClientAbortException。您可能要改为检查类的简单名称。利用它是IOException的子类的优点:
try {
    chain.doFilter(request, response);
}
catch (IOException e) {
    if (!e.getClass().getSimpleName().equals("ClientAbortException")) {
        throw e;
    }
}

10-07 16:16