我有一個應用程序,它使很多多個servlet調用。我如何確保在特定的servlet X處理完成之前,沒有其他的Y,Z的servlet實例被調用。如何確保一次僅調用一個servlet(不是實例)?
SingleThreadModel或同步將確保每個servlet只有一個線程被調用。但是,這可能不適用於多個servlet。
我有一個應用程序,它使很多多個servlet調用。我如何確保在特定的servlet X處理完成之前,沒有其他的Y,Z的servlet實例被調用。如何確保一次僅調用一個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)。
但是我必須說,很難想象你爲什麼要這樣做。這是可行的,但非常不尋常。 – Thomas
每個servlet都可以爲應用程序上下文鍵添加一個標誌,並且可以有一個過濾器來檢查該屬性。 –
爲什麼你要求* someone *使用servlet X發出某個HTTP請求,然後允許其他人*使用servlets Y,Z ...來使用系統的所有其他頁面?這是沒有意義的。 – Andreas
我有一個場景,我想通過清除cookie來清除會話。雖然我使用servlet清除cookie,但我想確保另一個servlet不會攜帶fwd。 – Ajay