一次访问一个客户端

时间:2009-02-25 08:03:20

标签: java

我的要求如下。

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

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

同时当其他客户点击提交按钮时,他应该收到该页面正忙的消息。

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

我该怎么做?

5 个答案:

答案 0 :(得分:1)

单击提交按钮时设置标记,单击释放按钮时将其清除。

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

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

在伪代码中:

if (flagIsSet()) {
  showPageIsBusy();
} else {
  setFlag();
  startBatchFile();
}

请记住在批处理文件完成或单击释放按钮并在finally块中的某个位置时清除标记。

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

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

答案 1 :(得分:0)

伪算法:

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

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

当用户单击释放按钮时,运行将重新标记该标志的相同servlet。

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

答案 2 :(得分:0)

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

答案 3 :(得分:0)

如果您的应用程序碰巧在多个负载均衡的服务器上运行,那么您面临同样的问题:)我之前提交了一个问题,但不幸的是我没有得到任何回复。无论如何,您可以将问题的解决方案看作my question here的答案。

答案 4 :(得分:0)

这是Singleton或更好的Application-Bean。这个Bean应该是你长期运行的后台任务的一部分,并提供有关它的信息,例如如果它正在运行,也许就像是什么时候开始,谁开始它,如果你可以进步,所以你也可以显示进度条。

如果您告诉我们,您使用的是哪种Web应用程序框架,我认为我们可以提供更好的提示。