这就是我需要的东西..我有一个UI,用户可以根据输入的(上传的)数据上传文件并提取报告。由于要提取大量数据,一旦用户上传数据,我想从servlet控件中出来,这样用户就不必在同一页面中等待并将控件传递给java通过使用户可以处理其他事情,可以独立完成程序。因此,一旦控件继续运行java standalone,它就会调用后端sps并从中构建一个提取并将其放在服务器上的文件路径中。
用户检索具有来自UI的功能,以检查摘录是否已准备好供他们下载。
所以这里的问题是,实现同样的最佳实践或可能性是什么?请告诉我您的宝贵意见。
谢谢!
答案 0 :(得分:2)
如果您在Java EE环境中运行,我建议让servlet将任务分派给JMS队列并使用message driven bean进行(异步)处理。
正如其他人所说,让上传servlet将用户重定向到某个启用了ajax的页面来轮询后端以完成作业将是相当简单的。
如果您不在EE环境中,则可以创建独立(线程池)应用程序以从队列中使用并提供信令,例如。通过数据库(我假设结果仍然在数据库中)。 The Spring framework提供了非常强大和广泛的设施,可以将它们绑定在一起。
但实际上,有several free/open source EE containers available,从轻量级到企业,所以没有必要自己构建必要的东西。
干杯,
答案 1 :(得分:0)
很容易。
在servlet类中有一个线程。
运行线程(线程将提取数据等)。
运行线程后,将用户重定向到您自动刷新的页面或显示已完成提取的内容。(您提到您可以找到它)
答案 2 :(得分:0)
如果你不能使用消息驱动的bean,你可以让你的servlet将数据上传到文件系统上的某个位置,并在数据库表中记录一行,说明有一个要处理的作业。
然后,让您的独立程序轮询作业,处理数据并在完成时更新数据库行(包括失败原因等)。
最后,您可以使用ajax请求从UI轮询作业的状态。
允许用户建立一个数据作业队列,以便在他们做其他事情时进行处理。