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


87

私はspring3.1.0.RELEASEを使用しており、サーブレットコンテナはtomcat 7であり、IDEはeclipse indigoで あり、DispatcherServletを含むjar spring-webmvc-3.1.0.RELEASE.jar はlibフォルダに存在しますが、アプリケーションを実行すると、例外が発生します。

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)

この例外が発生する理由とその修正方法を教えてください。

編集:以下は私の設定ファイルです:

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>

また、アプリケーションの任意のページにアクセスしようとすると、例外が発生します。

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の設定ファイルを投稿して、どのアプリサーバーで実行するのか教えていただけますか?
Gergely Szilagyi 2012年

@Gergely Szilagyi、質問を更新しました。
Mahmoud Saleh 2012年

役に立たなかったので、私の答えを削除しました。申し訳ありません:(
Gergely Szilagyi 2012年

@ iNan、私はEclipseインディゴを使用しています
Mahmoud Saleh

1
DispatcherServletの直接のCNFではないと思いますが、依存クラスがエラーをスローしました。他のネストされた例外が表示されるかどうかを確認します。
adarshr 2012年

回答:


248

デプロイメントアセンブリに「Maven依存関係」を追加する必要があります

  • プロジェクトを右クリックして、プロパティを選択します。
  • DeploymentAssemblyをクリックします。
  • [追加]をクリックします
  • 「Javaビルドパスエントリ」をクリックします
  • Mavenの依存関係を選択してください」
  • [完了]をクリックします。

再構築して再デプロイします

注:これは、Maven以外のプロジェクトにも適用されます。


ニースは-私は...上記のように続くまで、エラーを解決していなかったとしても、私のpom.xmlに適切な依存関係を追加した後に見るために混乱していた
スリニバス

ニース..完璧なソリューション
Prasad VS

1
なぜこれが機能するのですか?つまり、すべてのMaven依存関係を利用できるようにするべきではありませんか?tomcat7:runでTomcat7プラグを使用していた場合、これはどのように達成されますか?
Johnny Bigoode 2017年

チャームのように機能します!
yrazlik 2017

これは、Maven以外のプロジェクトにも適用されます。Mavenプロジェクトを作成しましたが、同じ問題が発生しました。この解決策は私のために働いた。
BandhamManikanta18年

33

2つの可能な答え:

1-ライブラリにspring-beansとspring-contextjarを含めませんでした。Mavenを使用している場合(これは大いに役立ちます)、これらの2行で十分です

<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-必要なjarはクラスパスにありますが、Tomcatにデプロイされていません。


問題を解決できてよかったですが、Mavenを使用していることが問題から理解できるとは思いません。
セルカンArıkuşu

1
Mavenは質問でタグ付けされています!
Mahmoud Saleh

3
spring-webmvc私に追加pom.xmlすると問題が解決します。ありがとう。
OO7 2016年

19

こんにちはみんな私はIdeaIntellijとSpring4で同じ問題を抱えていました。問題を修正し、答えをあなたと共有したいと思いました。

私はtomcat7 / idea intellij 13 / spring4を使用しています

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>

In idea Intellij you need to go to File -> Project Settings -> Artifacts. Then enter image description here

clean -> rebuild the project -> build the artifact and everything will be ok ...


You're a genius. Could you explain what difference it makes? How come Maven imports everything, but you still need to do that so it works?
DMurta

@DMurta who said that maven exports everything?
Adelin

12

This solves the problem for me. It's easy and pretty simply explained.

Step 1

  • Right click on project
  • Click on Properties

Step 2

  • Click on Deployment Assembly Tab in the
  • Click Add...

Step 3

  • Click on Java Build Path Entries

Step 4

  • Click on Maven Dependencies
  • Click Finish button

Step 5

  • Redeploy Spring MVC application to Tomcat again
  • Restart Tomcat
  • List item

classnotfoundexception


Would you reconsider the grade you gave to my proposition?
Lycone

10

i found that in the deployment assembly, there was the entry:

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

i removed it, and added the maven dependencies entry, and it works fine now.


5

If all of these advice doesn't work, you should re-create your Server (Tomcat or like that). That solved my problem.


5

Include below dependency in your pom.xml

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

4

I was facing the same Issue. When I saw into maven repository .m2 folder(....m2\repository\org\springframework\spring-webmvc) in my local I found two 3.2.0.RELEASE folders. SO I removed one. Then I went to project, right click->properties->deployment essembly-> add maven dependencies. clean build and then restart the server. Then the DispatcherServlet got loaded.


Yes, this resolved my issue too, any idea why it is required to add dependencies in deployment assembly in eclipse ?
Freelancer

2

In my case I get this trouble after using the maven's update project utility. I tried all the workarounds you suggested but nothing seemed to work. At the end the solution was simply to remove the project from the server to ensure that it was clean, and add it again. Then it works, I hope this solution could help any of you.


2

You can use GlassFish server and the error will be resolved. I tried with tomcat7 and tomcat8 but this error was coming continuously but resolved with GlassFish. I think it's a problem with server.

These are the results with tomcat7: Results with tomcat7

Here are the results with GlassFish: Results with GlassFish


1

right click on your project and choose properties. click on Deployement Assembly. click add click on "Java Build Path Entries" select Maven Dependencies" click Finish.


1

It may be useful for someone, so I'll post it here. I was missing this dependency on my pom.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. Go to properties of Project which your working
  2. Choose the Deployment Assembly menu and Click on add button
  3. opt the Java Build Path Entries and Click on Maven Dependencies
  4. Build the project and run

enter image description here


1
I don't have the Maven Dependencies option when i click on Java Build Path Entries.
Muktadir Khan

i did not know in which aspect your asking this question. Please try to post new question.
Lova Chittumuri

0

I solved by following these steps:

  • Right click in the project > Configure > Convert to Maven project
  • After the conversion, right click in the project > Maven > Update project

This fixes the "Deployment Assembly" settings of the project.


0

Move the jar files from your classpath to web-inf/lib, and run a new tomcat server.


0

I found a simple solution, Simply add your jars inside WEB-INF-->lib folder..


0

I had this same issue in WebSphere, but couldn't find a solution even though I verified the Spring dependencies were there and it ran in tomcat just fine. I ended up uninstalling the application and was still getting the error so I think WebSphere was hanging onto some corrupt instance.

To fix the issue I had to reinstall the application, stop it, uninstall it and then reinstall it.


0

For me it was a mistake in the pom.xml - I'd set <scope>provided<scope> on my dependencies, and this was making them not get copied during the mvn package stage.

My symptoms were the error message the OP posted, and that the jars were not included in the WEB-INF/lib path inside the .war after package was run. When I removed the scope, the jars appeared in the output, and all loads up fine now.

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.