如何在从Java servlet下载期间判断用户是否取消?

时间:2010-09-09 18:01:59

标签: java servlets download request-cancelling

如何判断用户在从Java servlet下载时是否取消了取消? IE似乎发生了什么,输出流println()阻塞。用过的命中取消了,但有没有办法计算出这个或类似的东西?

2 个答案:

答案 0 :(得分:4)

OutputStream#write()#flush()#close()包裹在try-catch的{​​{1}}块中。如果被捕获,则通常意味着最终用户已中止请求。

为了更进一步,您还可以在Tomcat和clones(它是IOException的子类)上捕获更多特定于servlet容器的异常,例如ClientAbortException,但这将使您的webapp代码对其他servletcontainers无法移植。


更新:要回到阻止问题,您需要在编写单个数据块后调用IOException。这将实际将数据发送到客户端,并在底层套接字关闭时导致flush()

答案 1 :(得分:2)

你无法确定。这取决于servlet容器的实现方式。

当用户点击“取消”时,浏览器应该关闭套接字。当然,服务器可以检测到这一点,但是服务器是否将ServletOutputStream“直接”连接到套接字OutputStream是依赖于实现的。如果是,则在下次servlet尝试写入数据时将引发IOException

如果容器缓冲输出,servlet可能只是完成数据写入,并且永远不会知道任何错误。