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


87

sto usando la primavera 3.1.0.RELEASE e il mio contenitore servlet è tomcat 7 e il mio IDE è eclipse indigo e il jar spring-webmvc-3.1.0.RELEASE.jar che contiene DispatcherServlet esiste nella cartella lib, eppure quando eseguendo l'applicazione, ottengo l'eccezione:

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)

si prega di avvisare perché ricevo questa eccezione e come risolverla.

EDIT: i seguenti sono i miei file di configurazione:

1- .springBeans:

<?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- checkout-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>

anche quando provo ad accedere a qualsiasi pagina nell'applicazione, ottengo l'eccezione:

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

puoi pubblicare i tuoi file di configurazione primaverili e dirci su quale app-server dovrebbe funzionare?
Gergely Szilagyi

@Gergely Szilagyi, ho aggiornato la domanda.
Mahmoud Saleh,

ha cancellato la mia risposta, perché non era utile. scusa :(
Gergely Szilagyi

@iNan, sto usando eclipse indigo
Mahmoud Saleh,

1
Credo che non sia direttamente un CNF su DispatcherServlet ma una classe dipendente ha generato un errore. Controlla se vedi altre eccezioni nidificate.
adarshr

Risposte:


248

È necessario aggiungere la "dipendenza Maven" nell'assembly di distribuzione

  • fare clic con il tasto destro sul progetto e scegliere le proprietà.
  • fare clic su Deployment Assembly.
  • fare clic su aggiungi
  • fare clic su "Java Build Path Entries"
  • seleziona Maven Dependencies "
  • fare clic su Fine.

Ricostruisci e distribuisci di nuovo

Nota: questo è applicabile anche per progetti non esperti .


Bello - Ero confuso da vedere anche dopo aver aggiunto la corretta dipendenza nel mio pom.xml non ha risolto l'errore fino a quando non ho seguito come sopra ..
srinivas

Bella .. soluzione perfetta
Prasad VS

1
Perché funziona? Voglio dire, non dovrebbero essere disponibili tutte le dipendenze di Maven? Se stavo usando il collegamento Tomcat7 con tomcat7: run, come sarebbe stato realizzato?
Johnny Bigoode

Funziona come un fascino!
yrazlik

Questo è applicabile anche per progetti non esperti. !! Ho creato un progetto Maven e ho avuto lo stesso problema. questa soluzione ha funzionato per me.
Bandham Manikanta

33

Due possibili risposte:

1- Non hai incluso spring-bean e spring-context jars nella tua libreria. Se stai usando Maven (che ti aiuterà molto) quelle due righe saranno sufficienti

<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- I jar necessari sono nel tuo classpath ma non sono distribuiti su tomcat.


Bello che tu abbia risolto il problema, ma non credo che si possa capire dal tuo problema che stai usando Maven.
Serkan Arıkuşu

1
maven è taggato nella domanda!
Mahmoud Saleh

3
aggiungendo spring-webmvcalla mia pom.xmlvolontà risolverà il problema. Grazie.
OO7

19

Ciao ragazzi ho avuto lo stesso problema con Idea Intellij e Spring 4 Ho risolto il problema e volevo condividere la risposta con voi.

Uso tomcat 7 / idea intellij 13 / spring 4

dipendenze 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>

In idea Intellij devi andare su File -> Impostazioni progetto -> Artefatti. Poi inserisci qui la descrizione dell'immagine

clean -> ricostruisci il progetto -> costruisci l'artefatto e tutto andrà bene ...


Sei un genio. Potresti spiegare che differenza fa? Come mai Maven importa tutto, ma devi ancora farlo perché funzioni?
DMurta

@DMurta chi ha detto che Maven esporta tutto?
Adelin

12

Questo risolve il problema per me. È facile e spiegato in modo abbastanza semplice.

Passo 1

  • Fare clic con il tasto destro sul progetto
  • Fare clic su Proprietà

Passo 2

  • Fare clic sulla scheda Assembly di distribuzione nel file
  • Fare clic su Aggiungi ...

Passaggio 3

  • Fare clic su Java Build Path Entries

Passaggio 4

  • Fare clic su Dipendenze Maven
  • Fare clic sul pulsante Fine

Passaggio 5

  • Ridistribuire nuovamente l'applicazione Spring MVC su Tomcat
  • Riavvia Tomcat
  • Voce di elenco

classnotfoundexception


Riconsidereresti il ​​voto che hai dato alla mia proposta?
Lycone

10

ho scoperto che nell'assembly di distribuzione c'era la voce:

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

l'ho rimosso e ho aggiunto la maven dependenciesvoce e ora funziona bene.


5

Se tutti questi consigli non funzionano, dovresti ricreare il tuo server (Tomcat o simile). Questo ha risolto il mio problema.


5

Includi sotto la dipendenza nel tuo pom.xml

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

4

Stavo affrontando lo stesso problema. Quando ho visto nella cartella .m2 del repository di Maven (.... m2 \ repository \ org \ springframework \ spring-webmvc) nel mio locale ho trovato due cartelle 3.2.0.RELEASE. COSÌ ne ho rimosso uno. Quindi sono andato al progetto, fai clic con il tasto destro del mouse-> proprietà-> installazione di distribuzione-> aggiungi dipendenze maven. build pulita e quindi riavviare il server. Quindi il DispatcherServlet è stato caricato.


Sì, questo ha risolto anche il mio problema, qualche idea del perché è necessario aggiungere dipendenze nell'assembly di distribuzione in eclipse?
Freelancer

2

Nel mio caso ottengo questo problema dopo aver utilizzato l'utilità di aggiornamento del progetto di Maven. Ho provato tutte le soluzioni alternative che hai suggerito, ma niente sembrava funzionare. Alla fine la soluzione era semplicemente rimuovere il progetto dal server per assicurarsi che fosse pulito e aggiungerlo di nuovo. Allora funziona, spero che questa soluzione possa aiutare qualcuno di voi.


2

Puoi utilizzare il server GlassFish e l'errore verrà risolto. Ho provato con tomcat7 e tomcat8 ma questo errore veniva continuamente ma è stato risolto con GlassFish. Penso che sia un problema con il server.

Questi sono i risultati con tomcat7: Risultati con tomcat7

Ecco i risultati con GlassFish: Risultati con GlassFish


1

fare clic con il tasto destro sul progetto e scegliere le proprietà. fare clic su Deployement Assembly. fare clic su aggiungere fare clic su "Java Build Path Entries" selezionare Dipendenze Maven "fare clic su Fine.


1

Potrebbe essere utile per qualcuno, quindi lo posterò qui. Mi mancava questa dipendenza dal miopom.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. Vai alle proprietà del progetto su cui stai lavorando
  2. Scegliere il menu Assembly di distribuzione e fare clic sul pulsante Aggiungi
  3. optare per le voci del percorso di build Java e fare clic su Dipendenze di Maven
  4. Costruisci il progetto ed esegui

inserisci qui la descrizione dell'immagine


1
Non ho l'opzione Maven Dependencies quando faccio clic su Java Build Path Entries.
Muktadir Khan

Non sapevo in quale aspetto stai facendo questa domanda. Prova a pubblicare una nuova domanda.
Lova Chittumuri

0

Ho risolto seguendo questi passaggi:

  • Fare clic con il tasto destro nel progetto> Configura> Converti in progetto Maven
  • Dopo la conversione, fare clic con il pulsante destro del mouse nel progetto> Maven> Aggiorna progetto

Ciò risolve le impostazioni di "Deployment Assembly" del progetto.


0

Sposta i file jar dal tuo classpath a web-inf / lib ed esegui un nuovo server tomcat.


0

Ho trovato una soluzione semplice, aggiungi semplicemente i tuoi vasi all'interno della cartella WEB-INF -> lib ..


0

Ho riscontrato lo stesso problema in WebSphere, ma non sono riuscito a trovare una soluzione anche se ho verificato che le dipendenze di Spring erano presenti e funzionava perfettamente in Tomcat. Ho finito per disinstallare l'applicazione e stavo ancora ricevendo l'errore, quindi penso che WebSphere si stesse aggrappando a qualche istanza danneggiata.

Per risolvere il problema ho dovuto reinstallare l'applicazione, interromperla, disinstallarla e quindi reinstallarla.


0

Per me è stato un errore nel pom.xml- mi ero impostato <scope>provided<scope>sulle mie dipendenze, e questo significava che non venivano copiate durante la mvn packagefase.

I miei sintomi erano il messaggio di errore pubblicato dall'OP e che i jar non erano inclusi nel percorso WEB-INF / lib all'interno di .war dopo che il pacchetto era stato eseguito. Quando ho rimosso l'oscilloscopio, i barattoli sono apparsi nell'output e ora si carica tutto bene.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.