Eclipseプロジェクトにjavax.servlet APIをインポートするにはどうすればよいですか?


320

Eclipseでサーブレットを使用して開発したいのですが、パッケージjavax.servletを解決できないと表示されています。javax.servletEclipseプロジェクトにパッケージを追加するにはどうすればよいですか?


単純なhelloワードタイプのサーブレットを実行しようとしています。通常、guiを作成する場合は、java ...... swing。*をインポートします。サーブレットに適切なインポートが見つからない
tom

回答:


415

適切なEclipseとサーバーがあることを確認してください

エンタープライズ Java開発者向けに少なくともEclipse IDEを使用していることを確認してください(エンタープライズと共に)。動的なWebプロジェクトを作成し、サーブレットコンテナを簡単に統合するための開発ツールが含まれています(これらのツールはWeb Tools Platform、WTPの一部です)。すでにEclipse IDE for Java(Enterpriseなし)があり、関連するプラグインを手動でインストールした場合は、正しく実行されなかった可能性があります。あなたはそれをゴミ箱に捨てて、エンタープライズJava 1用の実際のEclipse IDEを入手するのが最善です。

また、Apache TomcatOracle GlassFishJBoss AS / WildFlyなど、本番環境のservletcontainerと少なくとも同じサーブレットAPIバージョンを実装するservletcontainerがマシンにインストールされていることを確認する必要もあります。通常は、 ZIPファイルをダウンロードして解凍すれば十分です。Tomcatの場合は、EXE形式をダウンロードしないでください。これ、Windowsベースの実稼働環境専用です。関連項目ao localhostのTomcatサーバーが必要とするいくつかのポート(8005、8080、8009)はすでに使用されています

servletcontainerは、サーブレットAPIの具体的な実装です。Oracle.comからダウンロードしたJava EE SDKには、基本的にGlassFishが含まれています。したがって、すでにJava EE SDKをダウンロードしている場合は、基本的にすでにGlassFishを入手しています。また、ノート例えばGlassFishのとJBoss AS / WildFlyであることをよりちょうどservletcontainerよりも、彼らはまた、JSF、EJB、JPAおよび他のすべてのJava EEの装飾性をサポートしています。参照ao Java EEとは正確には何ですか?


サーバーをEclipseに統合し、プロジェクトに関連付ける

Eclipse for Enterprise Javaとservletcontainerの両方をマシンにインストールしたら、Eclipseで次の手順を実行します。

  1. Eclipseでservletcontainerを統合する

    a。サーバービュー経由

    • 下部のボックスで[ サーバー]ビューを開きます。

    • そこで右クリックし、「新規」>「サーバー」を選択します

    • 適切なservletcontainerの製造元とバージョンを選択し、ウィザードを進めます。

      ここに画像の説明を入力してください

    b。または、Eclipse設定から

    • [ ウィンドウ]> [設定]> [サーバー]> [ランタイム環境]を開きます

    • あなたはできるの追加編集、および削除ここのサーバを。

      ここに画像の説明を入力してください

  2. サーバーをプロジェクトに関連付ける

    a。新しいプロジェクトで

    • 左側のProject Navigator / Explorerを開きます。

    • そこで右クリックし、[新規]> [プロジェクト ] を選択して、メニューで[Web ] > [動的Webプロジェクト ] を選択します。

    • ウィザードで、ターゲットランタイムを統合サーバーに設定します。

      ここに画像の説明を入力してください

    b。または、既存のプロジェクトで

    • プロジェクトを右クリックし、[ プロパティ]を選択します

    • ターゲット・ランタイム」セクションで、統合サーバーを選択します。

      ここに画像の説明を入力してください

    どちらの方法でも、Eclipseはビルドパスにあるサーブレットコンテナーのライブラリを自動的に取得します。これにより、サーブレットAPIをインポートして使用できるようになります。


緩いサーバー固有のJARファイルを持ち歩かない

とにかく、いじる必要はないはずです 、プロジェクトのビルドパスプロパティ。あなたは上記のすべてのすべきことはありません手動のような個々のservletcontainer固有のライブラリが含ま/ /ダウンロード/移動をコピーservlet-api.jarjsp-api.jarel-api.jarj2ee.jarjavaee.jarあなたのWebアプリケーションは、作業するとき、それはのではないだろうので、などはそれだけで、将来の移植性、互換性、クラスパスおよび保守トラブルにつながりますそれらのライブラリが最初に取得された場所とは異なるmake / versionのservletcontainerにデプロイされます。

Mavenを使用している場合は、ターゲットランタイムによってすでに提供されているservletcontainer固有のライブラリがとしてマークされていることを完全に確認する必要があります<scope>provided</scope>

コンパイルエラーを修正しようとする不注意な試みで、servletcontainer固有のライブラリを使用して、/WEB-INF/libまたは、さらに/JRE/lib/JRE/lib/ext、などを散らかすときに取得できるいくつかの典型的な例外を次に示します。


4
@BalusC Apache Antを使用してプロジェクトをビルドする場合、サーブレットコンテナの/lib(servlet-api.jar&jsp-api.jar)フォルダを動的に含めるにはどうすればよいですか?または、/ libフォルダーへのパスを- <property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>などのようにハードコーディングする必要がありますか
kaustav datta

1
@BalusC mavenプロジェクトがarchlettypeで作成されmaven-archetype-webapp、servlet-api JARが依存関係に含まれていないのはなぜですか?プロジェクトには、コンパイルエラーのあるindex.jspがあります。(EclipseのルナビルドID:20140612から0600、JDK 8、M2eclipse)
アルン

1
@arunのservlet-api依存関係は、Tomcat、Wildfly、Glassfishな​​どのサーブレットランタイム環境によって提供されます。これをアプリの一部として含めないでください。環境と衝突する可能性があるためです。
15

@BalusC、1)javax.servlet-api-3.1.0.jarはtomcat8 / lib / servlet-api.jarと等しいですか?2つのjarを逆コンパイルすると、クラス/インターフェースの大部分が同じであることがわかります。2)javax.servlet-api-3.1.0.jar container-neutral(servletcontainer固有のライブラリではない)ですか?
gfan 2016年

@gfan:技術的な問題は、コンテナ提供のライブラリが「コンテナに依存しない」かどうかではなく、クラスロードの優先順位と順序付けです。コンテナーが提供するライブラリーが間違ったクラスローダーによって(たとえば、webappクラスローダーを介して)ロードされた場合、たとえそれが「偶然に」まったく同じバージョンであっても、事態が悪化する可能性があります。コンテナーが提供するライブラリーを、コンテナー外の重複する場所から提供しないでください。限目。
BalusC 2016年

220

javax.servletのインポート

ステップ1

プロジェクトのプロパティに移動しますAlt+ Enterまたは右クリックで)

ステップ2

ターゲットランタイムの下でApache Tomcat v7.0を確認してください


2
JBOSSランタイムを追加するのに役立ちました。私のリストは空でした。
2014年

2
これが私の解決策でした。(eclipseのサーバーとして)デプロイメント環境としてTomcat 6.0を設定しましたが、それをランタイム環境として指定することを怠っていました...実行時にtomcat / libフォルダーで.jarを見つけることができると思いますが、しかし、コンパイル時ではありません。
Paul

ありがとう!しかし、どうすればmuサーバーのコピーを削除できますか?削除したいApache Tomcat v7.0(2)および(3)があります。誰でも知っていますか?
Robben

の問題を解決するのに役立ちませんThe import javax.servlet cannot be resolvedでした。
mrgloom 2017

1
これでうまくいきます!@mrgloomのおかげで、サーバーを削除してローカルホストに新しいサーバーを作成することができます
Freddie Fabregas

81

Hariとの少しの違い:

プロジェクトを右クリック--->プロパティ---> Javaビルドパス--->ライブラリを追加... --->サーバーランタイム---> Apache Tomcat ---->完了。


3
こんにちはivanLam、Apache Tomcatはサーバーランタイムの後に表示されませんか?今何をする!
Sandeep Pattanaik、2015

15

サーバーのlibフォルダーからservlet-api.jarを含めます。ここに画像の説明を入力してください

このステップを実行

ここに画像の説明を入力してください


1
解決策が機能せず、エラーが引き続き発生するjava.util.concurrent.ExecutionExceptionの開始時に子コンテナが失敗しました:org.apache.catalina.LifecycleException:コンポーネント[StandardEngine [Catalina] .StandardHost [localhost] .StandardContext [/メッセンジャー]]
Maya Mohite

13

pom.xmlにjavax.servlet依存関係を追加します。あなたの問題は解決されます。

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

12

クイックフィックス-これはEclipseで機能しました-プロジェクトを右クリック->プロパティ-> Javaビルドパス(タブ)->外部JARを追加->サーブレットAPI jar実装を見つけます(Tomcat-その名前のservlet-api.jarの場合)-> OKをクリックします。それでおしまい !!


14
BalusCポスト上記を参照して、手動で/ダウンロード/移動をコピーすることはありません/のような個々のservletcontainer固有のライブラリなどがservlet-api.jarjsp-api.jarel-api.jaR、 j2ee.jarjavaee.jarそれだけで将来の移植性、互換性、クラスパスおよび保守トラブルにつながる、など。
Aniket Kulkarni 2013

5

単純にをコピーしてservlet-api.jar、そのjarファイルをWEB-INFにあるlibフォルダーにコピーできます。その後、プロジェクトをクリーンアップしてビルドするだけで、エラーは解決されます。

  **OR**

次の手順を使用して、jarファイルをライブラリに直接追加できます。

  1. プロジェクトを右クリックします。
  2. プロパティに移動します。
  3. Javaビルドパスに移動します。
  4. タブから[ライブラリを追加]オプションを選択します。
  5. JARファイルを追加
  6. servlet-api.jarファイルのパスを指定します。
  7. プロジェクトをクリーンアップしてビルドします。

Downvoting、BalusCポストとAniket Kulkarniさんのコメント上記を参照して、手動/ダウンロード/移動をコピーすることはありません/のような個々のservletcontainer固有のライブラリなどがservlet-api.jarjsp-api.jarjavaee.jarそれだけで将来の移植性、互換性、クラスパスおよび保守トラブルにつながる、など。
el-teedee 2018

5

私はこれが古い記事であることを知っています。しかし、プロジェクトにすでにTomcatが追加されている別のインスタンスを確認しましたが、それでもこのエラーが発生します。これを解決するためにこれを行いましたか:
Alt + Enter
Project Facets
右側の詳細の隣に、別のタブ「Runtime」があります。インストールされたTomcatサーバーがそこにリストされます。それを選択します。
設定を保存して完了!

これが誰かを助けることを願っています。


3

ウィキペディアから。

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class HelloWorld extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
                "Transitional//EN\">\n" +
                "<html>\n" +
                "<head><title>Hello WWW</title></head>\n" +
                "<body>\n" +
                "<h1>Hello WWW</h1>\n" +
                "</body></html>");
  }
}

もちろん、これはservlet-api.jarをEclipseビルドパスに追加した場合にのみ機能します。通常、アプリケーションサーバー(Tomcatなど)には適切なjarファイルがあります。


3

Mavenプロジェクトの場合、次の依存関係を追加します。

<!-- https://mvnrepository.com/artifact/javax.servlet/servlet-api -->
<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>

参照

Gradleプロジェクトの場合:

dependencies {
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}

またはダウンロードjavax.servlet.jarしてプロジェクトに追加します。


2

「動的Webモジュール」に関連するプロジェクトの作成中にnullポインタ例外が発生しました。

取得するには(すること、であるコンパイルするプロジェクトjavax.servlet、正常にインポートするためには)私は、プロジェクトのに行かなければならなかったのプロパティ、選択プロジェクト・ファセットをサイドバーに、ダニの動的Webモジュールをクリックし適用します

驚いたことに、今回は「Dynamic Web Module」ファセットが正しくインストールされ、インポートが機能し始めました。


2

私の場合、ターゲットランタイムの画面に移動すると、Tomcat 7がインストールされているにもかかわらず、リストに表示されません(無効)。

修正するには、Preferences-> Server-> Runtime Environmentsに移動してから、Tomcat 7をアンインストールして再インストールする必要がありました。


2

私たちの多くは、Mavenプロジェクトを介してEclipseで開発しています。その場合は、tomcat-servlet-apiおよびtomcat-jsp-apijar を使用して、MavenにTomcatの依存関係を含めることができます。Tomcatのバージョンごとに1つあります。通常、これらをスコープ付きでprovidedPOMに追加するだけで十分です。これにより、ビルドの移植性が高まります。

今後Tomcatをアップグレードする場合は、これらのjarのバージョンも更新するだけです。


0

何よりも、servlet-api.jarのような個々のservletcontainer固有のライブラリを手動でコピー/ダウンロード/移動/インクルードしないでください。

@BalusC、

私は、Eclipseによって提供されるクラスではなく、私のアプリケーションが使用するクラスとまったく同じクラスを使用したいと思います(私が妄想的な開発者のように感じている場合)。

別の解決策は、Eclipse「Configure Build Path」> Libraries> Add External jarsを使用し、使用することを選択したコンテナのサーブレットAPIを追加することです。

ビルドにantを使用する場合は、@ kaustav dattaのソリューションに従ってください-tomcat.homeやweblogic.homeなどのプロパティを使用してください。ただし、weblogicが使用されている場合、開発者がローカルマシンにWeblogicをインストールする必要があるという別の制約が導入されます。他のクリーナーソリューションはありますか?


0

これも理由かもしれません。私は以下を思いついたpom.xml

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
    <exclusions>
        <exclusion>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-tomcat</artifactId>
        </exclusion>
    </exclusions>
</dependency>

未解決の問題はの除外によるものでしたspring-boot-starter-tomcat。ただ、削除<exclusions>...</exclusions>、それは問題をressolveしますが、依存関係を確認してこれをやっても、サーバのTomcat埋め込ま除外されます。

組み込みのTomcatサーバーも必要な場合は、と同じ依存関係を追加できますcompile scope

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>compile</scope>
</dependency>
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.