我正在编写一个简单的网络应用程序,它将一些文件上传到服务器,运行一些代码,然后将生成的文件通过电子邮件发送给用户。但是,由于在用户上传一些文件后代码可能需要几个小时才能运行,我想将它们转发到通知页面。然后,他们应该能够关闭浏览器,同时在服务器上继续处理并等待结果电子邮件。
上传文件后,我有以下代码:
request.setAttribute("notification", details);
RequestDispatcher view = request.getRequestDispatcher("views/notification.jsp");
view.forward(request, response);
然后是处理代码。问题是在所有处理完成之前 View 不会被转发。让用户停留在表单页面上。如果用户关闭浏览器,处理仍然继续,但我想首先将用户转发到通知。
最佳答案
您需要异步处理上传的文件。 Servlet 假定仅在您离开 Servlet 后才会处理请求并关闭连接。如果您在 servlet 内运行处理代码,用户可能永远无法取回 View 。
对于异步处理,您有多种选择,从普通线程、线程池、JMS 开始......抓取文件,将其发送到在后台运行的某个线程,以便处理是非阻塞的并立即返回 View 。
关于java - 在 servlet 处理完成之前转发到 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11746046/