1. ホーム
  2. java

[解決済み] Eclipseプロジェクトでjavax.servlet / jakarta.servlet APIをインポートするにはどうしたらいいですか?

2022-03-17 23:10:11

質問

EclipseでServletを開発したいのですが、パッケージが javax.servlet / jakarta.servlet が解決できない。どうすれば javax.servlet / jakarta.servlet パッケージをEclipseプロジェクトに追加できますか?

どのように解決するのですか?

EclipseとServerのバージョンが合っていることを確認します。

最低でも以下のものを使用していることを確認してください。 のためのEclipse IDE エンタープライズ Java開発者 (を使用)。 エンタープライズ ). 動的なWebプロジェクトを作成し、サーブレットコンテナを簡単に統合するための開発ツールが含まれています(これらのツールは、Web Tools Platform、WTPの一部です)。すでにEclipse IDE for Java(Enterpriseなし)を持っていて、いくつかの関連プラグインを手動でインストールした場合、それが適切に行われなかった可能性があります。そのような場合は、それを破棄し、本物のEclipse IDE for Enterprise Javaを入手するのがベストです。

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

servletcontainer は、Servlet API の具体的な実装です。ただし Java EE SDK Oracle.comでダウンロードしたものには、基本的にGlassFishが含まれています。したがって、もしあなたがJava EE SDKをすでにダウンロードしているのであれば、基本的にGlassFishをすでに持っていることになります。また、例えば、GlassFishとJBoss AS/WildFlyは、以下の通りです。 より 単なるサーブレットコンテナではなく、JSF、EJB、JPA、その他Java EEに関連するすべての機能がサポートされています。a.o. も参照してください。 Java EEとは一体何なのか?

正しいサーブレットパッケージを使用していることを確認する

javax.* パッケージは jakarta.* パッケージは、Jakarta EE 9 (Tomcat 10, TomEE 9, WildFly 22 Preview, GlassFish 6, Payara 6, Liberty 22, etc) の一部である Servlet API バージョン 5.0 以降で提供されています。したがって、これらのサーバー・バージョンまたはそれ以降をターゲットにしている場合は、次のように置き換える必要があります。

import javax.servlet.*;
import javax.servlet.http.*;

によって

import jakarta.servlet.*;
import jakarta.servlet.http.*;

を実行すると、このビルドエラーに直面する危険性があります。

<ブロッククオート

スーパークラス "javax.servlet.http.HttpServlet" が Java Build Path に見つかりませんでした。

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

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

  1. Eclipseでservletcontainerを統合する

    a. ビアサーバービュー

    • を開く サーバー ビューを表示します。

    • そこで右クリックし、以下を選択します。 サーバーの新規作成 .

    • 適切なservletcontainerのmakeとversionを選び、ウィザードを進めてください。

    b. または、Eclipseのプリファレンスから

    • 開く ウィンドウ >環境設定 >サーバー >ランタイム環境 .

    • できること 追加 , 編集 削除 サーバはここにあります。

  2. サーバーとプロジェクトの関連付け

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

    • を開く プロジェクト・ナビゲーター/エクスプローラー をクリックすると、左側に表示されます。

    • そこで右クリックし、以下を選択します。 新規プロジェクト をクリックし、メニューから Web > ダイナミックWebプロジェクト .

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

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

    • プロジェクトを右クリックし、以下を選択します。 プロパティ .

    • 対象となるランタイム セクションで、統合サーバーを選択します。

    どちらの方法でも、その後Eclipseは自動的にservletcontainerのライブラリをビルドパスに取り込みます。こうすることで、サーブレットAPIをインポートして使用することができるようになります。

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

をいじる必要はありません。 ビルドパス プロパティを使用します。特に 決して のようなサーブレットコンテナ固有のライブラリを手動でコピー/ダウンロード/移動/インクルードします。 servlet-api.jar , jsp-api.jar , el-api.jar , j2ee.jar , javaee.jar など。なぜなら、あなたのウェブアプリケーションは、これらのライブラリが元々取得された場所とは異なるメーカー/バージョンのservletcontainerにデプロイされたときに動作しなくなるからです。

Maven を使用している場合、ターゲットランタイムによってすでに提供されているサーブレットコンテナ固有のライブラリを <scope>provided</scope> . 適切な pom.xml Tomcat 10+、Tomcat 9-、JEE 9+、JEE 8-の依存性宣言は、この回答で説明しています。 Tomcat 9 は、サーブレットを jakarta.servlet.http.HttpServlet ではなく javax.servlet.Servlet にキャストしています。

をポイ捨てしたときに発生する典型的な例外をいくつか紹介します。 /WEB-INF/lib あるいは /JRE/lib , /JRE/lib/ext などを、サーブレットコンテナ固有のライブラリに置き換えることで、コンパイルエラーを修正しようとする不注意がありました。