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


87

saya menggunakan spring 3.1.0.RELEASE , dan wadah servlet saya adalah tomcat 7 dan IDE saya adalah eclipse indigo dan jar spring-webmvc-3.1.0.RELEASE.jar yang berisi DispatcherServlet ada di folder lib, namun kapan menjalankan aplikasi, saya mendapatkan pengecualian:

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)

mohon saran mengapa saya mendapatkan pengecualian ini, dan bagaimana cara memperbaikinya.

EDIT: berikut adalah file konfigurasi saya:

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>

juga ketika mencoba mengakses halaman mana pun di aplikasi, saya mendapatkan pengecualian:

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

dapatkah Anda memposting file konfigurasi musim semi Anda dan memberi tahu kami server aplikasi apa yang seharusnya menjalankannya?
Gergely Szilagyi

@Gergely Szilagyi, saya memperbarui pertanyaannya.
Mahmoud Saleh

menghapus jawaban saya, karena tidak berguna. maaf :(
Gergely Szilagyi

@iNan, saya menggunakan eclipse indigo
Mahmoud Saleh

1
Saya percaya ini bukan secara langsung CNF di DispatcherServlet tetapi kelas dependen telah membuat kesalahan. Periksa apakah Anda melihat pengecualian bertingkat lainnya.
adarshr

Jawaban:


250

Anda perlu menambahkan "Maven Dependency" di Deployment Assembly

  • klik kanan pada proyek Anda dan pilih properti.
  • klik Deployment Assembly.
  • klik tambahkan
  • klik pada "Java Build Path Entries"
  • pilih Maven Dependencies "
  • klik Selesai.

Bangun kembali dan terapkan lagi

Catatan: Ini juga berlaku untuk proyek non maven .


Bagus - Saya bingung untuk melihat bahkan setelah menambahkan ketergantungan yang tepat di pom.xml saya tidak menyelesaikan kesalahan sampai saya mengikuti seperti di atas ..
srinivas

Bagus .. solusi sempurna
Prasad VS

1
Mengapa ini berhasil? Maksud saya, bukankah semua dependensi maven tersedia? Jika saya menggunakan colokan Tomcat7 dengan tomcat7: run, bagaimana ini bisa dilakukan?
Johnny Bigoode

Bekerja seperti pesona!
yrazlik

Ini juga berlaku untuk proyek non maven. !! Saya membuat proyek maven dan saya mendapat masalah yang sama. solusi ini berhasil untuk saya.
Bandham Manikanta

33

Dua kemungkinan jawaban:

1- Anda tidak menyertakan stoples kacang pegas dan konteks pegas di lib Anda. Jika Anda menggunakan maven (yang akan sangat membantu) kedua baris itu sudah cukup

<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- Jars yang diperlukan ada di classpath Anda tetapi tidak diterapkan di tomcat.


Senang Anda memecahkan masalah, tetapi saya tidak berpikir bahwa dari masalah Anda dapat dipahami bahwa Anda menggunakan maven.
Serkan Arıkuşu

1
maven ditandai di pertanyaan!
Mahmoud Saleh

3
menambah keinginan spring-webmvcsaya untuk pom.xmlmenyelesaikan masalah. Terima kasih.
OO7

19

Saya memiliki masalah yang sama dengan Idea Intellij dan Spring 4. Saya telah memperbaiki masalah tersebut dan saya ingin berbagi jawabannya dengan Anda.

Saya menggunakan tomcat 7 / idea intellij 13 / spring 4.

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

Dalam ide Intellij, Anda harus pergi ke File -> Project Settings -> Artifacts.

Kemudian masukkan deskripsi gambar di sini

bersih -> membangun kembali proyek -> membangun artefak, dan semuanya akan baik-baik saja.


Kamu jenius. Bisakah Anda menjelaskan apa bedanya? Kenapa Maven mengimpor semuanya, tetapi Anda masih perlu melakukannya agar berhasil?
DMurta

@DMurta siapa bilang maven mengekspor semuanya?
Adelin

13

Ini memecahkan masalah saya. Ini mudah dan cukup dijelaskan secara sederhana.

Langkah 1

  • Klik kanan pada proyek
  • Klik Properties

Langkah 2

  • Klik pada Tab Majelis Penerapan di
  • Klik Tambahkan ...

LANGKAH 3

  • Klik pada Java Build Path Entries

LANGKAH 4

  • Klik pada Maven Dependencies
  • Klik tombol Selesai

LANGKAH 5

  • Terapkan ulang aplikasi Spring MVC ke Tomcat lagi
  • Mulai ulang Tomcat
  • Daftar barang

classnotfoundexception


Apakah Anda akan mempertimbangkan kembali nilai yang Anda berikan pada proposisi saya?
Lycone

10

saya menemukan bahwa dalam perakitan penerapan , ada entri:

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

saya menghapusnya, dan menambahkan maven dependenciesentri, dan berfungsi dengan baik sekarang.


5

Jika semua saran ini tidak berhasil, Anda harus membuat ulang Server Anda (Tomcat atau sejenisnya). Itu memecahkan masalah saya.


5

Sertakan dependensi di bawah ini dalam pom.xml Anda

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

4

Saya menghadapi masalah yang sama. Ketika saya melihat ke folder maven repositori .m2 (.... m2 \ repository \ org \ springframework \ spring-webmvc) di lokal saya, saya menemukan dua folder 3.2.0.RELEASE. JADI saya menghapus satu. Lalu saya pergi ke proyek, klik kanan-> properties-> deployment essembly-> tambahkan dependensi maven. bersihkan build dan kemudian restart server. Kemudian DispatcherServlet dimuat.


Ya, ini menyelesaikan masalah saya juga, ada ide mengapa diperlukan untuk menambahkan dependensi dalam perakitan penerapan di gerhana?
Freelancer

2

Dalam kasus saya, saya mendapatkan masalah ini setelah menggunakan utilitas proyek pembaruan maven. Saya mencoba semua solusi yang Anda sarankan tetapi sepertinya tidak ada yang berhasil. Pada akhirnya, solusinya cukup dengan menghapus proyek dari server untuk memastikannya bersih, dan menambahkannya lagi. Kemudian berhasil, saya harap solusi ini dapat membantu Anda semua.


2

Anda dapat menggunakan server GlassFish dan kesalahan akan teratasi. Saya mencoba dengan tomcat7 dan tomcat8 tetapi kesalahan ini datang terus menerus tetapi diselesaikan dengan GlassFish. Saya pikir ini masalah dengan server.

Ini adalah hasil dengan tomcat7: Hasil dengan tomcat7

Berikut adalah hasil dengan GlassFish: Hasil dengan GlassFish


1

klik kanan pada proyek Anda dan pilih properti. klik Deployement Assembly. klik add klik pada "Java Build Path Entries" pilih Maven Dependencies "klik Finish.


1

Semoga bermanfaat untuk seseorang, jadi saya akan mempostingnya di sini. Saya kehilangan ketergantungan ini pada sayapom.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. Pergi ke sifat dari proyek yang kerja Anda
  2. Pilih menu Deployment Assembly dan klik tombol add
  3. memilih Java Build Path Entries dan Klik Maven Dependencies
  4. Bangun proyek dan jalankan

masukkan deskripsi gambar di sini


1
Saya tidak memiliki opsi Dependensi Maven ketika saya mengklik Entri Jalur Build Java.
Muktadir Khan

Saya tidak tahu dalam aspek mana Anda menanyakan pertanyaan ini. Silakan coba untuk mengirim pertanyaan baru.
Lova Chittumuri

0

Saya menyelesaikannya dengan mengikuti langkah-langkah ini:

  • Klik kanan di proyek> Konfigurasi> Konversi ke proyek Maven
  • Setelah konversi, klik kanan di proyek> Maven> Perbarui proyek

Ini memperbaiki pengaturan "Deployment Assembly" dari proyek.


0

Pindahkan file jar dari classpath Anda ke web-inf / lib , dan jalankan server tomcat baru.


0

Saya menemukan solusi sederhana, Cukup tambahkan toples Anda di dalam WEB-INF -> folder lib ..


0

Saya memiliki masalah yang sama di WebSphere, tetapi tidak dapat menemukan solusi meskipun saya memverifikasi dependensi Spring ada di sana dan berjalan dengan baik di tomcat. Saya akhirnya mencopot pemasangan aplikasi dan masih mendapatkan kesalahan jadi saya pikir WebSphere tergantung pada beberapa contoh yang korup.

Untuk memperbaiki masalah, saya harus menginstal ulang aplikasi, menghentikannya, menghapus instalannya, lalu menginstalnya kembali.


0

Bagi saya itu adalah kesalahan dalam pom.xml- saya menetapkan <scope>provided<scope>ketergantungan saya, dan ini membuat mereka tidak disalin selama mvn packagetahap.

Gejala saya adalah pesan kesalahan yang diposting OP, dan bahwa toples tidak termasuk dalam jalur WEB-INF / lib di dalam .war setelah paket dijalankan. Ketika saya melepaskan scope, stoples muncul di output, dan semua dimuat dengan baik sekarang.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.