我有几个进程(调用第三方服务并获得响应,查询数据库并获取结果,执行一些IO操作等)以在我的servlet中执行。而且,这些过程是耗时的,如果第三方调用是第一个过程,响应失败,其余的过程也应该终止。
我将使用Executors将所有这些进程作为多线程运行。尽快,第一个进程的响应可用,servlet应发送响应(重定向到页面)。当剩下的所有进程都完成后,输出应该再次发送到页面(类似于推送到浏览器),或者重定向到另一个页面,(但是然后想要访问已经运行的其余线程。< / p>
我的第一次尝试是从浏览器发送ajax请求并处理所有这些进程。但它不太安全。所以,让我知道运行这些线程的方法,一旦完成第一个进程,发送响应然后返回其余的输出。
答案 0 :(得分:2)
我在这种情况下的建议是使整个页面异步。发送请求,启动线程并立即返回。线程可以填充会话中包含的公共对象,写入文件或数据库。完成后,设置一个标志以显示您完成的任何后续请求(轮询请求等),并且可以构建页面。
您可以通过各种方式呈现临时页面(&#34;检查&#34;消息,使用进度条轮询,等等)。
答案 1 :(得分:1)
在知道我们必须支持哪个IE版本后,有两个选择
使用AJAX和HTTP POST,逐个触发您的服务。还要确保维护promises以保持请求的干净状态。如果您还必须遵循完成顺序,也可以使用ajax链接。请注意,AJAX没有安全限制(请参阅here),它只是一种使用HTTP方法以异步方式调用服务器的API。因此,如果您的服务器具有安全性,则AJAX可以/需要继承该安全性。