我有一个应用程序,它使很多多个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