我正在尝试部署一场我没有编写的战争,但我在日志中收到此错误:
java.lang.NoClassDefFoundError: HttpSessionListener
我知道 HttpSessionListener 位于servlet-api.jar它可以在 tomcat(我的应用程序服务器)的 lib 目录中找到。
我尝试将 servlet-api.jar 包含在战争的 WEB-INF/lib 文件夹中,但日志对我这样做大喊大叫:
INFO: validateJarFile(/home/test/apache-tomcat-6.0.18/webapps/test/WEB-INF/lib/servlet-api.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class
互联网声称您不必将该类包含在您的 lib 文件夹中。
edit:我从 web.xml 中删除了有问题的侦听器(这导致了上述问题),因为它看起来不太重要。这揭示了更多错误:
java.lang.Error: Unresolved compilation problem:
The type javax.servlet.FilterChain cannot be resolved. It is indirectly referenced from required .class files
我缺少什么?
@BalusC 的解释听起来比我的更合理......
其他一些可能的解释/需要检查的事情:
servlet-api.jar 不在 $CATALINA_HOME/lib 中,或者由于某种原因不包含该类。 (我知道你说你“知道”它在那里,但你没有具体说你检查过它。)
其他东西被破坏导致第一次尝试加载HttpSessionListener
在静态初始化期间因未捕获的异常而失败。 (这有点难以置信,因为HttpSessionListener
是一个接口。但值得检查日志以查找早期的类加载错误......以防万一。)
缺失的类可能被命名为foo.bar.HttpSessionListener
而不是javax.servlet.http.HttpSessionListener
。这可能会出现在嵌套堆栈跟踪中。
如果您正在部署的 WAR 中的某些内容正在创建自己的类加载器,则可能是错误地执行了此操作,并且HttpSessionListener
类不在类加载器的有效类路径上。
EDIT
如果您现在看到日志中报告的未解决的编译错误,您应该怀疑 WAR 文件以及用于构建它的进程。具体来说,听起来 WAR 包含有 Java 编译错误的类!
(或者这可能是编译 JSP 时出现的问题……但这也会显示在日志中。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)