Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无需客户端请求即可将servlet与jsp通信_Java_Jsp_Tomcat_Servlets - Fatal编程技术网

Java 无需客户端请求即可将servlet与jsp通信

Java 无需客户端请求即可将servlet与jsp通信,java,jsp,tomcat,servlets,Java,Jsp,Tomcat,Servlets,我正在做一个项目,我们使用Tomcat8作为应用服务器,因此使用JSP和servlet。每个JSP都显示一种项目列表。应用程序的用户有可能模拟一个项目。这意味着什么并不重要。当用户单击“模拟”按钮时,将执行以下过程: 通过ajaxjavascript将执行一个servlet,该servlet生成一个zip文件并将该文件存储在服务器的硬盘上 将在数据库中为各个项目设置“模拟”标志 后端的外部java程序侦听“simulation”标志,如果设置了项目标志,则外部程序将获取web应用程序存储的zip

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

通过ajaxjavascript将执行一个servlet,该servlet生成一个zip文件并将该文件存储在服务器的硬盘上 将在数据库中为各个项目设置“模拟”标志 后端的外部java程序侦听“simulation”标志,如果设置了项目标志,则外部程序将获取web应用程序存储的zip文件 然后外部java程序为该项目运行模拟。 模拟完成后,外部java程序在服务器的硬盘上存储一个新的zip文件,在数据库中设置一个“嘿,我准备好了”标志,并调用web应用程序的servlet 这个servlet将新zip文件中的数据信息保存到数据库中 完成 所以我的问题是:通知JSP模拟已经完成的最佳方式是什么? JSP仍然显示项目正在进行模拟。我目前的想法如下:

我可以定期向服务器发送Ajax请求,以检查数据库中的“hey I'm ready”标志,如果设置了该标志,我可以在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");
                       }
                });

将显示模拟已完成。

感谢您的回复。但问题是我有两个servlet调用。第一步是第2步。第二步和第五步。第一个servlet由使用web应用程序的客户机调用。第一个servlet只是在数据库中设置一个标志,并将成功返回给客户机。但是第二个servlet由驻留在服务器上的外部java程序调用。我必须知道第二个servlet何时完成。这应该是一个链式调用,因为应用程序逻辑不正常。这样想吧。因为您希望完成一项工作,所以需要点击一个servlet,让它做任何它想做的事情,并在工作完成时返回。例如,让我们称之为门面。servlet可以调用其他servlet等。您可以使用另一种编程模式publish/subscribe,但您需要设置很多东西来将通知推送到客户端应用程序。