2017-01-02 55 views
0

我有一个应用程序,它使很多多个servlet调用。我如何确保在特定的servlet X处理完成之前,没有其他的Y,Z的servlet实例被调用。如何确保一次仅调用一个servlet(不是实例)?

SingleThreadModel或同步将确保每个servlet只有一个线程被调用。但是,这可能不适用于多个servlet。

+1

每个servlet都可以为应用程序上下文键添加一个标志,并且可以有一个过滤器来检查该属性。 –

+0

为什么你要求* someone *使用servlet X发出某个HTTP请求,然后允许其他人*使用servlets Y,Z ...来使用系统的所有其他页面?这是没有意义的。 – Andreas

+0

我有一个场景,我想通过清除cookie来清除会话。虽然我使用servlet清除cookie,但我想确保另一个servlet不会携带fwd。 – Ajay

回答

0

为每个服务器调用使用回调机制。第一次服务器通话的成功,您可以拨打第二次。

+0

究竟如何实现它。如果(条件){ 调用另一个小服务程序。 } 作品 – Ajay

0

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

对于实例声明静态对象的旗语使用:

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)。

+1

但是我必须说,很难想象你为什么要这样做。这是可行的,但非常不寻常。 – Thomas

相关问题