首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何只处理ClientAbortException?

如何只处理ClientAbortException?
EN

Stack Overflow用户
提问于 2018-08-24 03:27:48
回答 3查看 2.2K关注 0票数 1

我正在编写一个下载文件控制器

有时,用户会在文件完全写入之前关闭浏览器窗口。-这很酷。

问题是我的日志中充满了这个错误:

org.apache.catalina.connector.ClientAbortException:

java.io.IOException:已建立的连接已被位于org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:333) at org.apache.catalina.connector.OutputBuffer.flushByteBuffer(OutputBuffer.java:758) at org.apache.catalina.connector.OutputBuffer.append(OutputBuffer.java:663) at org.apache.catalina.connector的主机软件中止。OutputBuffer.writeBytes(OutputBuffer.java:368)在org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:346)在org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:96)在org.apache.commons.io.IOUtils.copyLarge(IOUtils.java:2147)在org.apache.commons.io.IOUtils.copy(IOUtils.java:2102)在org.apacheorg.apache.commons.io.IOUtils.copy(IOUtils.java:2078)上的.commons.io.IOUtils.copyLarge(IOUtils.java:2123)

当我试图捕捉这个特定的错误时,eclipse说:

无法将

ClientAbortException解析为类型

我已经正确设置并运行了项目,所以是否可以仅捕获此特定异常:

代码语言:javascript
复制
   org.apache.catalina.connector.ClientAbortException

我想保留IOException以防发生另一场灾难。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-08-24 04:44:04

ClientAbortException是从IOException派生的。您必须检查到底是什么异常导致了IOException e

代码语言:javascript
复制
...
} catch (FileNotFoundException fnfe) {
    // ... handle FileNotFoundException
} catch (IOException e) {
    String exceptionSimpleName = e.getCause().getClass().getSimpleName();
    if ("ClientAbortException".equals(exceptionSimpleName)) {
        // ... handle ClientAbortException
    } else {
        // ... handle general IOException or another cause
    }
}
return null;
票数 3
EN

Stack Overflow用户

发布于 2019-06-07 14:46:06

我通常在写时处理IOExceptions,而不是在读时处理IOExceptions,而不是寻找特定的类名(它将您的应用程序绑定到特定的servlet容器),如下所示(非常伪代码):

代码语言:javascript
复制
try {
  byte[] buffer = ...
  in.read(buffer);
  try {
    out.write(buffer);
  } catch (IOException writeException) {
    // client aborted request
  }
} catch (IOException readException) {
  // something went wrong -> signal 50x or something else
}

到目前为止一切都很顺利。

票数 1
EN

Stack Overflow用户

发布于 2021-05-23 01:58:03

(截至@Nikolas Charalambidis答案)

  • 忽略"org.apache.catalina.connector.ClientAbortException:java.io.IOException: Connection reset by peer"

e.getCause().getClass().getSimpleName() == "IOException"

e.getMessage() == "java.io.IOException:对等设备重置连接“

  • 和不处理一般的IOException和其他原因

... } catch (IOException e) { if (!E.getMessage().contains(“对等重置连接”){抛出e;}}最后{关闭(输出);关闭(输入);} ...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51993008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档