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
Mahmoud Saleh
fuente
¿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 .

Krakos
fuente
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.

Serkan Arıkuşu
fuente
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 ...

Adelin
fuente
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

Lycone
fuente
¿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.

Mahmoud Saleh
fuente
5

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

Chinbold Gansukh
fuente
5

Incluya la siguiente dependencia en su pom.xml

<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
   <version>{spring-version}</version>
</dependency>
Víctor
fuente
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.

TKS
fuente
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.

usuario2947452
fuente
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

Excelente Saif
fuente
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.

Vishal Thakur
fuente
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>
luizfzs
fuente
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í

Lova Chittumuri
fuente
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.

León
fuente
0

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

ajai kumar
fuente
0

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

Karthik
fuente
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.

flip66
fuente
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.

Dan Rayson
fuente