[解決済み] Eclipseプロジェクトでjavax.servlet / jakarta.servlet APIをインポートするにはどうしたらいいですか?
質問
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で次の手順を実行します。
-
Eclipseでservletcontainerを統合する
a. ビアサーバービュー
-
を開く サーバー ビューを表示します。
-
そこで右クリックし、以下を選択します。 サーバーの新規作成 .
-
適切なservletcontainerのmakeとversionを選び、ウィザードを進めてください。
b. または、Eclipseのプリファレンスから
-
-
サーバーとプロジェクトの関連付け
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
などを、サーブレットコンテナ固有のライブラリに置き換えることで、コンパイルエラーを修正しようとする不注意がありました。
- java.lang.NullPointerException at org.apache.jsp.index_jsp._jspInit
- java.lang.NoClassDefFoundError: javax/el/ELResolver
- java.lang.NoSuchFieldError: IS_DIR
- java.lang.NoSuchMethodError: javax.servlet.jsp.PageContext.getELContext()Ljavax/el/ELContext;
- java.lang.AbstractMethodError: javax.servlet.jsp.JspFactory.getJspApplicationContext(Ljavax/servlet/ServletContext;)Ljavax/servlet/jsp/JspApplicationContext.JspFactory.GetJspContext(Ljavax/jsp/ServletContext;)
- org.apache.jasper.JasperException: メソッド getJspApplicationContext(ServletContext) is undefined for the type JspFactory
- java.lang.VerifyError: (class: org/apache/jasper/runtime/JspApplicationContextImpl, method: createELResolver signature.JspApplicationContextImpl, method: createELResolver signature.JspApplicationContextImpl): ()Ljavax/el/ELResolver;) 関数への非互換な引数
- jar がロードされていない。Servlet Spec 2.3, section 9.7.2 を参照してください。問題のあるクラス: javax/servlet/Servlet.class
関連
-
Java コンパイルエラー - スレッド "main" で例外 java.lang.Error: 未解決のコンパイル問題です。
-
[解決済み] JavaでInputStreamを読み込んでStringに変換するにはどうすればよいですか?
-
[解決済み] Mavenを使用して、依存関係を持つ実行可能なJARを作成するにはどうすればよいですか?
-
[解決済み] Javaでネストされたループから抜け出すには?
-
[解決済み] EclipseのAndroidプラグインで "Debug certificate expired "エラーが発生する。
-
[解決済み] Eclipseを高速化する方法とは?
-
[解決済み] Eclipseにプロジェクトをインポートした後に「Must Override a Superclass Method」エラーが発生する。
-
[解決済み] Rが解決できない - Androidエラー
-
[解決済み] Eclipse HotKey: タブの切り替えはどうやるの?
-
[解決済み] どうすればEclipseに.*ファイルを表示させることができますか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
Java エラー報告 スレッド "main" での例外 java.util.NoSuchElementException
-
スタイルが読み込まれず、ブラウザのコンソールでエラーが報告される。リソースはスタイルシートとして解釈されますが、MIMEタイプtext/htmlで転送されます。
-
[解決済み] ServletException、HttpServletResponse、HttpServletRequest が型解決できない[重複]。
-
[解決済み] javax.servlet.jsp.PageContext を型に解決できない [重複] 。
-
javaの実行中に「javaの例外が発生しました」と表示された場合はどうすればよいですか?
-
javaで非静的な解を静的な参照にすることができない
-
[オリジナル】java学習ノート【II】よくあるエラー クラスパス上のクラスファイルが見つからない、またはアクセスできない場合
-
コミットには何も追加されないが、未追跡のファイルが存在し、gitで未追跡のファイルに対する完璧な解決策
-
maven プラグイン エラー プラグインの実行は、ライフサイクル構成ソリューションの対象外です。
-
[解決済み] インポートjavax.servletが解決できない [重複] 。