java - 当我将文件从 servlet 发送到浏览器时,输出流会发生什么情况?

标签 java servlets download

我有一个应用程序,用户使用它来下载一些文件,不幸的是,这些文件是通过网络服务检索的。网络服务提供有效负载内的文件内容:(

所以我可能在 webapp 的内存中同时有很多文档,从而导致内存不足。

问题是:当用户按下网页下载时,我开始在输出流上写入...但是用户收到一个带有“保存”或“取消”的弹出窗口。 在他按下“保存”之前,文档会发生什么情况? 如果他按取消怎么办?

输出流在写入时被阻止,直到用户按下“保存”?

谢谢...

最佳答案

不,输出流没有被锁定,它被缓冲,并且当您的 servlet 容器认为时间正确时(或者当您通过对其进行刷新()调用强制发送时),它会被发送到客户端。

根据您的服务器基础设施(如果您的网络服务器前面是否有反向代理),您的请求可能会失败,但通常您不必关心这一点。

关于内存问题,您可能应该调用网络并在读取时直接写入请求输出流,或者您应该将其写入文件,然后将此文件分块写入响应,以避免使用过多内存并由于内存不足错误而导致服务器停机。

关于java - 当我将文件从 servlet 发送到浏览器时,输出流会发生什么情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6863820/

相关文章:

java - 如何从java中的特定元素开始迭代linkedhashset?

Java 长奇怪的结果

java - 错误处理程序 Servlet : how to get exception cause

java - Tomcat服务器默认页面查询

java - 从 Jetty 6 迁移到 Jetty 8

browser - 浏览器如何在下载中找出文件名?

java - Java 可以用来确定下载的持续时间吗?

php - 从网页上的 mysql 结果下载文件

java - java中的单维数组并试图获取数组中有多少数字大于算术平均值

java - Tomcat 替换 VM 参数