web-dev-qa-db-ja.com

javax.servlet.annotation.WebServletをインポートできません。

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でのみ使用します。
どうすれば問題を解決できますか?

34

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のみをサポートします。

56
BalusC

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など)は注釈をサポートしていません。

16
palacsint

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>
11
lazlev

に行く

window->Preference->server->runtime environment

次に、Tomcatサーバーを選択します。エラーがまだある場合は、

right click project->properties>Targeted Runtimes

その後、サーバーを確認してください

3
Khaino
import javax.servlet.annotation.*;

(誰もこれを書いたことはありませんが、import this WebInitparamが他のパッケージで認識されないため)

2
Sobbosachi

私は同じ問題を抱えていましたが、上記の多くの人がプロジェクトを設定しましたが、問題は解決しなかったため、Apache Tomcat 6をランタイムサーバーとして使用していることが深くわかったので、修正は簡単でした、Apache Tomcat 7を使用するようにプロジェクトをアップグレードしたばかりで、最後にIDE認識javax.servlet.annotation.WebServletアノテーション。

2
grails-coder

ライブラリ「Server Runtime」をJavaビルドパスに追加すると、問題が解決します。

1
user2038106

以下をmavenプロジェクトpom.xmlに追加するだけです:

<dependencies>
          <dependency>
            <groupId>javax</groupId>
            <artifactId>javaee-web-api</artifactId>
            <version>6.0</version>
            <scope>provided</scope>
         </dependency>
  </dependencies>
1
toludav

IBM RADを使用している場合は、プロジェクトビルドパス->ライブラリタブでj2ee.jarを削除し、「外部jarの追加」をクリックして、RADに同梱されているj2ee.jarを選択します。

1
Piyush Chordia

Springを使用して同じ問題が発生しましたが、Tomcat Server Runtimeを追加してパスを構築しました。

0
murillo.cjr