java - 在没有客户端请求的情况下将 servlet 通信到 jsp

标签 java jsp tomcat servlets

我正在开发一个项目,我们使用 Tomcat 8 作为应用程序服务器,因此使用 JSP 和 Servlet。每个 JSP 显示一种项目列表。应用程序的用户可以模拟一个项目。这意味着什么并不重要。当用户点击“模拟”按钮时,将执行以下过程:

  1. 通过 Ajax (javascript) 将执行一个 servlet,它会生成一个 zip 文件并将该文件存储在服务器的硬盘上
  2. 将在相应项目的数据库中设置“模拟”标志
  3. 外部 java 程序(在后端)监听“模拟”标志,如果设置了项目标志,则外部程序会获取 Web 应用程序存储的 zip 文件
  4. 然后外部 java 程序运行该项目的模拟。
  5. 模拟完成后,外部 java 程序在服务器的硬盘上存储一个新的 zip 文件,在数据库中设置一个“嘿,我准备好了”标志并调用 web 应用程序的 servlet
  6. 此 servlet 将新 zip 文件中的数据信息保存到数据库
  7. 完成

所以我的问题是:通知 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/

相关文章:

java - 如何将一个整数值从一个jsp页面传递到另一个jsp页面?

java - 部署在Tomcat 7.0.57上的Spring Boot 1.2.2应用程序不启动

tomcat - 将 log4j 用于多个应用程序的应用程序级日志在 weblogic 上不起作用

JSP 中类似 Wordpress 的 Urlrewriting,带有 Urlrewritefilter 的 Tomcat

java - 高效更新 DelayQueue 中的元素

java - self 复制的程序

jsp - apache tomcat 重定向到新的 url

java - 意外异常捕获设置开启,错误设置表达式

java - Android中如何根据动态SerializedName用gson解析json对象

java - MongoDB:如何在 Windows 上将所有查询记录到日志文件