web-dev-qa-db-ja.com

EclipseでのTomcatのサーブレットのjava.lang.ClassNotFoundException

Javaサーブレットを使用してEclipseでWebアプリケーションを開発し始め、ローカルホスト上のTomcatサーバーでテストしています。Tomcatでアプリケーションをデプロイしましたが、ターゲットURLをロードしようとするとブラウザで、次のスタックトレースを取得します。

Jul 31, 2013 2:58:31 PM org.Apache.catalina.core.ApplicationContext log
INFO: Marking servlet ImageServlet as unavailable
Jul 31, 2013 2:58:31 PM org.Apache.catalina.core.StandardWrapperValve invoke
SEVERE: Allocate exception for servlet ImageServlet
Java.lang.ClassNotFoundException: test.ImageServlet
    at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1714)
    at org.Apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.Java:1559)
    at org.Apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.Java:527)
    at org.Apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.Java:509)
    at org.Apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.Java:137)
        at org.Apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.Java:1144)
    at org.Apache.catalina.core.StandardWrapper.allocate(StandardWrapper.Java:865)
    at org.Apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.Java:136)
    at org.Apache.catalina.core.StandardContextValve.invoke(StandardContextValve.Java:123)
    at org.Apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.Java:502)
    at org.Apache.catalina.core.StandardHostValve.invoke(StandardHostValve.Java:171)
    at org.Apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.Java:99)
    at org.Apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.Java:953)
    at org.Apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.Java:118)
    at org.Apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.Java:408)
    at org.Apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.Java:1023)
    at org.Apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.Java:589)
    at org.Apache.Tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.Java:1852)
    at Java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at Java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at Java.lang.Thread.run(Unknown Source)  

ImageServletクラスは、Eclipseワークスペースのmyproject/src/testフォルダーに明確に配置されています。myprojectはEclipseプロジェクトの名前で、testはパッケージです。

web.xmlはmyproject/web/WEB-INF/web.xmlにあり、myproject.xmlはmyproject/myproject.xmlにあります

Web.xmlの内容は次のとおりです。

<?xml version="1.0"?>
<web-app 
xmlns="http://Java.Sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://Java.Sun.com/xml/ns/j2ee http://Java.Sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">

    <servlet>
        <servlet-name>ImageServlet</servlet-name>
        <servlet-class>test.ImageServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>ImageServlet</servlet-name>
        <url-pattern>/image</url-pattern>
    </servlet-mapping>
</web-app>

Myproject.xmlの内容は次のとおりです。

ClassNotFoundExceptionをスローしないようにコードを修正する方法を教えてもらえますか?

10
CodeMed

フィルターまたはサーブレットの作成時に、Eclipseのビルドフォルダーにクラスファイルが生成されないことがあります。アプリケーションをクリーンアップして一度ビルドすると、上記のパスに.classファイルが生成されます。これにより、場合によってはクラスが見つからないというエラーが削除されます。

20
srinivas

最近、私のプロジェクトの1つでこの問題に遭遇しました(同じJARとすべてを使用していても、他のプロジェクトは完全にうまくいったのでこれを言います)。プロジェクトを複数回クリーニングし、.metadataフォルダーを複数回削除しました。何も機能しませんでした。クラスは単にコンパイルされていません。

うまくいったのは、プロジェクトのビルドパスでバインドされていないjre6ライブラリを削除することでした。

3
anuvab1911
  1. プロジェクトを右クリックし、「プロパティ」に移動します
  2. 「展開アセンブリ」に移動します
  3. 次の図に示すように、2つのマッピングがあることを確認してください。 EclipseのWebデプロイメントアセンブリ 。そうでない場合は、欠落しているマッピングを追加します。
  4. 適用をクリックします。
  5. プロジェクトをクリーンアップ、ビルド、実行します。
2
Mrinal N

それはMavenプロジェクトですか? Mavenプロジェクトでは、src/testは単体テストの場所であり、ビルドおよび戦争から除外されています。パッケージ名を変更してから再試行してください。

2
Grubhart

Mavenベースのプロジェクトを構築しているように見えますが、クラスを間違った場所に配置しているようです。

src/main/Javaを使用してクラスを配置し、src/test/Javaを使用してテストを配置する必要があります(つまり、JUnitテストがある場合)。

2

プロジェクトがMavenプロジェクトである場合は、それをクリーニングしてみてください。 [プロジェクト]> [クリーン]をクリックし、クリーンする目的のプロジェクトを選択します。

場合によっては、コンソールとEclipseのいずれかでMavenを使用すると、ターゲットが「クレイジー」になり、続行する唯一の方法はプロジェクトのクリーニングになります。

1
russellhoff

クラスがない場合test.ImageServlet WEB-INF/classesデプロイメントで、Tomcatはそれを見つけることができません。

私の推測では、WARファイルをTomcatに適切にコンパイル、パッケージング、デプロイしていません。

1
duffymo