web-dev-qa-db-ja.com

Eclipseプロジェクトにjavax.servlet APIをインポートする方法を教えてください。

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

303
tom

適切なEclipseおよびサーバーを使用していることを確認してください

少なくとも Eclipse IDE forJava EE開発者EE)。動的なWebプロジェクトを作成し、サーブレットコンテナを簡単に統合するための開発ツールが含まれています(これらのツールはWeb Tools Platform、WTPの一部です)。 Eclipse IDE for Java(EEなし)があり、EE関連のプラグインを手動でインストールした場合、適切に実行されなかった可能性があります。 IDE EEの代わりに、実際のEclipse Javaを入手してください。

また、少なくとも Apache TomcatOracle GlassFishなど)、本番環境のサーブレットコンテナと少なくとも同じサーブレットAPIバージョンを実装するサーブレットコンテナがマシンにインストールされていることを確認する必要がありますJBoss AS / WildFly など。通常、Zipファイルをダウンロードして解凍するだけで十分です。 Tomcatの場合、EXE形式をnotダウンロードしないでください。これはWindowsベースの運用環境専用です。 a.oも参照してください。 localhostのTomcatサーバーに必要ないくつかのポート(8005、8080、8009)は既に使用されています

Servletcontainerは、Servlet APIの具体的な実装です。 Oracle.comでダウンロードした Java EE SDK には基本的にGlassFishが含まれていることに注意してください。したがって、Java EE SDKを既にダウンロードしている場合は、基本的に既にGlassFishがあります。また、たとえば、GlassFishとJBoss AS/WildFlyはサーブレットコンテナだけではなくであり、JSF、EJB、JPA、およびその他すべてのJava EE空想もサポートします。 。 a.oも参照してください。 Java EEとは正確に何ですか?


サーバーをEclipseに統合し、Projectに関連付けます

Java EE用のEclipseとサーブレットコンテナーの両方をマシンにインストールしたら、Eclipseで次の手順を実行します。

  1. Eclipseでservletcontainerを統合する

    a。 Via Serversビュー

    • 下のボックスのServersビューを開きます。
    • そこを右クリックして、New> Serverを選択します。
    • 適切なservletcontainerのメーカーとバージョンを選択し、ウィザードを進めます。

      enter image description here

    b。 または、Eclipseの設定を介して

    • Window> Preferences> Server> Runtime Environmentsを開きます。
    • ここで、AddEdit、およびRemoveサーバーを使用できます。

      enter image description here

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

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

    • 左側のProject Navigator/Explorerを開きます。
    • そこを右クリックしてNew> Projectを選択し、メニューでWeb> Dynamic Web Projectを選択します。
    • ウィザードで、Target Runtimeを統合サーバーに設定します。

      enter image description here

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

    • プロジェクトを右クリックして、Propertiesを選択します。
    • Targeted Runtimesセクションで、統合サーバーを選択します。

      enter image description here

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


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

いずれにしても、プロジェクトのBuild Pathプロパティをいじる必要はありません。何よりもneverservlet-api.jarjsp-api.jarなどの個々のサーブレットコンテナ固有のライブラリを手動でコピー/ダウンロード/移動/インクルードする必要があります。 el-api.jarj2ee.jarjavaee.jarなど。将来の移植性、互換性、クラスパス、および保守性の問題につながるだけです。なぜなら、Webアプリケーションが別のサーブレットコンテナーにデプロイされると機能しなくなるからです。それらのライブラリが最初に取得された場所よりもmake/version。

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

コンパイルエラーを不注意に修正しようとすると、サーブレットコンテナ固有のライブラリで/WEB-INF/lib、または/JRE/lib/JRE/lib/extなどを散らかすときに発生する可能性のある典型的な例外を次に示します。

402
BalusC

import javax.servletプロジェクトのプロパティに移動します(

+または右クリック)

ターゲットランタイム(+++)の下の==(#++ Apache Tomcat v7.0 == @)==をチェックしてください。 AltEnter

STEP 2

check on Apache Tomcat v7.0 under Targeted Runtime and it works.

217
prayagupd

ハリとは少し違います。

プロジェクトを右クリックし、[プロパティ]、[Javaビルドパス]、[ライブラリを追加]、[Server Runtime]、[Apache Tomcat]、[Finish]の順にクリックします。

77
ivanLam

サーバのlibフォルダにあるservlet-api.jarを含めます。 enter image description here

このステップを実行してください

enter image description here

13
sarath

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

12
Hari Gudigundla

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

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

これは古い投稿です。しかし、プロジェクト内にTomcatがすでに追加されている別のインスタンスを確認しましたが、それでもこのエラーが発生します。これを解決するためにこれを行いました:
Alt + Enter
プロジェクトファセット
右側の詳細の隣には、もう1つのタブ「ランタイム」があります。インストールされているTomcatサーバーがそこに表示されます。それを選択してください。
設定を保存して[完了]をクリックします。

これが誰かに役立つことを願っています。

5
KNP

あなたは単にservlet-api.jarをコピーして、そのjarファイルをlib-folder(WEB-INFにある)にコピーすることができます。それからプロジェクトをきれいにしてビルドしてください。あなたのエラーは解決されるでしょう。

  **OR**

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

  1. プロジェクトを右クリックしてください。
  2. プロパティに移動します。
  3. Javaビルドパスに行きます。
  4. タブからAdd Libraryオプションを選択します。
  5. Jarファイルを追加する
  6. あなたのservlet-api.jarファイルのパスを与えてください。
  7. プロジェクトを整理して構築します。
5

ウィキペディア から。

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
Juha Syrjälä

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>

参照

グラドルプロジェクトの場合:

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

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

3

私たちの多くはMavenプロジェクトを介してEclipseで開発しています。もしそうなら、Tomcat-servlet-apiTomcat-jsp-apiのjarファイルを通してMavenにTomcatの依存関係を含めることができます。 Tomcatのバージョンごとに存在します。通常、範囲providedでこれらをPOMに追加すれば十分です。これにより、ビルドの移植性が高まります。

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

2
Erica Kane

私の場合、 Targetted Runtimes 、画面に行ったとき、Tomcat 7がインストールされていてもリストに表示されていませんでした(無効)。

解決するには、 設定 - >サーバー - >ランタイム環境 の順に選択し、Tomcat 7をアンインストールしてから再インストールします。

2
Paul LeBeau

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

プロジェクトをコンパイルするには(つまり、正常にインポートするにはjavax.servletに)、プロジェクトのPropertiesに移動し、サイドバーのProject FacetsDynamic Web Moduleにチェックマークを付け、Apply

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

2
Ivan Vučica

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

@BalusC、

私は(私が妄想的な開発者のように感じているときに)Eclipseが提供するクラスよりも、私のアプリケーションが使用しようとしているクラスそのものを使用したいと思います。

もう1つの解決策は、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>依存関係を削除するだけですが、確認これを行うと、組み込みTomcatサーバーも除外されます。

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

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-Tomcat</artifactId>
    <scope>compile</scope>
</dependency>
0
Muhammad Usman