2017-07-15 83 views
0

我正在开发一个登录表单,但我得到了这个卡塔琳娜生命周期异常。卡塔利娜生命周期异常

这是我web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" id="WebApp_ID" version="3.0"> 
    <display-name>LoginWithSpringMVC</display-name> 
    <servlet> 
     <servlet-name>spring</servlet-name>  
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
     <servlet-name>dispatcher</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 
    <session-config> 
     <session-timeout> 
      30 
     </session-timeout> 
    </session-config> 
    <welcome-file-list> 
     <welcome-file>index.jsp</welcome-file> 
    </welcome-file-list> 
</web-app> 
+0

尝试1)停止服务器2)清理Tomcat的工作目录 – sForSujit

+0

是的,我试了很多时间仍然是相同的问题@sForSujit – Yuvanath

+0

java.util.concurrent.ExecutionException:org.apache.catalina.LifecycleException:无法启动组件[ StandardEngine [卡塔利娜] .StandardHost [本地主机] .StandardContext [/ HomeBankingSystem]] \t在java.util.concurrent.FutureTask.report(未知来源) \t在java.util.concurrent.FutureTask.get(未知来源) \t在org.apache.catalina.core.ContainerBase。startInternal(ContainerBase.java:1119) \t at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:8 – Yuvanath

回答

1

至于日志,你经常会得到“日志/ catalina.yyyy毫米dd.log”的信息最多,但有时当一个应用程序失败开始你也会在“logs/localhost.yyyy-mm-dd.log”中获得信息。除此之外,你可能有应用程序特定的日志,你可以检查,或者如果应用程序正在写入STDOUT/STDERR,你可以检查“logs/catalina.out”来获取它们。

1

并可能检查JVM类加载器问题。如果在同一个目录中有多个JAR文件,并且它们具有相同的类(也许版本A和库B的版本B),则没有定义的JAR文件搜索顺序。在某些平台上,A可能首先被搜索,其他B可能首先被搜索。通常它对于一个平台是一致的,但它在技术上可以从运行到运行改变。对此的简单回答是不要将旧的WAR文件保留在“lib”目录中(或类路径中的任何其他位置)。在发生此问题时排除故障的一种方法是使用JVM选项“-verbose”运行tc服务器。这将打印JVM加载类文件的位置。然后,您可以使用它来查找有问题的库。

遵循邮票:

验证的第一件事是,这个类存在并在类路径上。这是这个错误最明显的原因。检查WAR文件中捆绑的JAR文件,并确认它存在那里。

我会做的第二件事是添加我上面提到的“-verbose”选项。这将帮助你确定哪些类正在加载以及从哪里加载。执行此操作后,请检查是否还有更多旧的JAR文件正在使用,如果已删除它们。之后,在错误生成之前查看正在加载的类。这些可能会触发JVM加载这个类。看看这些类正在加载的JAR文件,并确保它是正确的版本。当使用两个不同版本的JAR文件时,通常会发生NoClassDefFoundError。

您应该做的第三件事是看看详细输出并查找从您的tc服务器实例的顶级“lib”目录中的JAR文件加载的类文件。虽然这在技术上是可行的,但它几乎总是会导致很难诊断类装载器问题,这可能发生在这里。也就是说,建议将99%的JAR文件放在WAR文件的“WEB-INF/lib”目录中。只有你想放在顶层“lib”目录中的是Tomcat需要的JDBC和资源驱动程序(即,因为你已经在配置中配置了一个标签)。

最后,它看起来像是由servlet 3.0注释处理触发的。换句话说,Tomcat正在扫描您的应用程序中的servlet 3.0注释。在这个过程中,它会触发错误。如果你没有使用servlet 3.0的功能,你可以禁用它。有关这方面的更多信息,请参阅Tomcat docs,它同样适用于tc Server。