【问题标题】:Does JSP only run a single instance of a JARJSP 是否只运行 JAR 的单个实例
【发布时间】:2016-09-05 05:37:16
【问题描述】:

我有一个 JSP,它接受 EPUB 文件作为上传文件,然后使用 JAR 文件对 EPUB 进行一些检查/验证。

我让它工作正常,但是当我测试从 2 个不同选项卡 tab1tab2 使用 JSP 页面并为每个选项卡上传不同的文件时,两个页面的结果仅针对 tab1 或 tab2 中的 1 个选项卡,然后 tomcat 服务器关闭。

我检查了控制台,它有一个

java.util.ConcurrentModificationException

我认为这是由我的 JAR 文件具有静态变量引起的。

所以我的问题是,即使我使用 2 个浏览器,JSP 是否只运行我的 JAR 的一个实例?

如果是这样,修复静态变量是我唯一的选择还是我还能做些什么?

【问题讨论】:

  • 也许您以错误的方式使用库的类?或者您已经怀疑该库的编写方式不允许并行访问……您应该共享一些代码。它是您使用的外部库吗?
  • @home 感谢您的回复,但我想我明白了。保存结果的是静态变量,这就是为什么我只得到一个结果。无论如何谢谢 :) 我仍然只是 JSP 的新手
  • “JAR 的单个实例”实际上没有意义。 JAR 没有实例。它只是类字节码和其他资源的容器。

标签: java jsp jar epub


【解决方案1】:

每个 Web 应用程序只有一个类加载器。 JSP(它是 Web 应用程序的一部分)使用只加载一次的 JAR。因此静态变量在所有请求之间共享并且内容被覆盖。您需要使变量成为非静态变量并在每个 JSP 中创建一个新实例来进行处理。

【讨论】:

  • 我知道这有点晚了,但这实际上是我所做的,我删除了 JAR 中的所有静态变量并在每个 JSP 中创建了新实例,我的页面运行良好。干杯@peterkofler
猜你喜欢
  • 2012-02-15
  • 1970-01-01
  • 1970-01-01
  • 2015-04-22
  • 1970-01-01
  • 2013-05-27
  • 1970-01-01
  • 1970-01-01
  • 2012-08-31
相关资源
最近更新 更多