3

JDK 1.6、Maven 2.2.1、Tomcat 7、およびEclipse Juno(Enterprise Edition)を使用しています。

javax.servlet。*などのパッケージをインポートしようとした場合。Eclipseは、クラスパス(ビルドパス)内にそれがないことを訴えました。

したがって、私が行ったことは、pom.xmlファイルに次の依存関係を含めることでした。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>servlet-api</artifactId>
    <version>2.3</version>
</dependency>

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>jsp-api</artifactId>
    <version>2.0</version>
</dependency>

Tomcatサーバーの起動中:

INFO: Deploying web application archive C:\DevTools\tomcat\apache-tomcat-7.0.32\webapps\myapp.war
Dec 20, 2012 4:55:41 PM org.apache.catalina.loader.WebappClassLoader validateJarFile
INFO: validateJarFile(C:\DevTools\tomcat\apache-tomcat-7.0.32\webapps\myapp\WEB-INF\lib\servlet-api-2.3.jar)
 - jar not loaded. See Servlet Spec 2.3, section 9.7.2. Offending class: javax/servlet/Servlet.class

なぜこのメッセージをログに記録するのですか?

また、Mavenリポジトリでservlet-api3.0またはjsp2.2の適切なバージョンが見つからないようです

http://mvnrepository.com/

親切に私を助けてください...

4

3 に答える 3

8

サーブレット/JSPAPIと実装ファイルの両方を提供するのはWebアプリケーションコンテナの責任です。現在のMavenセットアップでは、これらのライブラリファイルがアプリにバンドルされているため、ログにクラスローダーの問題が発生します。

javax.servlet。*などのパッケージをインポートしようとした場合。Eclipseは、クラスパス(ビルドパス)内にそれがないことを訴えました。

はい、それらに依存するコードをコンパイルするには、クラスパスにAPIライブラリが必要です。これらのライブラリをビルドクラスパスに含め、同時に最終的なデプロイ可能ファイルには含めないようにします。scope依存ライブラリのをとして識別することにより、Mavenでこれを行いますprovided。これは基本的に「これらのライブラリはコンパイルに必要ですが、最終的にはアプリコンテナによって提供されるため、実際にはデプロイ可能ファイルに含めないでください」という意味です。

また、Mavenリポジトリでservlet-api3.0またはjsp2.2の適切なバージョンが見つからないようです

サーブレット3.0およびJSP2.2APIは、共通のJavaEEWebAPIにバンドルされています。これは、POMで指定する必要がある依存関係です。図解:

<dependencies>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
于 2012-12-21T02:47:32.620 に答える
2

Tomcatにはservetおよびjspjarが付属しています。したがって、それらをwarファイルから除外する必要があります。これは、提供されたスコープを指定することで実行できます。

<scope>provided</scope>両方の依存関係に追加して、再試行してください。

于 2012-12-21T01:50:55.077 に答える
0

これらのJSPとサーブレットの依存関係をプロジェクトに追加しないでください。サーブレットなどのJ2EE仕様のインスタンス化は、アプリケーションサーバーのランタイムによって提供される必要があります。

Eclipseで、アプリケーションサーバーのサーバーランタイムを追加します。プロジェクトを右クリックして、[プロパティ]を選択します。次に、[パスの構築]>[ライブラリの追加]>[サーバーランタイム]を選択します。

于 2017-01-08T12:34:56.083 に答える