Java 一次由一个客户端访问

Java 一次由一个客户端访问,java,Java,我的要求如下 我有一个用java开发的web应用程序 我在html页面中有一个链接。当第一个客户端单击html页面中的submit按钮时,批处理文件应该运行 同时,当另一个客户端单击submit按钮时,他应该会收到页面正忙的消息 如果第一个客户端单击“释放”按钮,则其他客户端必须能够运行批处理文件 如何操作?单击“提交”按钮时设置标志,单击“释放”按钮时清除标志 根据您的体系结构,该标志可以是任何内容,从代码中的布尔变量、数据库中的特殊条目到临时文件 单击“提交”按钮时,检查是否已设置该标志。如

我的要求如下

我有一个用java开发的web应用程序

我在html页面中有一个链接。当第一个客户端单击html页面中的submit按钮时,批处理文件应该运行

同时,当另一个客户端单击submit按钮时,他应该会收到页面正忙的消息

如果第一个客户端单击“释放”按钮,则其他客户端必须能够运行批处理文件


如何操作?

单击“提交”按钮时设置标志,单击“释放”按钮时清除标志

根据您的体系结构,该标志可以是任何内容,从代码中的布尔变量、数据库中的特殊条目到临时文件

单击“提交”按钮时,检查是否已设置该标志。如果是,则返回一条错误消息,说明页面正忙

在伪代码中:

if (flagIsSet()) {
  showPageIsBusy();
} else {
  setFlag();
  startBatchFile();
}
请记住,当批处理文件完成或单击“发布”按钮时,以及在
finally
块中的某个位置清除该标志

您还必须确保只有启动批处理文件的客户端才能释放该批处理文件并清除该标志

正如Avi在评论中指出的,您还应该记住同步对标志的访问。

伪算法:

修改批处理文件以在批处理操作前后运行servlet

在运行批处理文件之前,设置一个servlet或标志,用于注册我正在执行的文件或数据库或会话变量;在批处理文件完成时,设置一个servlet或标志,用于注册我正在发布的文件或数据库或会话变量

当用户单击release按钮时,运行将释放标志的同一个servlet


当用户提交submit按钮时,检查该标志是否被执行或释放,具体取决于您是否提醒您的客户端。

您可以使用servlet类中的一个字段(否则为大的nono)作为标志。

如果您的应用程序恰好在多个负载平衡服务器上运行,然后你会面临和我一样的问题:)我之前提出了一个问题,但不幸的是,我没有得到任何回应。在任何情况下,您都可以将我的问题解决方案看作是对的答案。

这是一个单例或更好的应用程序Bean。这个Bean应该可以启动你长期运行的后台任务,并提供有关它的信息,例如,它是否正在运行,可能是什么时候开始的,是谁开始的,如果你可以查看进度,那么你也可以显示进度条


如果您能告诉我们您使用的是什么web应用程序框架,我想我们可以提供更好的提示。

只要您记住同步对标志的访问。并确保在最后一个区块中清除它,这样它就不会被卡住。这是真的。我在我的答案中添加了这些要点,以便它们更为明显。