小编典典

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

jsp

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


阅读 294

收藏
2020-06-08

共1个答案

小编典典

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

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

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

但是,这在代码中带来了特定于servletcontainer的依赖性。有问题的过滤器将导致NoClassDefFoundError一个不使用特定于Tomcat的不同品牌的servlet容器ClientAbortException。您可能要改为检查类的简单名称。利用它的子类优势IOException

try {
    chain.doFilter(request, response);
}
catch (IOException e) {
    if (!e.getClass().getSimpleName().equals("ClientAbortException")) {
        throw e;
    }
}
2020-06-08