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


87

Yay 3.1.0.RELEASE kullanıyorum ve servlet kapsayıcım tomcat 7 ve IDE'im eclipse indigo ve DispatcherServlet'i içeren jar spring-webmvc-3.1.0.RELEASE.jar , lib klasöründe ve yine de uygulamayı çalıştırıyorum, istisna alıyorum:

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)

lütfen neden bu istisnayı aldığımı ve nasıl düzeltileceğini bildirin.

DÜZENLE: yapılandırma dosyalarım aşağıdadır:

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>

ayrıca uygulamadaki herhangi bir sayfaya erişmeye çalışırken, istisna ile karşılaşıyorum:

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

Spring yapılandırma dosyalarınızı gönderebilir ve bize hangi uygulama sunucusunda çalışması gerektiğini söyleyebilir misiniz?
Gergely Szilagyi

@Gergely Szilagyi, soruyu güncelledim.
Mahmoud Saleh

cevabımı sildi, çünkü işe yaramadı. üzgünüm :(
Gergely Szilagyi

@iNan, tutulma indigo kullanıyorum
Mahmoud Saleh

1
DispatcherServlet'te doğrudan bir CNF olmadığına inanıyorum, ancak bağımlı bir sınıf bir hata attı. İç içe geçmiş başka bir istisna görüp görmediğinizi kontrol edin.
adarshr

Yanıtlar:


250

Dağıtım Montajına "Maven Bağımlılığı" eklemeniz gerekiyor

  • projenize sağ tıklayın ve özellikleri seçin.
  • Dağıtım Meclisi'ne tıklayın.
  • ekle'yi tıklayın
  • "Java Derleme Yolu Girişleri" ni tıklayın
  • Maven Bağımlılıklarını seçin "
  • Bitir'e tıklayın.

Yeniden oluşturun ve yeniden dağıtın

Not: Bu, maven dışı proje için de geçerlidir .


Güzel - pom.xml dosyama uygun bağımlılığı ekledikten sonra bile yukarıdaki gibi takip edene kadar hatayı çözmediğini görmek kafam karıştı ..
srinivas

Güzel .. mükemmel çözüm
Prasad VS

1
Bu neden işe yarıyor? Demek istediğim, tüm bağımlılıklar mevcut olmamalı mı? Tomcat7'yi tomcat7: run ile takıyor olsaydım, bu nasıl başarılırdı?
Johnny Bigoode

Cazibe gibi çalışıyor!
yrazlik

Bu, maven dışı projeler için de geçerlidir. !! Bir maven projesi oluşturdum ve aynı problemim var. bu çözüm benim için çalıştı.
Bandham Manikanta

33

Olası iki cevap:

1- Kitaplığınıza taze fasulye ve ilkbahar bağlamı kavanozlarını dahil etmediniz. Maven kullanıyorsanız (bu çok yardımcı olacaktır) bu iki satır yeterli olacaktır

<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- Gerekli kavanozlar sınıf yolunuzdadır ancak tomcat üzerinde konuşlandırılmamıştır.


Sorunu çözmüş olman güzel, ama maven kullandığın sorununun anlaşılabileceğini sanmıyorum.
Serkan Arıkuşu

1
maven soruda etiketlendi!
Mahmoud Saleh

3
ekleyerek spring-webmvckardeşime karşı pom.xmlsorunu çözecektir. Teşekkürler.
OO7

19

Idea Intellij ve Spring 4 ile aynı sorunu yaşadım. Sorunu düzelttim ve cevabı sizinle paylaşmak istedim.

Tomcat 7 / idea intellij 13 / spring 4 kullanıyorum.

pom.xml bağımlılıkları:

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

Fikir Intellij'de Dosya -> Proje Ayarları -> Artifacts'a gitmeniz gerekir.

Sonra görüntü açıklamasını buraya girin

clean -> projeyi yeniden inşa edin -> yapıyı inşa edin ve her şey yoluna girecek.


Sen bir dahisin. Ne gibi bir fark yarattığını açıklayabilir misin? Maven nasıl oluyor da her şeyi ithal ediyor, ama bunun işe yaraması için hala bunu yapmanız gerekiyor?
DMurta

@DMurta maven her şeyi ihraç ettiğini kim söyledi?
Adelin

13

Bu benim için sorunu çözüyor. Kolay ve oldukça basit bir şekilde açıklanmıştır.

Aşama 1

  • Projeye sağ tıklayın
  • Özellikler'e tıklayın

Adım 2

  • Açma Montaj Sekmesine tıklayın.
  • Ekle ... 'yi tıklayın.

Aşama 3

  • Java Derleme Yolu Girişlerine tıklayın

4. adım

  • Maven Bağımlılıklarına tıklayın
  • Bitir düğmesine tıklayın

Adım 5

  • Spring MVC uygulamasını Tomcat'e yeniden dağıtın
  • Tomcat'i yeniden başlatın
  • Liste öğesi

sınıf bulunmayan istisna


Önerime verdiğin notu tekrar düşünür müsün?
Lycone

10

dağıtım derlemesinde giriş olduğunu buldum :

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

onu kaldırdım ve maven dependenciesgirişi ekledim ve şimdi iyi çalışıyor.


5

Tüm bu tavsiyeler işe yaramazsa, Sunucunuzu yeniden oluşturmalısınız (Tomcat veya benzeri). Bu benim sorunumu çözdü.


5

Pom.xml dosyanıza aşağıdaki bağımlılığı ekleyin

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

4

Ben de aynı Sorunla karşı karşıyaydım. Yerelimde maven deposu .m2 klasörünü (.... m2 \ repository \ org \ springframework \ spring-webmvc) gördüğümde iki 3.2.0.RELEASE klasörü buldum. Bu yüzden birini kaldırdım. Sonra projeye gittim, sağ tıklama-> özellikler-> dağıtım özü-> maven bağımlılıkları ekle. derlemeyi temizleyin ve ardından sunucuyu yeniden başlatın. Ardından DispatcherServlet yüklendi.


Evet, bu benim de sorunumu çözdü, tutulmada dağıtım derlemesine neden bağımlılık eklemek gerektiğine dair bir fikriniz var mı?
Freelancer

2

Benim durumumda, maven'in güncelleme proje yardımcı programını kullandıktan sonra bu sorunu yaşıyorum. Önerdiğiniz tüm geçici çözümleri denedim ama hiçbir şey işe yaramadı. Sonunda çözüm, temiz olduğundan emin olmak için projeyi sunucudan kaldırıp yeniden eklemekti. Sonra işe yarıyor, umarım bu çözüm herhangi birinize yardımcı olabilir.


2

GlassFish sunucusunu kullanabilirsiniz ve hata çözülecektir. Tomcat7 ve tomcat8 ile denedim ancak bu hata sürekli geliyordu ancak GlassFish ile çözüldü. Sanırım sunucu ile ilgili bir sorun.

Tomcat7 ile elde edilen sonuçlar: Tomcat7 ile sonuçlar

GlassFish ile elde edilen sonuçlar: GlassFish ile Sonuçlar


1

projenize sağ tıklayın ve özellikleri seçin. Deployement Assembly'ye tıklayın. ekle'ye tıklayın "Java Derleme Yolu Girişleri" üzerine tıklayın Maven Bağımlılıkları'nı seçin Bitir'e tıklayın.


1

Birisi için faydalı olabilir, bu yüzden buraya göndereceğim. Bu bağımlılığı özlüyordumpom.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. Git özelliklerinin arasında Projesi çalışma
  2. Seç Dağıtım Montaj menüsü ve tıklayın eklenti düğmesi
  3. opt Java Build Path Girişleri ve tıklayın Maven'in bağımlılıklar
  4. İnşa proje ve çalıştırmak

görüntü açıklamasını buraya girin


1
Java Derleme Yolu Girişlerini tıkladığımda Maven Bağımlılıkları seçeneğine sahip değilim.
Muktadir Khan

Bu soruyu hangi yönden sorduğunuzu bilmiyordum. Lütfen yeni soru göndermeyi deneyin.
Lova Chittumuri

0

Şu adımları izleyerek çözdüm:

  • Projeye sağ tıklayın> Yapılandır> Maven projesine dönüştür
  • Dönüştürmeden sonra projeye sağ tıklayın> Maven> Projeyi güncelle

Bu, projenin "Dağıtım Derlemesi" ayarlarını düzeltir.


0

Jar dosyalarını sınıf yolunuzdan web-inf / lib'e taşıyın ve yeni bir tomcat sunucusu çalıştırın.


0

Basit bir çözüm buldum, kavanozlarınızı WEB-INF -> lib klasörüne ekleyin ..


0

Aynı sorunu WebSphere'de de yaşadım, ancak Spring bağımlılıklarının orada olduğunu doğrulamama ve tomcat'ta gayet iyi çalışmasına rağmen bir çözüm bulamadım. Uygulamayı kaldırdım ve hala hatayı alıyordum, bu yüzden WebSphere'in bazı bozuk örneklerde asılı olduğunu düşünüyorum.

Sorunu çözmek için uygulamayı yeniden yüklemem, durdurmam, kaldırmam ve sonra yeniden yüklemem gerekiyordu.


0

Benim için pom.xml- <scope>provided<scope>bağımlılıklarımı ayarlamıştım ve bu onların zaman boyunca kopyalanmamasına neden oluyordu.mvn package sahneye.

Belirtilerim, OP'nin gönderdiği hata mesajı ve paket çalıştırıldıktan sonra kavanozların .war içindeki WEB-INF / lib yoluna dahil edilmemiş olmasıydı. Kapsamı kaldırdığımda, çıktıda kavanozlar belirdi ve şimdi tüm yükler iyi durumda.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.