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
Mahmoud Saleh
sumber
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 .

krakos
sumber
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.

Serkan Arıkuşu
sumber
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.

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

Lycone
sumber
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.

Mahmoud Saleh
sumber
5

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

Chinbold Gansukh
sumber
5

Sertakan dependensi di bawah ini dalam pom.xml Anda

<dependency>
 <groupId>org.springframework</groupId>
  <artifactId>spring-webmvc</artifactId>
   <version>{spring-version}</version>
</dependency>
Pemenang
sumber
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.

TKS
sumber
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.

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

Saif yang luar biasa
sumber
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.

Vishal Thakur
sumber
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>
luizfzs
sumber
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

Lova Chittumuri
sumber
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.

Leo
sumber
0

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

ajai kumar
sumber
0

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

Karthik
sumber
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.

flip66
sumber
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.

Dan Rayson
sumber