2014-02-10 40 views
0

我使用struts應用程序的網絡連接來連接網絡資源,並直接將文件下載到瀏覽器而不將它存儲在運行服務器的struts上(需要避免污染運行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"); 
     } 
    } 
} 

相反,我以前相信這其實只運行(流下載)。事實證明,我很快就發佈了連接方式,所以我在日誌中發現了一個令人困惑的錯誤,我認爲這是因爲攔截器運行得太快。我錯了。

我希望這可能有一天會幫助別人。