gpt4 book ai didi

java - 配置 AppContextListener 类的应用程序监听器时出错

转载 作者:行者123 更新时间:2023-11-28 23:24:54 26 4
gpt4 key购买 nike

我在 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 服务器”并单击“开始”)。另外,当我尝试使用 WAR 文件时出现上述错误。为了获取 WAR 文件,我从 Eclipse 导出(通过转到文件 -> 导出 -> WAR 文件)。然后我将 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 服务器尝试了“清理 Tomcat 工作目录...”和“清理...”(请参阅​​ 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/ ----> contains web.xml and contains jsp and lib folders base/crafy/target/classes/com/crafy/controller ----> contains AppContextListener.class

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

C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps/crafy/WEB-INF/ ----> contains web.xml and contains jsp and lib AND classes folders so that the AppContextListener.class file is located in webapps/crafy/WEB-INF/classes/com/crunchify/controller

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

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

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

最佳答案

在花费大量时间尝试让上述内容在 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 之外还有解决此问题的方法,请发帖。否则,此解决方法对我有用。

关于java - 配置 AppContextListener 类的应用程序监听器时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38557925/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com