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


87

tôi đang sử dụng spring 3.1.0.RELEASE và vùng chứa servlet của tôi là tomcat 7 và IDE của tôi là màu chàm eclipse và jar spring-webmvc-3.1.0.RELEASE.jar có chứa DispatcherServlet tồn tại trong thư mục lib và chưa khi nào đang chạy ứng dụng, tôi nhận được ngoại lệ:

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)

xin vui lòng cho biết lý do tại sao tôi nhận được ngoại lệ này, và làm thế nào để khắc phục nó.

CHỈNH SỬA: sau đây là các tệp cấu hình của tôi:

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>

Ngoài ra khi cố gắng truy cập bất kỳ trang nào trong ứng dụng, tôi nhận được ngoại lệ:

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

bạn có thể đăng các tệp cấu hình mùa xuân của mình và cho chúng tôi biết nó phải chạy trên máy chủ ứng dụng nào không?
Gergely Szilagyi

@Gergely Szilagyi, tôi đã cập nhật câu hỏi.
Mahmoud Saleh

đã xóa câu trả lời của tôi vì nó không hữu ích. xin lỗi :(
Gergely Szilagyi

@iNan, tôi đang sử dụng eclipse chàm
Mahmoud Saleh

1
Tôi tin rằng nó không trực tiếp là CNF trên DispatcherServlet mà là một lớp phụ thuộc đã gặp lỗi. Kiểm tra xem bạn có thấy bất kỳ ngoại lệ lồng nhau nào khác không.
adarshr

Câu trả lời:


248

Bạn cần thêm "Maven Dependency" trong Hội đồng triển khai

  • nhấp chuột phải vào dự án của bạn và chọn thuộc tính.
  • nhấp vào Triển khai Assembly.
  • bấm thêm
  • nhấp vào "Java Build Path Entries"
  • chọn Maven Dependencies "
  • nhấp vào Kết thúc.

Xây dựng lại và triển khai lại

Lưu ý: Điều này cũng áp dụng cho dự án không maven .


Nice - Tôi đã nhầm lẫn để xem thậm chí sau khi thêm phụ thuộc thích hợp trong pom.xml của tôi đã không giải quyết được lỗi cho đến khi tôi đi theo như trên ..
Srinivas

Tuyệt vời .. giải pháp hoàn hảo
Prasad VS

1
Tại sao điều này hoạt động? Ý tôi là, không phải tất cả các phụ thuộc maven đều có sẵn? Nếu tôi đang sử dụng cắm Tomcat7 với tomcat7: run, điều này sẽ được thực hiện như thế nào?
Johnny Bigoode

Hoạt động như sự quyến rũ!
yrazlik

Điều này cũng có thể áp dụng cho dự án không phải maven. !! Tôi đã tạo một dự án maven và tôi gặp vấn đề tương tự. giải pháp này đã làm việc cho tôi.
Bandham Manikanta

33

Hai câu trả lời có thể:

1- Bạn đã không bao gồm các lọ Spring-bean và Spring-context trong lib của mình. Nếu bạn đang sử dụng maven (sẽ giúp ích rất nhiều) thì hai dòng đó là đủ

<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- Các lọ cần thiết nằm trong classpath của bạn nhưng không được triển khai trên tomcat.


Rất vui vì bạn đã giải quyết được vấn đề, nhưng tôi không nghĩ rằng bạn có thể hiểu được vấn đề của bạn rằng bạn đang sử dụng maven.
Serkan Arıkuşu

1
maven được gắn thẻ trong câu hỏi!
Mahmoud Saleh

3
thêm vào spring-webmvcý chí của tôi pom.xmlsẽ giải quyết vấn đề. Cảm ơn.
OO7

19

Xin chào các bạn, tôi đã gặp sự cố tương tự với Idea Intellij và Spring 4. Tôi đã khắc phục sự cố và tôi muốn chia sẻ câu trả lời với các bạn.

Tôi sử dụng tomcat 7 / idea intellij 13 / spring 4

phụ thuộc 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>

Theo ý tưởng Intellij, bạn cần đi tới Tệp -> Cài đặt dự án -> Tạo tác. Sau đó nhập mô tả hình ảnh ở đây

dọn dẹp -> xây dựng lại dự án -> xây dựng tạo tác và mọi thứ sẽ ổn ...


Bạn là một thiên tài. Bạn có thể giải thích nó tạo ra sự khác biệt nào không? Tại sao Maven nhập mọi thứ, nhưng bạn vẫn cần phải làm điều đó để nó hoạt động?
DMurta

@DMurta ai nói rằng maven xuất mọi thứ?
Adelin

12

Điều này giải quyết vấn đề cho tôi. Nó dễ dàng và khá đơn giản được giải thích.

Bước 1

  • Nhấp chuột phải vào dự án
  • Nhấp vào Thuộc tính

Bước 2

  • Nhấp vào tab Triển khai lắp ráp trong
  • Nhấp vào Thêm ...

Bước 3

  • Nhấp vào Java Build Path Entries

Bước 4

  • Nhấp vào Phụ thuộc Maven
  • Nhấp vào nút Kết thúc

Bước 5

  • Triển khai lại ứng dụng Spring MVC cho Tomcat một lần nữa
  • Khởi động lại Tomcat
  • Liệt kê mục

classnotfoundexception


Bạn sẽ xem xét lại điểm bạn đã cho đề xuất của tôi?
Lycone

10

tôi thấy rằng trong hội đồng triển khai , có mục:

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

tôi đã xóa nó, và thêm maven dependenciesmục nhập, và hiện tại nó hoạt động tốt.


5

Nếu tất cả những lời khuyên này không hoạt động, bạn nên tạo lại Máy chủ của mình (Tomcat hoặc tương tự). Điều đó đã giải quyết vấn đề của tôi.


5

Bao gồm sự phụ thuộc bên dưới trong pom.xml của bạn

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

4

Tôi đã phải đối mặt với cùng một vấn đề. Khi tôi nhìn thấy thư mục .m2 của kho lưu trữ maven (.... m2 \ repository \ org \ springframework \ spring-webmvc) trong cục bộ của mình, tôi tìm thấy hai thư mục 3.2.0.RELEASE. VẬY, tôi đã loại bỏ một cái. Sau đó, tôi đi đến dự án, nhấp chuột phải-> thuộc tính-> triển khai lắp ráp-> thêm phụ thuộc maven. xây dựng sạch và sau đó khởi động lại máy chủ. Sau đó, DispatcherServlet được tải.


Có, điều này cũng đã giải quyết được sự cố của tôi, bất kỳ ý kiến ​​nào tại sao cần thêm các phần phụ thuộc vào lắp ráp triển khai trong eclipse?
Freelancer

2

Trong trường hợp của tôi, tôi gặp sự cố này sau khi sử dụng tiện ích dự án cập nhật của maven. Tôi đã thử tất cả các cách giải quyết mà bạn đề xuất nhưng dường như không có gì hiệu quả. Cuối cùng, giải pháp chỉ đơn giản là xóa dự án khỏi máy chủ để đảm bảo rằng nó đã sạch và thêm lại. Sau đó, nó hoạt động, tôi hy vọng giải pháp này có thể giúp bất kỳ ai trong số các bạn.


2

Bạn có thể sử dụng máy chủ GlassFish và lỗi sẽ được giải quyết. Tôi đã thử với tomcat7 và tomcat8 nhưng lỗi này xảy ra liên tục nhưng được giải quyết bằng GlassFish. Tôi nghĩ đó là một vấn đề với máy chủ.

Đây là kết quả với tomcat7: Kết quả với tomcat7

Đây là kết quả với GlassFish: Kết quả với GlassFish


1

nhấp chuột phải vào dự án của bạn và chọn thuộc tính. nhấp vào Hội đồng triển khai. nhấp vào thêm nhấp vào "Java Build Path Entries" chọn Maven Dependencies "nhấp vào Kết thúc.


1

Nó có thể hữu ích cho ai đó, vì vậy tôi sẽ đăng nó ở đây. Tôi đã thiếu sự phụ thuộc này vàopom.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. Chuyển đến thuộc tính của Dự án mà bạn đang làm việc
  2. Chọn menu Triển khai lắp ráp và nhấp vào nút thêm
  3. chọn các mục nhập đường dẫn xây dựng Java và nhấp vào phụ thuộc Maven
  4. Xây dựng dự án và chạy

nhập mô tả hình ảnh ở đây


1
Tôi không có tùy chọn Maven Dependencies khi nhấp vào Java Build Path Entries.
Muktadir Khan

Tôi không biết bạn đặt câu hỏi này theo khía cạnh nào. Hãy thử đăng câu hỏi mới.
Lova Chittumuri

0

Tôi đã giải quyết bằng cách làm theo các bước sau:

  • Nhấp chuột phải vào dự án> Định cấu hình> Chuyển đổi sang dự án Maven
  • Sau khi chuyển đổi, nhấp chuột phải vào dự án> Maven> Cập nhật dự án

Điều này khắc phục cài đặt "Triển khai hội đồng" của dự án.


0

Di chuyển các tệp jar từ classpath của bạn sang web-inf / lib và chạy một máy chủ tomcat mới.


0

Tôi đã tìm thấy một giải pháp đơn giản, Chỉ cần thêm lọ của bạn vào bên trong thư mục WEB-INF -> lib ..


0

Tôi đã gặp vấn đề tương tự trong WebSphere, nhưng không thể tìm thấy giải pháp mặc dù tôi đã xác minh các phụ thuộc Spring ở đó và nó chạy trong tomcat tốt. Cuối cùng, tôi đã gỡ cài đặt ứng dụng và vẫn gặp lỗi, vì vậy tôi nghĩ rằng WebSphere đã bị treo vào một số phiên bản bị hỏng.

Để khắc phục sự cố, tôi đã phải cài đặt lại ứng dụng, dừng ứng dụng, gỡ cài đặt và sau đó cài đặt lại.


0

Đối với tôi, đó là một sai lầm trong pom.xml- Tôi đã thiết lập các <scope>provided<scope>phụ thuộc của mình, và điều này đã khiến chúng không bị sao chép trong mvn packagegiai đoạn này.

Các triệu chứng của tôi là thông báo lỗi mà OP đã đăng và các bình không được bao gồm trong đường dẫn WEB-INF / lib bên trong gói .war sau khi chạy. Khi tôi loại bỏ phạm vi, các bình xuất hiện trong đầu ra và hiện tại tất cả đều tải tốt.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.