java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet


87

estoy usando spring 3.1.0.RELEASE , y mi contenedor de servlet es tomcat 7 y mi IDE es eclipse indigo y el jar spring-webmvc-3.1.0.RELEASE.jar que contiene el DispatcherServlet existe en la carpeta lib, y aún cuando ejecutando la aplicación, obtengo la excepción:

java.lang.ClassNotFoundException: org.springframework.web.servlet.DispatcherServlet
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1523)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:525)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:507)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:126)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1099)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:1043)
    at org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:4957)
    at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5284)
    at org.apache.catalina.core.StandardContext$3.call(StandardContext.java:5279)
    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)

Indique por qué recibo esta excepción y cómo solucionarlo.

EDITAR: los siguientes son mis archivos de configuración:

1- Frijoles de primavera:

<?xml version="1.0" encoding="UTF-8"?>
<beansProjectDescription>
    <version>1</version>
    <pluginVersion><![CDATA[2.9.0.201203011806-RELEASE]]></pluginVersion>
    <configSuffixes>
        <configSuffix><![CDATA[xml]]></configSuffix>
    </configSuffixes>
    <enableImports><![CDATA[false]]></enableImports>
    <configs>
        <config>src/main/webapp/WEB-INF/checkout-servlet.xml</config>
    </configs>
    <configSets>
    </configSets>
</beansProjectDescription>

2- web.xml:

<web-app>
  <display-name>Checkout</display-name>

  <servlet>
    <servlet-name>checkout</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
  </servlet>

  <servlet-mapping>
    <servlet-name>checkout</servlet-name>
    <url-pattern>*.action</url-pattern>
  </servlet-mapping>

</web-app>

3- pago-servlet.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns:context="http://www.springframework.org/schema/context"
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
        http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.1.xsd">

    <context:component-scan base-package="com.myapp"/>

    <bean id="myService" class="com.myapp.MyService"/>

</beans>

también cuando intento acceder a cualquier página de la aplicación, obtengo la excepción:

HTTP Status 404 - Servlet checkout is not available

type Status report

message Servlet checkout is not available

description The requested resource (Servlet checkout is not available) is not available.
Apache Tomcat/7.0.22

¿Puede publicar sus archivos de configuración de primavera y decirnos en qué servidor de aplicaciones se supone que debe ejecutarse?
Gergely Szilagyi

@Gergely Szilagyi, actualicé la pregunta.
Mahmoud Saleh

borré mi respuesta, porque no era útil. lo siento :(
Gergely Szilagyi

@iNan, estoy usando eclipse indigo
Mahmoud Saleh

1
Creo que no es directamente un CNF en DispatcherServlet, pero una clase dependiente ha arrojado un error. Compruebe si ve alguna otra excepción anidada.
adarshr

Respuestas:


248

Debe agregar la "Dependencia de Maven" en el ensamblado de implementación

  • haga clic derecho en su proyecto y elija propiedades.
  • haga clic en Deployment Assembly.
  • haga clic en agregar
  • haga clic en "Entradas de ruta de compilación Java"
  • seleccione Dependencias de Maven "
  • haga clic en Finalizar.

Reconstruir y desplegar de nuevo

Nota: Esto también se aplica a proyectos no maven .


Agradable - Estaba confundido para ver incluso después de agregar la dependencia adecuada en mi pom.xml no resolvió el error hasta que seguí como se
indica

Agradable ... solución perfecta
Prasad VS

1
¿Por qué funciona esto? Quiero decir, ¿no deberían estar disponibles todas las dependencias de maven? Si estuviera usando la conexión de Tomcat7 con tomcat7: run, ¿cómo se lograría esto?
Johnny Bigoode

¡Funciona a las mil maravillas!
yrazlik

Esto también es aplicable para proyectos no expertos. !! Creé un proyecto maven y tuve el mismo problema. esta solución funcionó para mí.
Bandham Manikanta

33

Dos posibles respuestas:

1- No incluyó spring-beans y spring-context jars en su lib. Si está usando maven (lo que ayudará mucho) esas dos líneas serán suficientes

<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-context</artifactId>
   <version>3.1.0.RELEASE</version>
</dependency>
<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
   <version>3.1.0.RELEASE</version>
</dependency>

2- Los archivos jar necesarios están en su classpath pero no están implementados en tomcat.


Es bueno que haya resuelto el problema, pero no creo que se pueda entender a partir de su problema que está utilizando maven.
Serkan Arıkuşu

1
maven está etiquetado en la pregunta!
Mahmoud Saleh

3
agregar spring-webmvca mi pom.xmlresolverá el problema. Gracias.
OO7

19

Hola chicos, tuve el mismo problema con Idea Intellij y Spring 4. Solucioné el problema y quería compartir la respuesta con ustedes.

Yo uso tomcat 7 / idea intellij 13 / spring 4

dependencias pom.xml

  <properties>
    <spring.version>4.0.5.RELEASE</spring.version>
  </properties>

  <dependencies>     
    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-core</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
enter code here
      <groupId>org.springframework</groupId>
      <artifactId>spring-context</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-jdbc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-web</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-webmvc</artifactId>
      <version>${spring.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework</groupId>
      <artifactId>spring-test</artifactId>
      <version>${spring.version}</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.slf4j</groupId>
      <artifactId>slf4j-log4j12</artifactId>
      <version>1.7.2</version>
    </dependency>
        <dependency>
      <groupId>commons-dbcp</groupId>
      <artifactId>commons-dbcp</artifactId>
      <version>1.4</version>
    </dependency>
  </dependencies>

En idea Intellij, debe ir a Archivo -> Configuración del proyecto -> Artefactos. Entonces ingrese la descripción de la imagen aquí

limpiar -> reconstruir el proyecto -> construir el artefacto y todo estará bien ...


Eres un genio. ¿Podrías explicar qué diferencia hace? ¿Cómo es que Maven importa todo, pero aún necesitas hacerlo para que funcione?
DMurta

@DMurta ¿quién dijo que maven exporta todo?
Adelin

12

Esto me resuelve el problema. Es fácil y se explica de forma bastante sencilla.

Paso 1

  • Haga clic derecho en el proyecto
  • Haga clic en Propiedades

Paso 2

  • Haga clic en la pestaña Ensamblaje de implementación en el
  • Haga clic en Agregar ...

Paso 3

  • Haga clic en Entradas de ruta de compilación Java

Paso 4

  • Haga clic en Dependencias de Maven
  • Haga clic en el botón Finalizar

Paso 5

  • Vuelva a implementar la aplicación Spring MVC en Tomcat nuevamente
  • Reiniciar Tomcat
  • Elemento de lista

classnotfoundexception


¿Reconsideraría la calificación que le dio a mi propuesta?
Lycone

10

Encontré que en el ensamblaje de implementación , estaba la entrada:

[persisted container] org.maven.ide.eclipse.maven2_classpath_container

Lo eliminé y agregué la maven dependenciesentrada, y ahora funciona bien.


5

Si todos estos consejos no funcionan, debería volver a crear su servidor (Tomcat o similar). Eso resolvió mi problema.


5

Incluya la siguiente dependencia en su pom.xml

<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
   <version>{spring-version}</version>
</dependency>

4

Estaba enfrentando el mismo problema. Cuando vi en la carpeta .m2 del repositorio de maven (.... m2 \ repository \ org \ springframework \ spring-webmvc) en mi local, encontré dos carpetas 3.2.0.RELEASE. Así que eliminé uno. Luego fui al proyecto, haga clic derecho-> propiedades-> essembly de implementación-> agregar dependencias maven. clean build y luego reinicie el servidor. Entonces se cargó el DispatcherServlet.


Sí, esto también resolvió mi problema, ¿alguna idea de por qué es necesario agregar dependencias en el ensamblaje de implementación en eclipse?
Freelancer

2

En mi caso, tengo este problema después de usar la utilidad del proyecto de actualización de maven. Probé todas las soluciones alternativas que sugirió, pero nada pareció funcionar. Al final, la solución fue simplemente eliminar el proyecto del servidor para asegurarse de que estaba limpio y agregarlo nuevamente. Entonces funciona, espero que esta solución pueda ayudar a alguno de ustedes.


2

Puede utilizar el servidor GlassFish y se resolverá el error. Intenté con tomcat7 y tomcat8 pero este error venía continuamente, pero se resolvió con GlassFish. Creo que es un problema con el servidor.

Estos son los resultados con tomcat7: Resultados con tomcat7

Estos son los resultados con GlassFish: Resultados con GlassFish


1

haga clic derecho en su proyecto y elija propiedades. haga clic en Deployement Assembly. haga clic en agregar haga clic en "Entradas de ruta de compilación Java" seleccione Dependencias de Maven "haga clic en Finalizar.


1

Puede ser útil para alguien, así que lo publicaré aquí. Me faltaba esta dependencia de mipom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

1
  1. Vaya a las propiedades del proyecto en el que está trabajando
  2. Elija el menú Ensamblaje de implementación y haga clic en el botón Agregar
  3. opte por las entradas de la ruta de compilación de Java y haga clic en Dependencias de Maven
  4. Construya el proyecto y ejecútelo

ingrese la descripción de la imagen aquí


1
No tengo la opción Maven Dependencies cuando hago clic en Java Build Path Entries.
Muktadir Khan

No supe en qué aspecto estás haciendo esta pregunta. Intente publicar una nueva pregunta.
Lova Chittumuri

0

Lo resolví siguiendo estos pasos:

  • Haga clic derecho en el proyecto> Configurar> Convertir a proyecto Maven
  • Después de la conversión, haga clic derecho en el proyecto> Maven> Actualizar proyecto

Esto corrige la configuración de "Ensamblado de implementación" del proyecto.


0

Mueva los archivos jar de su classpath a web-inf / lib y ejecute un nuevo servidor Tomcat.


0

Encontré una solución simple, simplemente agregue sus frascos dentro de WEB-INF -> carpeta lib ..


0

Tuve este mismo problema en WebSphere, pero no pude encontrar una solución a pesar de que verifiqué que las dependencias de Spring estaban allí y se ejecutó bien en Tomcat. Terminé desinstalando la aplicación y todavía recibía el error, así que creo que WebSphere estaba colgando de alguna instancia corrupta.

Para solucionar el problema, tuve que reinstalar la aplicación, detenerla, desinstalarla y luego reinstalarla.


0

Para mí fue un error en el pom.xml- yo establecí <scope>provided<scope>mis dependencias, y esto hizo que no se copiaran durante la mvn packageetapa.

Mis síntomas fueron el mensaje de error que publicó el OP y que los frascos no se incluyeron en la ruta WEB-INF / lib dentro del .war después de ejecutar el paquete. Cuando quité el alcance, los frascos aparecieron en la salida y ahora todo se carga bien.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.