Servlet中的静态变量

时间:2018-01-11 17:03:19

标签: java tomcat servlets static classloader

我在servlet中有一个jar。这个jar有一个名为' projectDirecotry'的变量。从逻辑上讲,我想要' projectDirectory'为每个用户保留不同的值。由于变量是静态的,我在这里面临竞争条件。我知道使用静态变量是一个糟糕的设计,但我对这个jar的源代码没有任何控制权。我发现静态变量的范围仅限于类加载器。我只是想知道是否可以为每个用户为此jar创建一个不同的类加载器,以便用户不再共享静态变量。

1 个答案:

答案 0 :(得分:0)

不鼓励在servlet中使用任何成员变量,因为通常只有一个servlet对象。 状态的所有需要进入请求/响应对象,而不是servlet。

听起来你必须运行错误的代码,不能/允许修复它,但仍然应该使其工作。使其工作的方法是修复原始代码,而不是使用类加载机制或其他任何东西。

运行!

如果你没有,并以某种方式神奇地修复了这个问题:如果这个类有一个基本的错误,还有更多。最后,将成为因未来任何误操作而受到指责的人,因为你建立了一个绝对的非标准基础设施。

想象一下,下一个问题是性能问题。或另一个成员变量,XSS,CSRF。如果你现在正在努力使用servlet中的静态变量,那么概率很高。

将其修复到根目录,或者逃跑。以任何价格抵制任何二流的解决方法。