2011-10-21 21 views
6

me sale una excepción cada vez que intento conseguir parámetro de contexto de we.XML en una clase ServletContextListener, estoy realmente tener tiempos difíciles entender por qué no está funcionando, aquí es la excepción en 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) 

Aquí hay una parte de mi 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> 

Aquí es mi 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

su oyente? –

Respuesta

7

Intente borrar el directorio de trabajo de tomcat y limpiar. Después de eso, publique su proyecto y vuelva a ejecutarlo.

+0

Lo hice como me dijiste, eliminé el archivo de contexto de \ Apache Tomcat 7.0.11 \ conf y ejecuté mi webApp de nuevo, y funcionó perfectamente, gracias un millón. – Rehme

5

Supongo que ha empaquetado el jar servlet-api en su carpeta web (en la carpeta WEB-INF/lib) y esto está causando conflictos ya que el servlet-api ya estará presente en el contenedor. Asegúrese de no incluir ningún jap en servlet-api o jsp-api (o Java api) en su aplicación web cuando la implemente.

+0

Aún no creé ninguna página servlet o jsp, ¿es esto lo que quiso decir? Estoy pensando en crear un servlet para poder obtener el atributo ServletContext y luego recuperar las instancias de cat. – Rehme

+0

@RealSilhouette no, eso no es lo que quise decir. La compilación final que está implementando en tomcat, ¿incluye algún archivo jar en el directorio WEB-INF/lib llamado algo como servlet-api.jar o jsp-api.jar? Si es así, no está empaquetando su guerra correctamente ya que esos jarrones ya existen en el contenedor de Tomcat, lo que causa conflictos. ¿Cómo estás construyendo? Maven? A través del IDE? – pap

+0

¿Dónde hay un conflicto? Dice que la clase de oyente no se encuentra (suponiendo que mi teléfono muestre todo correctamente :( –

1

que tenían el mismo problema al ejecutar JUnit en un entorno Tomcat 7 y lo solucioné añadiendo una dependencia de Maven (pom.xml) así:

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

que tenían el mismo problema cuando he intentado con Eclipse Versión LUNA y tomcat 7. El mismo código sin ningún cambio adicional funcionó en eclipse JUNO con tomcat 7.

0

Verifique el espacio en el disco. Cuando eclipse copie la carpeta libs si no hay espacio en el disco, este error puede ocurrir

1

Si está trabajando en Eclipse, simplemente limpie su proyecto.

siga este sencillo paso, Ir al proyecto> limpia ...> limpia todos los proyectos> Ok está seguro de que se está desplegando

Cuestiones relacionadas