2016-07-24 28 views
0

Ich verwende Tomcat 7.0.70 und Eclipse Kepler auf einer Windows 64 Bit-Maschine, Java 7. Meine Software funktioniert einwandfrei, wenn ich sie aus Eclipse starte, aber ich erhalte den folgenden Fehler nur wenn ich implementieren mein Projekt Tomcat, nach meinem Projekt in eine WAR-Datei zu exportieren:Fehler beim Konfigurieren des Anwendungs-Listeners der Klasse AppContextListener

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

AppContextListener meine eigene Datei, die ServletContextListener implementiert. Hier ist ein Teil der Datei, von denen mir alles außer contextInitialized entfernt(), und dort, ich entfernt alles, außer für eine print-Anweisung (contextInitialized() wird nicht aufgerufen zu werden):

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."); 

    } 



} 

Als ich Führen Sie es aus Eclipse aus, die gesamte Anwendung funktioniert einwandfrei (klicken Sie mit der rechten Maustaste auf "Tomcat v7.0 Server at localhost" und klicken Sie auf Start). Wenn ich versuche, die WAR-Datei zu verwenden, wird der obige Fehler separat angezeigt. Um die WAR-Datei zu erhalten, habe ich aus Eclipse exportiert (indem ich zu Datei -> Export -> WAR-Datei gehe). Ich habe dann die WAR-Datei in den folgenden Ordner gestellt: C: \ Programme \ Apache Software Foundation \ Tomcat 7.0 \ webapps. Wenn ich zur IP-Adresse gehe (http://192.168.1.154:8080/crafy), erscheint die Seite, aber ich kann nicht auf die Datenbank zugreifen, die von meinem AppContextListener initialisiert wird. Es wird jedoch nicht initialisiert, da die Klasse nicht gefunden wird.

Hier sind die relevanten Teile meiner anwendungsspezifischen web.xml (im Verzeichnis C: \ Programme \ 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> 

Die AppContextListener.class Datei auf existiert: C: \ Programme \ Apache Software Foundation \ Tomcat 7.0 \ webapps \ crafy \ WEB-INF \ classes \ com \ crafy \ Controller

ich habe versucht, überprüfen und ändern Der Pfad in der zu mehreren verschiedenen Dingen und haben versucht, die AppContextListener.class-Datei an verschiedenen Orten zu verschieben, wie invorgeschlagen. Ich habe auch versucht, den Server in der Eclipse-IDE zu löschen, indem ich ihn erneut erstellte, und dann wieder zu WAR, wie in demselben Link vorgeschlagen. Das hat nichts gelöst. Ich habe auch "Clean Tomcat Work Directory ..." und "Clean ..." vom Tomcat-Server in Eclipse ausprobiert (siehe ClassNotFoundException with ServletContextlistener und ServletContextListener SEVERE: Error configuring application listener of class marktest.Config, der beide Bereinigungen vorschlägt) und dann wieder in den Krieg exportiert. Ich habe auch die mehreren Vorschläge in diesem Beitrag ausprobiert: SEVERE: Error configuring application listener of class org.apache.catalina.deploy.ApplicationListener. Keine war erfolgreich.

Ich weiß, dass auf anwendungsspezifische web.xml zugegriffen wird, denn wenn ich es vollständig entferne, dann wenn ich auf die URL gehe, geht es zu der index.jsp im Gegensatz zu der home.jsp wie im Web angegeben .xml. Es muss also etwas mit dem Klassenpfad, den ich im Tag bereitstelle, nicht stimmen, aber ich habe anscheinend alles versucht, kann es aber immer noch nicht finden. Wie gesagt, alles funktioniert gut, wenn ich den Server von Eclipse aus starte. Ich habe versucht, die gleiche Ordnerstruktur wie Eclipse zu spiegeln. Insbesondere ist die Ordnerstruktur für das Eclipse-Projekt:

base/crafy/webcontent/WEB-INF/----> enthält web.xml und enthält jsp und lib Ordner base/crafy/target/classes/com/crafy/Controller ----> AppContextListener.class

Allerdings enthält, als der Krieg-Datei Tomcat bereitgestellt wird, die Ordnerstruktur ist:

C:/Programme/Apache Software Foundation/Tomcat 7.0/webapps/crafy/WEB-INF/----> enthält web.xml und enthält die Ordner jsp und lib AND classes, so dass der AppContextListener.Klassendatei in webapps/crafy/WEB-INF/classes/com/crunchify/Controller

Die relativen Positionen sind leicht unterschiedlich zwischen Eclipse-befindet und wenn sie direkt auf Tomcat bereitgestellt, die ich versucht habe, um Änderungen vorzunehmen, um sie gleichwertig, aber es schien nicht zu helfen.

Ich war auch zuvor mit Tomcat 7.0.68, die die gleichen Probleme hatte, die mich aufgefordert, die neueste Tomcat-Version auf 7.0.70 zu installieren, aber das hat auch das gleiche genaue Problem ergeben.

Hat jemand irgendwelche Vorschläge, wie ich das weiter debuggen kann? Jede Hilfe würde sehr geschätzt werden. Ich habe viele Stunden damit verbracht, dieses Problem zu diagnostizieren, bitte helfen Sie !!

+0

Sie haben dies mit 'maven' getaggt. Verwenden Sie Maven, um Ihre WAR-Datei zu erstellen? –

+0

Die Art und Weise, wie ich die WAR-Datei erstellt habe, war: Datei -> Exportieren -> WAR-Datei aus Eclipse. Ich benutze Maven für JAR-Datei/Bibliotheksverwaltung in Eclipse, aber dies ist möglicherweise nicht relevant für das vorliegende Problem. Verzeih mir, ich kann Maven als Tag entfernen, wenn es Dinge verwirrt. – user2797422

Antwort

0

Nachdem ich eine beträchtliche Zeit damit verbracht habe, die oben genannten Funktionen auf Tomcat 7.0 zu verwenden, war ich nicht erfolgreich. Allerdings habe ich Tomcat 8.0 (Version 8.0.36) installiert und das genaue gleiche Setup verwendet, wie ich auf Tomcat 7.0 (das nicht für Tomcat 7.0 funktionierte), und es funktionierte (auf 8.0). Dann, nachdem ich mein Projekt in eine WAR-Datei exportiert und in den Tomcat 8.0 webapps-Ordner verschoben hatte, rief es sofort contextInitialized() an, nachdem ich versucht hatte, mit 7.0 zu arbeiten. Die Problemumgehung bestand lediglich darin, Tomcat 8 anstelle von Tomcat 7 zu installieren und zu verwenden. Dies erklärt immer noch nicht, warum das in Tomcat 7.0 verwendete Verfahren nicht funktioniert. Ich habe keine Korrespondenz von irgendjemandem als Antwort auf meine Anfrage gesehen, die dieses Verhalten oder irgendwo auf dieser Website erklärt. Wenn es eine andere Lösung als Tomcat 8.0 gibt, bitte posten. Ansonsten funktioniert diese Problemumgehung für mich.