13

サーブレットを使用してEclipseでJava 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 をスローしないようにコードを修正する方法を教えてもらえますか?

4

7 に答える 7

7
  1. プロジェクトを右クリックし、「プロパティ」に移動します
  2. 「展開アセンブリ」へ
  3. 次の図に示すように、2 つのマッピングがあることを確認します。 Eclipse での Web デプロイメント アセンブリ。そうでない場合は、不足しているマッピングを追加します。
  4. 適用をクリックします。
  5. プロジェクトをクリーンアップ、ビルド、実行します。
于 2016-07-27T11:08:27.010 に答える
3

最近、私のプロジェクトの 1 つでこの問題が発生しました (これは、同じ JAR とすべてを使用しているにもかかわらず、他のプロジェクトが完全に正常に機能したためです)。プロジェクトのクリーニングを複数回試み、.metadata フォルダーを複数回削除しました。何も機能しませんでした。クラスは単にコンパイルされていません。

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

于 2015-12-24T06:59:14.043 に答える
2

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

于 2013-07-31T22:44:47.260 に答える
2

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

src/main/javaクラスをsrc/test/java配置し、その上にテスト (つまり、JUnit テストがある場合) を配置するには、を使用する必要があります。

于 2013-07-31T22:48:02.780 に答える
2

プロジェクトが Maven プロジェクトの場合は、クリーニングを試みることができます。[プロジェクト] > [クリーン] をクリックし、クリーンするプロジェクトを選択します。

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

また、対応するサーバー ランタイムをプロジェクト ファセット内に追加する必要がある場合もあります (Tomcat 9.0 など)。

于 2016-08-05T07:53:32.837 に答える
1

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

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

于 2013-07-31T22:44:17.813 に答える