我正在开发一个项目,我们使用 Tomcat 8 作为应用程序服务器,因此使用 JSP 和 Servlet。每个 JSP 显示一种项目列表。应用程序的用户可以模拟一个项目。这意味着什么并不重要。当用户点击“模拟”按钮时,将执行以下过程:
- 通过 Ajax (javascript) 将执行一个 servlet,它会生成一个 zip 文件并将该文件存储在服务器的硬盘上
- 将在相应项目的数据库中设置“模拟”标志
- 外部 java 程序(在后端)监听“模拟”标志,如果设置了项目标志,则外部程序会获取 Web 应用程序存储的 zip 文件
- 然后外部 java 程序运行该项目的模拟。
- 模拟完成后,外部 java 程序在服务器的硬盘上存储一个新的 zip 文件,在数据库中设置一个“嘿,我准备好了”标志并调用 web 应用程序的 servlet
- 此 servlet 将新 zip 文件中的数据信息保存到数据库
- 完成
所以我的问题是:通知 JSP 模拟已完成的最佳方式是什么? JSP 仍然显示该项目正在进行模拟。我目前的想法是:
我可以定期向服务器发送 Ajax 请求,以检查数据库中是否有“嘿,我准备好了”标志,如果已设置,我可以在 JSP 上显示结果。但我觉得有更智能的解决方案。
也许我可以使用最后一个 servlet 调用(参见第 5 点)以某种方式通知 JSP 模拟已完成?问题是这个 servlet 不是由客户端调用的,而是由外部 java 程序调用的。
您有什么建议吗?或者有什么我应该阅读的技术吗?
谢谢。
最佳答案
使用异步 ajax 调用意味着该函数将在 servlet 完成其工作时返回并返回一些 HTTP 代码(200 表示成功)。
所以这个例子:
$.ajax({
url: Config.serverUrl+'/simulationServlet',
type: 'GET',
success: function(result) {
$('#infoBox').text("simulation is over");
}
});
将显示模拟完成。
关于java - 在没有客户端请求的情况下将 servlet 通信到 jsp,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28879864/