0

我正在尝试在具有 tomcat 10 的 Debian 服务器中运行使用 zk 框架和 Java 制作的已部署的 .war,但它不起作用。在查看/opt/tomcat/logd/localhost.2021-xx-xx.log文件中的日志时,出现如下错误信息:

java.lang.ClassNotFoundException: org.zkoss.zk.ui.http.HttpSessionListener 

然后,我在互联网上进行了一些研究,并在此链接https://forum.zkoss.org/question/97112/javalangclassnotfoundexception-orgzkosszkuihttphttpsessionlistener/上找到了可能的解决方案,我按照建议做了。但是,错误继续出现。貌似zk框架和服务端有冲突。

4

1 回答 1

2

我看到两个可能导致这种情况的潜在问题。

首先:Tomcat 10 实现了 Jakarta servlet(而不是 java servlet)。在构建您的应用程序时,请确保您使用的是正确的 ZK 版本。最后一个 ZK 版本有两个版本:

  • 9.6.0:Java EE(tomcat 9 及以下)
  • 9.6.0-Jakarta:Jakarta EE(仅限 tomcat 10)

请参阅此处的配置指南

需要注意的是,如果您在 tomcat 10 中运行 ZK 的 Java EE 版本,我希望您获得:

[org.zkoss.zk.ui.http.HttpSessionListener]
    java.lang.NoClassDefFoundError: javax/servlet/ServletRequestAttributeListener

它与您当前的问题位于同一位置,但不完全相同:D

第二:如果您通过依赖管理工具(例如 maven 或 graddle)来解决依赖关系,则可能您正在解决错误的依赖关系。

我建议仔细检查已解析的依赖关系,以确保每个 ZK jar 都在同一版本中解析。

您可能有一个来自主声明的 ZK 版本,以及来自插件(例如 Keikai、ZK 电子表格或 ZK 图表)的不同版本

例如,在 maven 中,运行依赖树命令是了解已解决问题的好方法。

于 2021-08-11T02:06:49.440 回答