Java 如何确保一次只调用一个servlet(不是实例)?

Java 如何确保一次只调用一个servlet(不是实例)?,java,servlets,jakarta-ee,Java,Servlets,Jakarta Ee,我有一个应用程序,它可以进行大量的多个servlet调用。如何确保在特定的servlet X处理完成之前,不会调用Y,Z的其他servlet实例 SingleThreadModel或同步将确保每个servlet只调用一个线程。但是,这可能无法在多个servlet上工作。对每个服务器调用使用回调机制。第一次服务器调用成功后,您可以调用第二次。您可以通过定义自己的锁来实现手动同步 例如,声明一个用作信号量的静态对象: public static final Object MY_LOCK = new

我有一个应用程序,它可以进行大量的多个servlet调用。如何确保在特定的servlet X处理完成之前,不会调用Y,Z的其他servlet实例


SingleThreadModel或同步将确保每个servlet只调用一个线程。但是,这可能无法在多个servlet上工作。

对每个服务器调用使用回调机制。第一次服务器调用成功后,您可以调用第二次。

您可以通过定义自己的锁来实现手动同步

例如,声明一个用作信号量的静态对象:

public static final Object MY_LOCK = new Object();
在您想要同步的地方,您可以这样使用它:

public void someMethod() {
    synchronized(MY_LOCK) {
        // do stuff that may not be called at same time
    }
}

public void someOtherMethod() {
    synchronized(MY_LOCK) {
        // do other stuff that may not be called at same time
    }
}

这样,您就可以在不同的方法中使用相同的锁(或者在您的示例中使用servlet)

每个servlet都可以向应用程序上下文键添加一个标志,您可以使用一个过滤器来检查此属性。为什么您会要求某人发出使用servlet X的特定HTTP请求,然后才允许其他人使用servlet Y、Z等来使用您系统的所有其他页面。。。?这毫无意义。我有一个场景,我想通过清除cookies来清除会话。当我使用一个servlet清除cookies时,我想确保另一个servlet不携带fwd。cookies保存在客户端。因此,同时在两个客户中清算它们应该不会有任何问题。但我必须说,很难想象你为什么要这么做。这是可行的,但非常不寻常。我是如何实现它的。函数successCallback(response){if(condition){调用另一个servlet.}有效