【问题标题】:Catalina lifecycle exceptionCatalina 生命周期异常
【发布时间】:2017-07-15 06:44:03
【问题描述】:

我正在开发一个登录表单,但我遇到了这个 catalina 生命周期异常。

这是我的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>

【问题讨论】:

  • 试试 1) 停止服务器2) 清理Tomcat的工作目录
  • 是的,我试过很多次仍然遇到同样的问题@sForSujit
  • java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: 无法在 java.util 中启动组件 [StandardEngine[Catalina].StandardHost[localhost].StandardContext[/HomeBankingSystem]]。 concurrent.FutureTask.report(Unknown Source) at java.util.concurrent.FutureTask.get(Unknown Source) at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:1119) at org.apache.catalina.core .StandardHost.startInternal(StandardHost.java:8
  • 这是个例外

标签: java jsp spring-mvc


【解决方案1】:

就日志而言,您通常会在“logs/catalina.yyyy-mm-dd.log”中获得最多信息,但有时当应用程序无法启动时,您也会在“logs/localhost.log”中获得信息。 yyyy-mm-dd.log”。除此之外,您可能有可以检查的应用程序特定日志,或者如果应用程序正在写入 STDOUT/STDERR,您可以检查“logs/catalina.out”来获取它们。

【讨论】:

    【解决方案2】:

    并且可以检查 JVM 类加载器问题。如果您在同一目录中有多个 JAR 文件,其中包含相同的类(可能是库的版本 A 和版本 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 文档,它同样适用于 tc Server。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-25
      • 1970-01-01
      • 2018-12-24
      • 2014-07-17
      • 1970-01-01
      • 2015-06-25
      • 1970-01-01
      相关资源
      最近更新 更多