关闭应用程序浏览器 window 是否会结束 Spring MVC 中发生的处理

Does closing the Application browser window ends the processing that was happening in Spring MVC

在 Spring MVC 应用程序中,如果页面(浏览器 window )在功能处于 运行 时关闭,它会停止应用程序和正在进行的处理吗?它将继续在服务器上发生。

假设我有导出 excel 报告的功能,我单击“导出”按钮。现在有两种情况: 案例 1 - 如果我在不使用线程 的情况下启动报告生成 ,并在报告生成之前关闭 window ,它会抛出 error/or 中止报告生成 该过程是否会在服务器上继续发生并下载报告?

情况 2) 如果我 使用线程 启动报告生成,并在报告生成之前关闭 window,它会抛出错误/或中止报告生成 OR 线程是否会继续在后台工作并下载报告?

简短的回答是否定的,关闭浏览器选项卡或 window 不会影响服务器上发生的处理(除非此处理还涉及 I/O 与客户端)。

通常,托管 Spring MVC 应用程序的 Servlet 容器(例如 Tomcat)有一个 built-in 线程池来为 http 请求提供服务。一旦请求到达,这些线程之一将处理它。如果与此同时,客户端关闭了 TCP 连接(希望 1 在关闭浏览器选项卡或 window 时发生),线程将不会收到通知或以任何方式中断。因此,服务器端可能发生的任何处理都将继续。我是否使用另一个 Thread 来进行处理并不重要。在这两种情况下,服务器上的处理都将继续。

由于您专门询问有关“下载”报告文件的问题,这里有更多信息:下载涉及 I/O 与客户端。如果您在下载开始前关闭选项卡或浏览器,服务器将在尝试将数据写入响应时立即收到错误。所以文件不会被下载,数据不会被传输。如果您在下载开始后关闭选项卡,文件将正常下载。如果用户取消文件下载,服务器将再次出错,数据传输将停止。

在任何情况下,如果报告的生成发生在将数据发送回客户端之前,生成将继续在后台工作,无论您是否使用线程。

1 我满怀希望地说,因为确切的行为取决于 OS / 设备 / 浏览器。关闭 TCP 连接是预期的行为。