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
Mahmoud Saleh
źródło
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 .

krakos
źródło
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.

Serkan Arıkuşu
źródło
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 ...

Adelin
źródło
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

Lycone
źródło
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.

Mahmoud Saleh
źródło
5

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

Chinbold Gansukh
źródło
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>
Zwycięzca
źródło
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.

TKS
źródło
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.

user2947452
źródło
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

Wspaniały Saif
źródło
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.

Vishal Thakur
źródło
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>
luizfzs
źródło
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

Lova Chittumuri
źródło
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”.

Lew
źródło
0

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

ajai kumar
źródło
0

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

Karthik
źródło
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ć.

flip66
źródło
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.

Dan Rayson
źródło