如何判断用户在从 Java servlet 下载期间是否点击了取消?使用 IE 对我来说似乎发生了什么,输出流 println() 块。使用过的点击取消,但有没有办法让这个或类似的东西超时?
问问题
2876 次
2 回答
5
换行OutputStream#write()
,#flush()
并#close()
在一个try-catch
块上IOException
。如果被捕获,则通常意味着最终用户已中止请求。
为了更进一步,您还可以捕获更多特定于 servletcontainer 的异常,例如ClientAbortException
在 Tomcat 和克隆(它是 的子类IOException
)上,但这会使您的 webapp 代码无法移植到其他 servlet 容器。
更新:回到阻塞问题,您想flush()
在写入单个数据块后调用。这实际上会将数据发送到客户端,并导致IOException
底层套接字关闭。
于 2010-09-09T18:07:49.470 回答
2
你将无法确定。这取决于您的 servlet 容器是如何实现的。
当用户点击“取消”时,浏览器应该关闭套接字。当然,这将被服务器检测到,但是服务器是否有ServletOutputStream
直接连接到套接字的“管道”OutputStream
是依赖于实现的。如果是这样,IOException
则在 servlet 下次尝试写入数据时将引发 an。
如果容器缓冲输出,则 servlet 可能刚刚完成写入数据并且永远不知道有什么问题。
于 2010-09-09T18:12:22.047 回答