java - 如何在 Apache HttpRequestHandler 中连接完成时执行代码

标签 java apache http

我正在使用 Apache 的 HttpRequestHandler 向 HTTP 客户端提供数据。我正在按需为客户生成内容(可能是一个成本高昂的过程)。

我想处理两种情况:

  • 正常消费,结束了,我要关闭资源
  • 客户端过早关闭连接,我不想继续处理事情

我正在使用一个InputStream(和一个InputStreamEntity)来执行该过程,但我想知道客户端是否提前(或不)关闭资源并在这两种情况下在最后采取操作。

我意识到InputStreamEntity.writeTo(这是用于将内容发送到客户端的方法)不会关闭我声明的输入流。

我错过了什么?

最佳答案

我通过子类化 InputStreamEntity 并在原始行为后使 writeTo 调用关闭来解决了这个问题:

public class ClosingInputStreamEntity extends InputStreamEntity {
  @Override
  public void writeTo(OutputStream os) {
    try {
      super.writeTo(OutputStream os);
    } finally {
      // close resources
    }
  }
}

关于java - 如何在 Apache HttpRequestHandler 中连接完成时执行代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20693862/

相关文章:

apache - 仅在用户可以通过 Gitolite 访问的 gitweb 中显示 repos

java - 如何重用 HttpUrlConnection?

java - 如何使卡片 View 的移动更加流畅?

php - 使用 fastcgi 在 Apache 上配置两个虚拟主机

javascript - 处理图片较多的网页

javascript - NodeJS HttpGet 方法在 Wiki 上不起作用

python - 如何在 Python 中发送 HTTP Get Web 请求?

java - 基于spring.profiles.active动态编译依赖

java - jsp 文件中的 JSON 只接受来 self 的 MVC Controller 的 null 返回值。

php - 为什么 apache2 服务器最多需要 1.5 小时才能写入 6 mb .sql 文件