Google App Engineで実行できるアプリの作成を開始しました。
しかし、NetbeansからEclipseにコードを使用したいときに、次のエラーが発生しました。
import javax.servlet.annotation.WebServlet;
そして
@WebServlet(name = "MyServlet", urlPatterns = {"/MyServlet"})
エラーは次のとおりです。
The import javax.servlet.annotation cannot be resolved
WebServlet cannot be resolved to a type
Servlet-api.jarをEclipseにインポートしようとしましたが、それでも同じで、プロジェクトをビルドしてクリーンアップしようとしました。
TomcatはEclipseでは使用せず、Netbeansでのみ使用します。
どうすれば問題を解決できますか?
Servlet-api.jarをEclipseにインポートしようとしましたが、それでもプロジェクトをビルドしてクリーンアップしようとしました。私はEclipseでTomcatを使用せず、ネットBeanでのみTomcatを使用します。どうすれば問題を解決できますか。
Donotput servlet-api.jar
プロジェクト内。これはトラブルを求めているだけです。 Dynamic Web Moduleファセットがバージョン3.0に設定されている場合は、プロジェクトのプロパティのProject Facetsセクションを確認する必要があります。また、/WEB-INF/web.xml
(ある場合)は、Servlet 3.0仕様に準拠していると宣言されています。つまり<web-app>
ルート宣言は次と一致する必要があります。
<web-app
xmlns="http://Java.Sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://Java.Sun.com/xml/ns/javaee http://Java.Sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
インポートできるようにするためにjavax.servlet
など、EclipseでTomcatのような完全なサーブレットコンテナを統合し、プロジェクトのプロパティのTargeted Runtimesで参照する必要があります。 Google App Engine でも同じことができます。
繰り返しますが、他の人が示唆するように、コンテナ固有のライブラリをwebappプロジェクトにコピーしますnot。異なるメーカー/バージョンのプロダクションコンテナでwebappを実行不能にします。すべての色でクラスパス関連のエラー/例外が発生します。
具体的な質問とは無関係:GAEはServlet 3.0をnotサポートします。その基礎となるJetty 7.xコンテナは、最大サーブレット2.5のみをサポートします。
servlet-api.jar
のバージョン番号が少なくとも3.0であることを確認してください。 META-INF/manifest.mf
ファイルのjar内にバージョン番号があります。
Implementation-Version: 3.0.1
3.0未満の場合は、Maven Centralから3.0.1をダウンロードします。 http://search.maven.org/#artifactdetails|javax.servlet|javax.servlet-api|3.0.1|jar
以前のサーブレット仕様(2.5、2.4など)は注釈をサポートしていません。
Mavenを使用していて、EclipseのTargeted RuntimesでTomcatをリンクしたくない場合は、pom.xmlでスコープprovidedを使用して単純に依存関係を追加できます。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
に行く
window->Preference->server->runtime environment
次に、Tomcatサーバーを選択します。エラーがまだある場合は、
right click project->properties>Targeted Runtimes
その後、サーバーを確認してください
import javax.servlet.annotation.*;
(誰もこれを書いたことはありませんが、import this WebInitparamが他のパッケージで認識されないため)
私は同じ問題を抱えていましたが、上記の多くの人がプロジェクトを設定しましたが、問題は解決しなかったため、Apache Tomcat 6をランタイムサーバーとして使用していることが深くわかったので、修正は簡単でした、Apache Tomcat 7を使用するようにプロジェクトをアップグレードしたばかりで、最後にIDE認識javax.servlet.annotation.WebServletアノテーション。
ライブラリ「Server Runtime」をJavaビルドパスに追加すると、問題が解決します。
以下をmavenプロジェクトpom.xmlに追加するだけです:
<dependencies>
<dependency>
<groupId>javax</groupId>
<artifactId>javaee-web-api</artifactId>
<version>6.0</version>
<scope>provided</scope>
</dependency>
</dependencies>
IBM RADを使用している場合は、プロジェクトビルドパス->ライブラリタブでj2ee.jarを削除し、「外部jarの追加」をクリックして、RADに同梱されているj2ee.jarを選択します。
Springを使用して同じ問題が発生しましたが、Tomcat Server Runtimeを追加してパスを構築しました。