在Tomcat 5.5部署Web应用时如何解决“Error listenerStart”错误?

40

我部署了一个使用Spring和Hibernate的Apache Wicket Web应用程序到我的Tomcat 5.5实例中。当我导航到Tomcat Manager界面时,我发现我部署的Web应用程序没有运行。当我按下“启动”按钮时,我收到以下错误消息:“FAIL-无法启动上下文路径为/spaghetti的应用程序”。

我的catalina.log包含以下内容:

Apr 15, 2010 1:51:22 AM org.apache.catalina.loader.WebappClassLoader validateJarFile  
INFO: validateJarFile(/var/lib/tomcat5.5/webapps/spaghetti/WEB-INF/lib/jsp-api-6.0.16.jar)   - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/jsp/JspPage.class  
Apr 15, 2010 1:51:22 AM org.apache.catalina.loader.WebappClassLoader validateJarFile  
INFO: validateJarFile(/var/lib/tomcat5.5/webapps/spaghetti/WEB-INF/lib/servlet-api-6.0.16.jar) - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class  
Apr 15, 2010 1:51:24 AM org.apache.catalina.core.StandardContext start  
SEVERE: Error listenerStart  
Apr 15, 2010 1:51:24 AM org.apache.catalina.core.StandardContext start  
SEVERE: Context [/spaghetti] startup failed due to previous errors

从web.xml文件中摘录:

    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>

非常感谢任何帮助。


看这个:http://blog.trifork.com/2011/03/18/debugging-the-dreaded-severe-error-listenerstart-and-severe-error-filterstart-tomcat-error-messages/ - Mohamed Ennahdi El Idrissi
4个回答

72

我发现遵循这些说明有助于查找问题所在。对我来说,这是致命的,不知道哪里出了问题。

http://mythinkpond.wordpress.com/2011/07/01/tomcat-6-infamous-severe-error-listenerstart-message-how-to-debug-this-error/

引用自链接:

在Tomcat 6或更高版本中,默认日志记录器是“java.util.logging”日志记录器,而不是Log4J。因此,如果您尝试添加“log4j.properties”文件,则不会起作用。Java utils logger使用此处指定的名为“logging.properties”的文件: http://tomcat.apache.org/tomcat-6.0-doc/logging.html

因此,要获取调试详细信息,请在WAR的“/WEB-INF/classes”文件夹下创建一个“logging.properties”文件,然后您就可以开始了。

现在,当您重新启动Tomcat时,您将看到所有调试信息的完整荣耀!!!

示例logging.properties文件:

org.apache.catalina.core.ContainerBase.[Catalina].level = INFO
org.apache.catalina.core.ContainerBase.[Catalina].handlers = java.util.logging.ConsoleHandler

谢谢!正是你所说的,我们可以神奇地检查问题的真正原因并停止浪费时间。 :-) 干杯。 - Ualter Jr.
3
这只是(我的)问题的一部分。listenerStart错误发生在 catalina.out 文件中,而堆栈跟踪被写入了 localhost-<date>.out 文件。因此,请务必检查所有Tomcat的日志文件以查找堆栈跟踪(可能通过使用ps aux | grep tomcat查找pid,并使用lsof -p <pid>查找Tomcat的打开文件)。 - Herbert
该链接已失效。 - Siddharth

35
/var/lib/tomcat5.5/webapps/spaghetti/WEB-INF/lib/jsp-api-6.0.16.jar
/var/lib/tomcat5.5/webapps/spaghetti/WEB-INF/lib/servlet-api-6.0.16.jar
你不应该将任何与服务器相关的库放在/WEB-INF/lib中。应该将它们留在应用程序服务器自己的库中,以避免类路径冲突。删除所有在/WEB-INF/lib(以及如果你已经把它们放在那里的话,还要删除JRE/libJRE/lib/ext中的所有应用服务器特定库)。
通常原因是起步者认为这是解决编译错误的正确方法,其中包括无法解析javax.servlet类。将它们放在Web应用程序库中是错误的解决方法。你应该在编译期间引用它们的类路径,即javac -cp /path/to/server/lib/servlet.jar等等,或者如果你使用IDE,则应将服务器集成到IDE中并将Web项目与服务器关联起来。IDE将自动将服务器特定库添加到Web应用程序项目的类路径(即构建路径buildpath)。

感谢BalusC的帮助。我在pom.xml的依赖列表中没有明确添加servlet-api或jsp-api,实际上它们并未列在那里。也许这是我其中一个依赖项的依赖关系。我会尝试您的建议。 - John
我遇到了类似的问题,在Eclipse中的WTP中,在/workspace/.metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/...。这是在从Servlet 2.5升级到3.0后开始出现的,所以我想右键单击服务器,然后选择“清除Tomcat工作目录”应该可以解决它。但是事情一直都会回来。最终,mvn dependency:tree显示一些依赖项同时包含javax.servlet:servlet-api:jar:2.5org.mortbay.jetty:servlet-api:jar:2.5-20081211 - Arjan

10

当我使用的JDK与Tomcat JVM不同时,我遇到了这个错误。我验证了Tomcat管理器正在运行jvm 1.6.0,但该应用程序是在java 1.7.0下编译的。

在升级Java并更改我们的启动脚本(/etc/init.d/tomcat)中的JAVA_HOME之后,错误消失了。


那正是我的问题,谢谢你提供的解决方案。 - Eagle

2
由Tom Saleeba提供的答案非常有帮助。 今天我也遇到了同样的错误。
引用: Apr 28,2015 7:53:27 PM org.apache.catalina.core.StandardContext startInternal SEVERE:错误listenerStart
我按照建议添加了logging.properties文件。以下是我的失败原因:
引用: java.lang.IllegalStateException:未展开WAR文件时无法设置Web应用程序根系统属性
问题的根本原因是我在web.xml中添加了一个监听器(Log4jConfigListener)。根据链接SEVERE: Exception org.springframework.web.util.Log4jConfigListener,此监听器不能添加到未展开的WAR中。
对于某些人来说,知道这是在OpenShift JBoss gear上发生的可能会有所帮助。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接