2014-02-10 3 views
0

Я использую сетевое подключение из приложения расположений для подключения к сетевому ресурсу и загружаю файл непосредственно в браузер, не сохраняя его на запущенных серверах (необходимо избегать загрязнения сервера struts транспортом файлы). Я использую поток типа результата, чтобы фактически загрузить входной поток от сетевого ресурса непосредственно в браузер пользователя, и входной поток автоматически закрыт, но сетевое соединение, которое несет поток, никогда не возвращается (есть пул подключений, так как я использую httpclient для сети подключение).struts 2 Закрытие сетевых соединений после результата

есть ли какой-либо способ увидеть, как реально получить код, вызванный после того, как результат (потока типов) закончен (файл загружен в браузер)?

ответ

0

На самом деле это действительно решается перехватчика: я написал следующее перехватчика из действий:

public String intercept(ActionInvocation invocation) throws Exception { 
    try { 
     return invocation.invoke(); 
    } finally { 
     DownloadAction da = (DownloadAction) invocation.getAction(); 
     if (null != da && null != da.getResponse()) { 
      logger.debug("@@@@@@ connection releasing"); 
      da.getResponse().releaseConnection(); 
     }else{ 
      logger.error("@@@@@@ connection cannot be released"); 
     } 
    } 
} 

В отличие от моей предыдущей веры это на самом деле работает только после того, как все результаты выполняются (поток скачано). Оказывается, я скоро выслал связь, так что у меня возникла путаная ошибка в журналах, которые, как я думал, это потому, что перехватчик работает слишком быстро. Я был неправ.

Я надеюсь, что однажды это поможет кому-то другому.

Смежные вопросы