当前位置: 首页 > 知识库问答 >
问题:

配置类AppContextListener的应用程序侦听器时出错

丌官博文
2023-03-14

我正在Windows 64位机器Java 7上运行Tomcat 7.0.70和Eclipse Kepler。当我从Eclipse运行我的软件时,它可以完美地工作,但只有在我将项目导出到WAR文件后,将项目部署到Tomcat时,我才会出现以下错误:

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

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

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 atlocalhost"并单击开始)。另外,我得到上述错误的地方是当我尝试使用WAR文件时。要获取WAR文件,我从Eclipse导出(通过转到File-

以下是我的应用程序特定网站的相关部分。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。类文件确实存在于:C:\Program Files\Apache Software Foundation\Tomcat 7.0\webapps\crafy\WEB-INF\classes\com\crafy\controller

我尝试过检查并更改中的路径,以实现多种不同的功能,并尝试过移动AppContextListener。类文件到不同的位置,如Apache中所建议的:配置应用程序侦听器时出错。我还尝试在EclipseIDE上删除服务器,再次创建它,然后按照同一链接中的建议再次导出到WAR。这并没有解决任何问题。我还试过“清理Tomcat工作目录…”还有“干净……”从Eclipse中的Tomcat服务器(请参阅ClassNotFoundException with ServletContextlistener和ServletContextlistener Severy:配置marktest.Config类的应用程序侦听器时出错,这建议进行两次清理),然后再次导出到war。我还尝试了本文中的多个建议:严重错误:配置org类的应用程序侦听器时出错。阿帕奇。卡塔琳娜。部署ApplicationListener。没有一个成功。

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

base/crafy/WebContent/WEB-INF/----

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

C:/Program Files/Apache Software Foundation/Tomcat 7.0/webapps/crafy/WEB-INF/----

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

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

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

共有2个答案

淳于飞鸾
2023-03-14

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

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

须峰
2023-03-14

在花了大量时间试图让上述内容在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之外还有其他解决方案,请发布。否则,这个变通方法对我来说很有效。

 类似资料:
  • 我在尝试运行应用程序时面临这个问题: 2014年5月13日1:35:26 PM org.apache.catalina.core.StandardContext listenerStart严重:配置类org.apache.catalina.deploy.applicationListener的应用程序侦听器时出错@6a5b20 java.lang.classnotfoundexception:co

  • 问题内容: 我如何设置应用程序范围的键侦听器(键盘快捷键),以便在按下组合键(例如+ + )时,将在Java应用程序中调用特定操作。 我知道可以设置菜单项的键盘快捷键,但就我而言,该应用程序没有菜单栏。 问题答案: 查看Java教程的“ 如何使用键绑定”部分。 您需要在组件的一个中创建并注册一个,并在应用程序的一个组件中注册一个(, Action Name )对。假设您没有,则可以在应用程序中向顶

  • 问题内容: 我的应用程序中有一个通知表的Firebase 事件侦听器,当该应用程序在后台时,我想触发推送通知。 这是监听器: 当应用程序位于前台时,这非常有用。然后,在我的应用程序委托方法中添加一个后台观察器,以在后台对其进行观察: 但是当应用程序在后台运行时,事件观察器不会触发。Ive调查了Firebase Cloud Messenger以解决此问题,并遇到了类似这样的帖子: 是否可以使用Fir

  • 我有一个关于正确配置kafka侦听器属性的问题-侦听器和advertised.listers。 在我的配置中,我设置了以下道具: 客户端使用 进行连接。我是否需要在侦听器和广告侦听器中具有相同的值。这里 是指向运行 kafka 代理的主机的 dns 记录。 在什么情况下,我希望它们保持不变和不同? 谢谢!

  • 要运行Kafka,需要在文件。有两种设置我不理解。 有人可以解释侦听器和广告侦听器属性之间的区别吗? 留档说: 侦听器:套接字服务器侦听的地址。 和 advertised.listeners:主机名和端口代理将向生产者和消费者做广告。 我什么时候必须使用哪个设置?

  • 嘿,当我运行应用程序时,它会给出一个错误java.lang.IllegalArgumentException:Invalid listener:null,这说明侦听器是空的。我是初学者,所以请大家帮忙解决这个问题。在这一行中出现错误:LocationManager.RequestLocationUpdates(provider,2000,0,locationListener);//这里是我的示例代