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


87

używam spring 3.1.0.RELEASE , a moim kontenerem serwletów jest tomcat 7, a moim IDE jest eclipse indigo, a jar spring-webmvc-3.1.0.RELEASE.jar, który zawiera serwlet DispatcherServlet, istnieje w folderze lib, a kiedy uruchamiając aplikację, otrzymuję wyjątek:

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)

proszę doradzić, dlaczego otrzymuję ten wyjątek i jak go naprawić.

EDYCJA: poniżej znajdują się moje pliki konfiguracyjne:

1-. Ziarna wiosenne:

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

również przy próbie dostępu do dowolnej strony w aplikacji pojawia się wyjątek:

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

czy możesz opublikować swoje wiosenne pliki konfiguracyjne i powiedzieć nam, na jakim serwerze aplikacji ma on działać?
Gergely Szilagyi

@Gergely Szilagyi, zaktualizowałem pytanie.
Mahmoud Saleh

usunąłem moją odpowiedź, ponieważ nie była przydatna. przepraszam :(
Gergely Szilagyi

@iNan, używam eclipse indigo
Mahmoud Saleh,

1
Uważam, że nie jest to bezpośrednio CNF na DispatcherServlet, ale klasa zależna zgłosiła błąd. Sprawdź, czy widzisz inny zagnieżdżony wyjątek.
adarshr

Odpowiedzi:


248

Musisz dodać „Zależność Mavena” w zestawie wdrażania

  • kliknij prawym przyciskiem myszy swój projekt i wybierz właściwości.
  • kliknij Deployment Assembly.
  • kliknij dodaj
  • kliknij „Java Build Path Entries”
  • wybierz zależności Mavena "
  • kliknij Zakończ.

Przebuduj i wdróż ponownie

Uwaga: dotyczy to również projektów innych niż Maven .


Fajnie - byłem zdezorientowany, widząc, nawet po dodaniu odpowiedniej zależności w moim pom.xml nie rozwiązałem błędu, dopóki nie postępowałem zgodnie z powyższym ..
srinivas

Niezłe… idealne rozwiązanie
Prasad VS

1
Dlaczego to działa? Chodzi mi o to, czy nie powinny być dostępne wszystkie zależności maven? Gdybym używał wtyczki Tomcat7 z tomcat7: run, jak by to osiągnąć?
Johnny Bigoode

Działa jak urok!
yrazlik

Dotyczy to również projektów innych niż maven. !! Stworzyłem projekt maven i mam ten sam problem. to rozwiązanie zadziałało dla mnie.
Bandham Manikanta

33

Dwie możliwe odpowiedzi:

1- Nie włączyłeś do swojej biblioteki wiosennej fasoli i słoików z kontekstem wiosennym. Jeśli używasz mavena (co bardzo pomoże) te dwie linijki będą wystarczające

<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- Niezbędne słoiki znajdują się w twojej ścieżce klas, ale nie są rozmieszczone na tomcat.


Fajnie, że rozwiązałeś problem, ale nie sądzę, aby na podstawie twojego problemu można było zrozumieć, że używasz mavena.
Serkan Arıkuşu

1
maven jest oznaczony w pytaniu!
Mahmoud Saleh

3
dodanie spring-webmvcdo mojej pom.xmlwoli rozwiąże problem. Dzięki.
OO7

19

Cześć, miałem ten sam problem z Idea Intellij i Spring 4, naprawiłem problem i chciałem podzielić się z wami odpowiedzią.

Używam tomcat 7 / idea intellij 13 / spring 4

Zależności 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>

W idei Intellij musisz przejść do Plik -> Ustawienia projektu -> Artefakty. Następnie wprowadź opis obrazu tutaj

clean -> przebuduj projekt -> zbuduj artefakt i wszystko będzie dobrze ...


Jesteś geniuszem. Czy możesz wyjaśnić, jaką to robi różnicę? Dlaczego Maven importuje wszystko, ale nadal musisz to zrobić, aby działało?
DMurta

@DMurta kto powiedział, że maven eksportuje wszystko?
Adelin

12

To rozwiązuje problem za mnie. Jest to łatwe i dość prosto wyjaśnione.

Krok 1

  • Kliknij prawym przyciskiem myszy projekt
  • Kliknij Właściwości

Krok 2

  • Kliknij zakładkę Deployment Assembly w
  • Kliknij Dodaj ...

Krok 3

  • Kliknij pozycję Java Build Path Entries

Krok 4

  • Kliknij Zależności Mavena
  • Kliknij przycisk Zakończ

Krok 5

  • Ponownie wdróż aplikację Spring MVC na Tomcat
  • Uruchom ponownie Tomcat
  • Element listy

klasa nie znaleziono wyjątku


Czy mógłbyś ponownie rozważyć ocenę, jaką nadałeś mojej propozycji?
Lycone

10

stwierdziłem, że w zestawie wdrożeniowym był wpis:

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

usunąłem go i dodałem maven dependencieswpis i teraz działa dobrze.


5

Jeśli wszystkie te rady nie działają, należy ponownie utworzyć serwer (Tomcat lub podobny). To rozwiązało mój problem.


5

Uwzględnij poniższą zależność w swoim pom.xml

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

4

Miałem ten sam problem. Kiedy zobaczyłem folder .m2 repozytorium maven (.... m2 \ repository \ org \ springframework \ spring-webmvc) w moim lokalnym, znalazłem dwa foldery 3.2.0.RELEASE. Więc usunąłem jeden. Następnie przeszedłem do projektu, kliknij prawym przyciskiem myszy -> właściwości -> zestaw wdrożeniowy -> dodaj zależności mavena. czystą kompilację, a następnie zrestartuj serwer. Następnie załadowano DispatcherServlet.


Tak, to rozwiązało również mój problem. Masz jakiś pomysł, dlaczego wymagane jest dodanie zależności w zestawie wdrożeniowym w eclipse?
Freelancer

2

W moim przypadku mam ten problem po użyciu narzędzia projektu aktualizacji Mavena. Wypróbowałem wszystkie sugerowane obejścia, ale wydawało się, że nic nie działa. Ostatecznie rozwiązaniem było po prostu usunięcie projektu z serwera, aby upewnić się, że jest czysty, i dodanie go ponownie. Wtedy działa, mam nadzieję, że to rozwiązanie mogłoby pomóc każdemu z was.


2

Możesz użyć serwera GlassFish, a błąd zostanie rozwiązany. Próbowałem z tomcat7 i tomcat8, ale ten błąd pojawiał się ciągle, ale został rozwiązany przez GlassFish. Myślę, że to problem z serwerem.

Oto wyniki z tomcat7: Wyniki z tomcat7

Oto wyniki z GlassFish: Wyniki z GlassFish


1

kliknij prawym przyciskiem myszy swój projekt i wybierz właściwości. kliknij Zestaw wdrożeniowy. kliknij dodaj kliknij „Java Build Path Entries” wybierz Maven Dependencies ”kliknij Zakończ.


1

To może być przydatne dla kogoś, więc opublikuję to tutaj. Brakowało mi tej zależności od mojegopom.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. Przejdź do właściwości z projektu , który swoją roboczego
  2. Wybierz menu Deployment Assembly i kliknij przycisk Dodaj
  3. opt w pozycji ścieżce budowania Java i kliknij Maven współzależności
  4. Zbuduj projekt i uruchom

wprowadź opis obrazu tutaj


1
Nie mam opcji Maven Dependencies po kliknięciu pozycji Java Build Path Entries.
Muktadir Khan

nie wiedziałem, w jakim aspekcie zadajesz to pytanie. Spróbuj zadać nowe pytanie.
Lova Chittumuri

0

Rozwiązałem, wykonując następujące kroki:

  • Kliknij prawym przyciskiem myszy projekt> Konfiguruj> Konwertuj na projekt Maven
  • Po konwersji kliknij prawym przyciskiem myszy w projekcie> Maven> Aktualizuj projekt

Naprawia to ustawienia projektu „Deployment Assembly”.


0

Przenieś pliki jar ze swojej ścieżki klas do web-inf / lib i uruchom nowy serwer tomcat.


0

Znalazłem proste rozwiązanie, po prostu dodaj swoje słoiki do WEB-INF -> folder lib ..


0

Miałem ten sam problem w WebSphere, ale nie mogłem znaleźć rozwiązania, mimo że sprawdziłem, czy istnieją zależności Spring i działało w tomcat. W końcu odinstalowałem aplikację i nadal otrzymywałem błąd, więc myślę, że WebSphere zawiesił się na jakiejś uszkodzonej instancji.

Aby rozwiązać problem, musiałem ponownie zainstalować aplikację, zatrzymać ją, odinstalować, a następnie ponownie zainstalować.


0

Dla mnie to był błąd pom.xml- ustawiłem <scope>provided<scope>na swoich zależnościach, a to powodowało, że nie były kopiowane na mvn packageetapie.

Moimi symptomami był komunikat o błędzie wysłany przez OP i to, że pliki JAR nie zostały uwzględnione w ścieżce WEB-INF / lib wewnątrz pliku .war po uruchomieniu pakietu. Kiedy usunąłem lunetę, na wyjściu pojawiły się słoiki i teraz wszystko ładuje się dobrze.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.