我使用来自struts应用程序的网络连接来连接到网络资源并直接将文件下载到浏览器而不将其存储在运行服务器的struts上(需要避免使用传输的文件污染struts服务器)。我使用结果类型流实际将输入流从网络资源直接下载到用户的浏览器,输入流自动关闭,但是从不返回携带流的网络连接(我使用的是连接池) httpclient用于网络连接)。
有没有人能看到在结果(类型流)结束后(文件已经下载到浏览器中)实际获得代码?
答案 0 :(得分:0)
事实上,拦截器确实解决了这个问题: 我在Action的拦截器中写了以下内容:
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");
}
}
}
与我之前的看法相反,这实际上只在所有结果执行后才会运行(流下载)。事实证明我一直在发布连接方式,因此我在日志中遇到了一个令人困惑的错误,我认为这是因为拦截器运行得太快了。我错了。
我希望有一天可能会帮助其他人。