2011-10-21 15 views
6

ottengo un'eccezione ogni volta che provo ottenere parametro di contesto da we.XML in una classe ServletContextListener, sto davvero avendo tempi duri capire perché non funziona, ecco l'eccezione in Apache Tomcat 7.0.11 registro:ClassNotFoundException con ServletContextListener

Oct 21, 2011 1:24:23 PM org.apache.catalina.core.StandardContext listenerStart 
SEVERE: Error configuring application listener of class alaa.ServletContextListener 
java.lang.ClassNotFoundException: alaa.ServletContextListener 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676) 
at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521) 
at 
    org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:415) 
at  

at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:118) 
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4618) 
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5184) 
at org.apache.catalina.core.StandardContext$1.call(StandardContext.java:5179) 
at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) 
at java.util.concurrent.FutureTask.run(FutureTask.java:138) 
at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) 
at java.lang.Thread.run(Thread.java:662) 

Ecco una parte del mio web.xml:

<context-param> 
    <param-name>catName</param-name> 
    <param-value>meshmesh</param-value> 
</context-param> 
<context-param> 
    <param-name>catBreed</param-name> 
    <param-value>egyptian</param-value> 
</context-param> 
<listener> 
    <listener-class>alaa.CatLisenter</listener-class> 
</listener> 
<session-config> 
     <session-timeout> 
     30 
     </session-timeout> 
</session-config> 

Ecco la mia ServletContextListener.java:

package alaa; 
import javax.servlet.ServletContext; 
import javax.servlet.ServletContextEvent; 
import javax.servlet.ServletContextListener; 
public class CatLisenter implements ServletContextListener { 

@Override 
public void contextInitialized(ServletContextEvent sce) { 
    ServletContext sc = sce.getServletContext(); 
    String name = sc.getInitParameter("catName"); 

    String breed = sc.getInitParameter("catBreed"); 

    Cat maCat = new Cat(); 
    maCat.setName(name); 
    maCat.setBreed(breed); 

    sc.setAttribute("cat", maCat); 
} 

@Override 
public void contextDestroyed(ServletContextEvent sce) { 
    throw new UnsupportedOperationException("Not supported yet."); 
} 
} 



Here's Cat.java : 





package alaa; 

public class Cat { 
private String name; 
private String breed; 


public String getName() { 
    return name; 
} 

public void setName(String name) { 
    this.name = name; 
} 

public String getBreed() { 
    return breed; 
} 


public void setBreed(String breed) { 
    this.breed = breed; 
} 
} 

many thanks 
+0

Sei sicuro il vostro ascoltatore viene distribuito? –

risposta

7

Provare a cancellare la directory di lavoro di Tomcat e pulire. Successivamente, pubblica il tuo progetto ed esegui di nuovo.

+0

Ho fatto come mi hai detto, file di contesto cancellato da \ Apache Tomcat 7.0.11 \ conf e ha eseguito di nuovo la mia web app, e ha funzionato perfettamente, grazie a milioni. – Rehme

5

La mia ipotesi è che si è impacchettato il vaso API-servlet nella propria webapp (nella cartella WEB-INF/lib) e questo sta causando conflitti poiché il servlet-api sarà già presente nel contenitore. Assicurati di non includere giare servlet-api o jsp-api (o Java EE api) nella tua webapp quando lo distribuisci.

+0

Non ho ancora creato alcuna pagina servlet o jsp, è questo che intendevi? Sto cercando di creare un servlet in modo da ottenere l'attributo ServletContext e recuperare le istanze cat. – Rehme

+0

@RealSilhouette no, non è quello che intendevo. La build finale che stai distribuendo a tomcat, include qualsiasi file jar nella directory WEB-INF/lib chiamato qualcosa come servlet-api.jar o jsp-api.jar? Se è così, non stai impacchettando correttamente la tua guerra dato che questi vasi esistono già nel contenitore del tomcat, causando conflitti. Come stai costruendo? Maven? Attraverso l'IDE? – pap

+0

Dove c'è un conflitto? Dice che la classe ascoltatrice non viene trovata (supponendo che il mio telefono visualizzi tutto correttamente :( –

1

Ho avuto lo stesso problema esecuzione JUnit in un ambiente Tomcat 7 e ho risolto aggiungendo una dipendenza in maven (pom.xml) come questo:

<dependency> 
     <groupId>org.apache.tomcat</groupId> 
     <artifactId>tomcat-servlet-api</artifactId> 
     <version>7.0.54</version> 
     <scope>provided</scope> 
    </dependency> 
0

Ho avuto lo stesso problema quando ho provato con Eclipse Versione LUNA e tomcat 7. Lo stesso codice senza modifiche aggiuntive ha funzionato in eclissi JUNO con tomcat 7.

0

Verificare lo spazio nel disco. Quando eclipse copia la cartella libs se non lo spazio nel disco questo errore può verificarsi

1

Se si sta lavorando in Eclipse, quindi basta pulire il progetto.

Segui questo semplice passaggio, Vai al progetto> pulita ...> pulita tutti i progetti> Ok

Problemi correlati