我在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
您无法解决。当服务器仍在处理HTTP请求/响应时,您无法控制客户端是按Esc键,还是匆匆单击其他链接,或关闭浏览器,或使其机器崩溃等。
您可以通过执行以下操作的全局过滤器(映射到/*)来“隐藏”它:
/*
try { chain.doFilter(request, response); } catch (ClientAbortException e) { // Ignore. }
但是,这在代码中带来了特定于servletcontainer的依赖性。有问题的过滤器将导致NoClassDefFoundError一个不使用特定于Tomcat的不同品牌的servlet容器ClientAbortException。您可能要改为检查类的简单名称。利用它的子类优势IOException:
NoClassDefFoundError
ClientAbortException
IOException
try { chain.doFilter(request, response); } catch (IOException e) { if (!e.getClass().getSimpleName().equals("ClientAbortException")) { throw e; } }