java - Servlet 中的静态变量

标签 java tomcat servlets static classloader

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

最佳答案

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

听起来您必须运行有缺陷的代码,不能/不允许修复它,但仍然应该让它工作。让它工作的方法是修复原始代码,而不是破坏类加载机制或其他任何东西。

快跑!

如果您不这样做,并以某种方式神奇地修复了这个 问题:这个类有一个基本的错误,就会有更多。最终,将成为 future 任何故障的罪魁祸首,因为您构建了绝对非标准的基础架构。

假设下一个问题是性能问题。或者另一个成员变量,XSS,CSRF。如果您现在正在努力处理 servlet 中的静态变量,则可能性很高。

在根部修复它,或者逃跑。抵制任何二等变通办法,不惜任何代价。

关于java - Servlet 中的静态变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48212359/

相关文章:

java - 服务器未正确读取发送的 UDP 数据包

java - Servlet session 超时

java - 如何使用自定义适配器更改 ListView 中的 TextView 字体?

java - 如何在同一方法中返回fragment和fragmentactivity?

java - 获取当前 Activity 以处理发现的 NFC 标签

java - 如何将 JSP 中的选定行发送到 Java Controller ?

java - java/servlet中发送邮件出错

apache - tomcat无法运行ant reload命令

java - Liferay Tomcat Server 不断在服务器控制台上发出警告消息

gwt - Tomcat 6 : HTTPS times out but HTTP works (Maybe GWT issue? )