2017-01-02 32 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

相關問題