JSP 只有 运行 JAR 的单个实例吗
Does JSP only run a single instance of a JAR
我有一个 JSP 接受 EPUB 文件作为上传,然后使用 JAR 文件在 EPUB 上做一些 checks/validations。
我让它工作正常,但是当我测试使用来自 2 个不同选项卡的 JSP 页面时,tab1 和 tab2 并为每个选项卡上传不同的文件,两个页面的结果仅针对 tab1 或 tab2 中的一个选项卡,tomcat 服务器随后关闭。
我检查了控制台,它有一个
java.util.ConcurrentModificationException
我认为这是由于我的 JAR 文件具有静态变量造成的。
所以我的问题是,即使我使用 2 个浏览器,JSP 是否只是 运行 我的 JAR 的一个实例?
如果是这样,修复静态变量是我唯一的选择还是我还能做些什么?
每个网络应用程序只有一个类加载器。 JSP(它是 Web 应用程序的一部分)使用仅加载一次的 JAR。因此,静态变量在所有请求之间共享,并且内容被覆盖。您需要使变量成为非静态变量并在每个 JSP 中创建一个新实例来进行处理。
我有一个 JSP 接受 EPUB 文件作为上传,然后使用 JAR 文件在 EPUB 上做一些 checks/validations。
我让它工作正常,但是当我测试使用来自 2 个不同选项卡的 JSP 页面时,tab1 和 tab2 并为每个选项卡上传不同的文件,两个页面的结果仅针对 tab1 或 tab2 中的一个选项卡,tomcat 服务器随后关闭。
我检查了控制台,它有一个
java.util.ConcurrentModificationException
我认为这是由于我的 JAR 文件具有静态变量造成的。
所以我的问题是,即使我使用 2 个浏览器,JSP 是否只是 运行 我的 JAR 的一个实例?
如果是这样,修复静态变量是我唯一的选择还是我还能做些什么?
每个网络应用程序只有一个类加载器。 JSP(它是 Web 应用程序的一部分)使用仅加载一次的 JAR。因此,静态变量在所有请求之间共享,并且内容被覆盖。您需要使变量成为非静态变量并在每个 JSP 中创建一个新实例来进行处理。