Если юзер нажал Cancel download

Written by elwood

В сервлете будет выброшено исключение org.apache.catalina.connector.ClientAbortException (при вызове ServletOutputStream.write(); )
Чтобы в лог не капали мусорные сообщения об этих исключениях:

} catch (org.apache.catalina.connector.ClientAbortException e) {
    // do nothing - client has cancelled the download
}

Либа, содержащая класс ClientAbortException – либо томкатовская catalina, либо джейбоссовский jbossweb.jar (в который эмбеддится каталина).
Судя по факу http://www.jboss.org/jbossweb/faq.html, в jbossweb используется tomcat версии 6.0.13+
Так как нам в этом случае совпадение версий некритично, мы можем использовать 6.0.13 (или jbossweb.jar в качестве compile-time-lib, если используется ant).

Мейвеновские координаты каталины:

<!-- JBoss Web is based on Tomcat 6.0.13 -->
<!-- this dependency is only to catch org.apache.catalina.connector.ClientAbortException in file download servlets -->
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>catalina</artifactId>
    <version>6.0.13</version>
    <scope>provided</scope>
</dependency>
  • chapaj

    Чел, мысли более динамично: зачем делать зависимость от веб-контейнера, когда можно просто:

    boolean isClientAbortException(Exception e) {
    return e.getClass().getName().contains(“ClientAbortException”);
    }

    и
    try{

    } catch(Exception e){
    if(! isClientAbortException(e)){
    //логи, паника..
    }
    }

  • elwood

    Прав же ! Спасибо 🙂

  • zero

    Зависимости от веб-контейнера будут всегда, намного удобнее проверять принадлежность класса исключения, чем использовать средства HCI.