【问题标题】:Error configuring application listener of class AppContextListener配置类 AppContextListener 的应用程序侦听器时出错
【发布时间】:2016-11-28 05:10:25
【问题描述】:

我在 Windows 64 位机器 Java 7 上运行 Tomcat 7.0.70 和 Eclipse Kepler。当我从 Eclipse 运行软件时,我的软件运行良好,但仅当我将项目部署到 Tomcat 时,我才收到以下错误,将我的项目导出到 WAR 文件后:

SEVERE: Error configuring application listener of class com.crafy.controller.AppContextListener java.lang.ClassNotFoundException: com.crafy.controller.AppContextListener.

AppContextListener 是我自己的实现 ServletContextListener 的文件。这是文件的一部分,其中我删除了除 contextInitialized() 之外的所有内容,并且在那里,我删除了除 print 语句之外的所有内容(contextInitialized() 根本没有被调用):

package com.crafy.controller;


@WebListener
public class AppContextListener implements ServletContextListener {


    public void contextInitialized(ServletContextEvent servletContextEvent) {

        SessionFactory sessionFactoryInst = null;

        System.out.println("Database connection initialized for Application.");

    }



}

当我从 Eclipse 运行它时,整个应用程序运行良好(右键单击“Tomcat v7.0 Server at localhost”并单击“开始”)。另外,当我尝试使用 WAR 文件时,会出现上述错误。为了获取 WAR 文件,我从 Eclipse 导出(通过转到 File -> Export -> WAR File)。然后我将 WAR 文件放入文件夹:C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps。当我转到 IP 地址 (http://192.168.1.154:8080/crafy) 时,该站点出现,但我无法访问由我的 AppContextListener 初始化的数据库。但是,它没有初始化,因为找不到该类。

以下是我的应用程序特定 web.xml 的相关部分(位于 C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\crafy\WEB-INF\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" version="3.0">
  <display-name>crafy</display-name>
  <welcome-file-list>
    <welcome-file>home.jsp</welcome-file>
  </welcome-file-list>


    <servlet>
        <servlet-name>videoSession</servlet-name>
        <servlet-class>
            org.springframework.web.servlet.DispatcherServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>videoSession</servlet-name>
        <url-pattern>/videoSession.jsp</url-pattern>
        <url-pattern>/videoSession.html</url-pattern>
    </servlet-mapping>

    <resource-env-ref>
       <description>Transactions</description>
       <resource-env-ref-name>UserTransaction</resource-env-ref-name>
       <resource-env-ref-type>javax.transaction.UserTransaction</resource-env-ref-type>
    </resource-env-ref>

    <listener>
        <listener-class>com.crafy.controller.AppContextListener</listener-class>
    </listener>


</web-app>

AppContextListener.class 文件确实存在于: C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\crafy\WEB-INF\classes\com\crafy\controller

我已尝试检查并将路径更改为多个不同的内容,并尝试将 AppContextListener.class 文件移动到不同的位置,如Apache: Error configuring application listener 中所建议的那样。我还尝试在 Eclipse IDE 上删除服务器,再次创建它,然后按照同一链接中的建议再次导出到 WAR。那并没有解决任何问题。我还从 Eclipse 中的 Tomcat 服务器尝试了“Clean Tomcat Work Directory...”和“Clean...”(请参阅​​ ClassNotFoundException with ServletContextlistenerServletContextListener SEVERE: Error configuring application listener of class marktest.Config,它们都建议进行清理),然后再次导出到 war。我还尝试了这篇文章中的多个建议:SEVERE: Error configuring application listener of class org.apache.catalina.deploy.ApplicationListener。没有一个成功。

我知道正在访问特定于应用程序的 web.xml,因为如果我完全删除它,那么当我转到 URL 时,它会转到 index.jsp,而不是 web 中指定的 home.jsp。 xml。所以,我在标签中提供的类路径一定有问题,但是,我似乎已经尝试了一切,但仍然找不到。就像我说的,当我从 Eclipse 运行服务器时,一切正常。我尝试镜像与 Eclipse 使用的相同的文件夹结构。具体来说,Eclipse项目的文件夹结构是:

base/crafy/WebContent/WEB-INF/ ----> 包含 web.xml 并包含 jsp 和 lib 文件夹 基础/crafy/target/classes/com/crafy/controller ----> 包含 AppContextListener.class

但是,war文件部署到Tomcat时,文件夹结构是:

C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps/crafy/WEB-INF/ ----> 包含 web.xml 并包含 jsp 和 lib AND classes 文件夹,以便 AppContextListener.class 文件位于在 webapps/crafy/WEB-INF/classes/com/crunchify/controller 中

Eclipse 和直接部署到 Tomcat 时的相对位置略有不同,我尝试对其进行更改以使其等效,但似乎没有帮助。

我之前也在使用 Tomcat 7.0.68,它有同样的问题,这促使我将最新的 Tomcat 版本安装到 7.0.70,但这也产生了同样的问题。

有人对我如何进一步调试有任何建议吗?非常感激任何的帮助。我已经花了很多时间试图诊断这个问题,请帮助!

【问题讨论】:

  • 您已使用maven 标记此内容。您是否使用 maven 构建您的 WAR 文件?
  • 我创建 WAR 文件的方式是从 Eclipse 执行 File --> Export --> WAR File。我在 Eclipse 中使用 maven 进行 jar 文件/库管理,但这可能与手头的问题无关。原谅我,如果 maven 混淆了,我可以删除它作为标签。

标签: java eclipse tomcat tomcat7


【解决方案1】:

您能否检查是否在 webapps 位置(您的案例 WEB-INF/classes/com/crafy/controller/AppContextListener.class)中正确提取了类。

可能是部署时类没有正确提取到该位置。

【讨论】:

    【解决方案2】:

    在花费大量时间尝试使上述内容在 Tomcat 7.0 上运行之后,我没有成功。但是,我安装了 Tomcat 8.0(版本 8.0.36),并使用了与我在 Tomcat 7.0(不适用于 Tomcat 7.0)上相同的设置,并且它工作(在 8.0 )。然后将我的项目导出到 WAR 文件并将其移动到 Tomcat 8.0 webapps 文件夹后,它会立即调用 contextInitialized(),因为我一直在尝试使用 7.0。解决方法是简单地安装和使用 Tomcat 8 而不是 Tomcat 7。这仍然不能解释为什么 Tomcat 7.0 中使用的相同过程不起作用。我没有看到任何人回应我的查询的任何信件,解释了这种行为或本网站上的任何地方。如果除了使用 Tomcat 8.0 之外还有其他解决方案,请发布。否则,此解决方法对我有用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-14
      • 1970-01-01
      • 2012-12-23
      • 2014-08-22
      • 1970-01-01
      • 1970-01-01
      • 2023-03-03
      • 1970-01-01
      相关资源
      最近更新 更多