web-dev-qa-db-ja.com

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

私はspring 3.1.0.RELEASEを使用しており、サーブレットコンテナはTomcat 7であり、私のIDEはEclipse Indigoですjar spring-webmvc-3.1.0.RELEASE.jarを含むDispatcherServletは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>

- 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
81
Mahmoud Saleh

展開アセンブリにエントリがあることがわかりました:

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

私はそれを削除し、maven dependenciesエントリを追加しましたが、今はうまく動作します。

10
Mahmoud Saleh

展開アセンブリに「Maven Dependency」を追加する必要があります

  • プロジェクトを右クリックして、プロパティを選択します。
  • [展開アセンブリ]をクリックします。
  • 追加をクリックします
  • 「Java Build Path Entries」をクリックします
  • maven依存関係の選択」
  • 完了をクリックします。

再構築して再度展開する

注:これはnon mavenプロジェクトにも適用されます。

226
krakos

2つの可能な答え:

1- libにspring-beansおよびspring-context jarsを含めませんでした。 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にはデプロイされません。

28

こんにちは皆さん、Idea IntellijとSpring 4でも同じ問題がありました。問題を修正したので、回答を共有したいと思いました。

Tomcat 7/idea intellij 13/spring 4を使用します

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>

Intellijのアイデアでは、ファイル->プロジェクト設定->アーティファクトに移動する必要があります。それから enter image description here

クリーン->プロジェクトを再構築->アーティファクトをビルドすると、すべてが正常になります...

19
Adelin

これで問題が解決します。簡単で、簡単に説明できます。

ステップ1

  • プロジェクトを右クリック
  • プロパティをクリックします

ステップ2

  • のDeployment Assemblyタブをクリックします
  • 追加...をクリックします.

ステップ3

  • [Java Build Path Entries]をクリックします

ステップ4

  • Maven依存関係をクリックします
  • [完了]ボタンをクリックします

ステップ5

  • Spring MVCアプリケーションをTomcatに再デプロイします
  • Tomcatを再起動します
  • リストアイテム

classnotfoundexception

8
Lycone

これらのアドバイスがすべて機能しない場合は、サーバー(Tomcatなど)を再作成する必要があります。これで私の問題は解決しました。

4

私は同じ問題に直面していました。ローカルでmavenリポジトリ.m2フォルダー(.... m2\repository\org\springframework\spring-webmvc)を見たとき、2つの3.2.0.RELEASEフォルダーが見つかりました。 SO削除しました。次に、プロジェクトに行き、右クリック->プロパティ->展開essembly-> maven依存関係を追加します。ビルドをクリーンにしてから、サーバーを再起動します。次に、DispatcherServletがロードされました。

4
TKS

Pom.xmlに以下の依存関係を含めます

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

私の場合、mavenのプロジェクト更新ユーティリティを使用した後にこの問題が発生します。あなたが提案したすべての回避策を試しましたが、何もうまくいかないようでした。最後に、解決策は、サーバーからプロジェクトを削除して、プロジェクトがクリーンであることを確認し、再度追加することでした。それでうまくいきます。このソリューションがあなたの助けになることを願っています。

2
user2947452

GlassFishサーバーを使用すると、エラーが解決されます。 Tomcat7とTomcat8で試しましたが、このエラーは継続的に発生していましたが、GlassFishで解決されました。サーバーの問題だと思います。

Tomcat7の結果は次のとおりです。 Results with Tomcat7

GlassFishの結果は次のとおりです。 Results with GlassFish

2
Superb Saif

誰かに役立つかもしれないので、ここに投稿します。 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
luizfzs

プロジェクトを右クリックして、プロパティを選択します。 [展開アセンブリ]をクリックします。 [追加]をクリックし、[Javaビルドパスエントリ]をクリックして[Maven依存関係]を選択し、[完了]をクリックします。

1
Vishal Thakur

WEB-INF-> libフォルダー内にjarを追加するだけの簡単なソリューションを見つけました。

0
Karthik

WebSphereでも同じ問題がありましたが、Springの依存関係が存在することを確認し、Tomcatで問題なく実行できたにもかかわらず、解決策が見つかりませんでした。最終的にアプリケーションをアンインストールしてもエラーが発生するため、WebSphereが破損したインスタンスにハングアップしたと考えられます。

問題を解決するには、アプリケーションを再インストールし、停止してからアンインストールしてから再インストールする必要がありました。

0
flip66

私にとっては、pom.xmlの間違いでした-私は依存関係に<scope>provided<scope>を設定していましたが、これはmvn packageの段階でコピーされないようにしていました。

私の症状は、OPが投稿したエラーメッセージであり、パッケージの実行後に.war内のWEB-INF/libパスにjarが含まれていなかったことです。スコープを削除すると、jarが出力に表示され、すべてが正常にロードされます。

0
Dan Rayson

Jarファイルをクラスパスからweb-inf/libに移動し、新しいTomcatサーバーを実行します。

0
ajai kumar

次の手順に従って解決しました。

  • プロジェクトを右クリックして、「構成」>「Mavenプロジェクトに変換」
  • 変換後、プロジェクト内で右クリック> Maven>プロジェクトの更新

これにより、プロジェクトの「展開アセンブリ」設定が修正されます。

0
leo