Eclipseでサーブレットを使って開発したいのですが、パッケージjavax.servlet
を解決できないと言われています。 Eclipseプロジェクトにjavax.servlet
パッケージを追加するにはどうすればいいですか?
少なくとも Eclipse IDE forJava EE開発者 (EE)。動的なWebプロジェクトを作成し、サーブレットコンテナを簡単に統合するための開発ツールが含まれています(これらのツールはWeb Tools Platform、WTPの一部です)。 Eclipse IDE for Java(EEなし)があり、EE関連のプラグインを手動でインストールした場合、適切に実行されなかった可能性があります。 IDE EEの代わりに、実際のEclipse Javaを入手してください。
また、少なくとも Apache Tomcat 、 Oracle 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とは正確に何ですか?
Java EE用のEclipseとサーブレットコンテナーの両方をマシンにインストールしたら、Eclipseで次の手順を実行します。
Eclipseでservletcontainerを統合する
a。 Via Serversビュー
b。 または、Eclipseの設定を介して
サーバーをプロジェクトに関連付けます
a。 新しいプロジェクトで
ウィザードで、Target Runtimeを統合サーバーに設定します。
b。 または、既存のプロジェクトで
どちらの場合でも、Eclipseはサーブレットパスのビルドパス内のライブラリを自動的に取得します。これにより、サーブレットAPIをインポートして使用できるようになります。
いずれにしても、プロジェクトのBuild Pathプロパティをいじる必要はありません。何よりもneverservlet-api.jar
、jsp-api.jar
などの個々のサーブレットコンテナ固有のライブラリを手動でコピー/ダウンロード/移動/インクルードする必要があります。 el-api.jar
、j2ee.jar
、javaee.jar
など。将来の移植性、互換性、クラスパス、および保守性の問題につながるだけです。なぜなら、Webアプリケーションが別のサーブレットコンテナーにデプロイされると機能しなくなるからです。それらのライブラリが最初に取得された場所よりもmake/version。
Mavenを使用している場合は、ターゲットランタイムによって既に提供されているservletcontainer固有のライブラリが<scope>provided</scope>
としてマークされていることを絶対に確認する必要があります。
コンパイルエラーを不注意に修正しようとすると、サーブレットコンテナ固有のライブラリで/WEB-INF/lib
、または/JRE/lib
、/JRE/lib/ext
などを散らかすときに発生する可能性のある典型的な例外を次に示します。
プロジェクトのプロパティに移動します(
ターゲットランタイム(+++)の下の==(#++ Apache Tomcat v7.0 == @)==をチェックしてください。 AltEnter
check on Apache Tomcat v7.0 under Targeted Runtime and it works.
ハリとは少し違います。
プロジェクトを右クリックし、[プロパティ]、[Javaビルドパス]、[ライブラリを追加]、[Server Runtime]、[Apache Tomcat]、[Finish]の順にクリックします。
サーバのlibフォルダにあるservlet-api.jarを含めます。
このステップを実行してください
クイックフィックス - これはEclipseで動作しました - プロジェクトを右クリック - >プロパティ - > Javaビルドパス(タブ) - >外部JARの追加 - >サーブレットAPI jar実装を探します(Tomcatの場合 - その名前はservlet-api.jar) - > OKをクリックしてください。それでおしまい !!
Pom.xmlにjavax.servlet依存関係を追加します。あなたの問題は解決されます。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
これは古い投稿です。しかし、プロジェクト内にTomcatがすでに追加されている別のインスタンスを確認しましたが、それでもこのエラーが発生します。これを解決するためにこれを行いました:
Alt + Enter
プロジェクトファセット
右側の詳細の隣には、もう1つのタブ「ランタイム」があります。インストールされているTomcatサーバーがそこに表示されます。それを選択してください。
設定を保存して[完了]をクリックします。
これが誰かに役立つことを願っています。
あなたは単にservlet-api.jar
をコピーして、そのjarファイルをlib-folder(WEB-INFにある)にコピーすることができます。それからプロジェクトをきれいにしてビルドしてください。あなたのエラーは解決されるでしょう。
**OR**
次の手順でjarファイルをライブラリに直接追加できます。
servlet-api.jar
ファイルのパスを与えてください。ウィキペディア から。
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ファイルを持つでしょう。
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
をダウンロードしてプロジェクトに追加してください。
私たちの多くはMavenプロジェクトを介してEclipseで開発しています。もしそうなら、Tomcat-servlet-api
とTomcat-jsp-api
のjarファイルを通してMavenにTomcatの依存関係を含めることができます。 Tomcatのバージョンごとに存在します。通常、範囲provided
でこれらをPOMに追加すれば十分です。これにより、ビルドの移植性が高まります。
将来Tomcatをアップグレードする場合は、これらのjarのバージョンも更新するだけです。
私の場合、 Targetted Runtimes 、画面に行ったとき、Tomcat 7がインストールされていてもリストに表示されていませんでした(無効)。
解決するには、 設定 - >サーバー - >ランタイム環境 の順に選択し、Tomcat 7をアンインストールしてから再インストールします。
「ダイナミックWebモジュール」に関連するプロジェクトの作成中にnullポインター例外が発生していました。
プロジェクトをコンパイルするには(つまり、正常にインポートするにはjavax.servlet
に)、プロジェクトのPropertiesに移動し、サイドバーのProject Facets、Dynamic Web Moduleにチェックマークを付け、Apply。
驚いたことに、今回は「Dynamic Web Module」ファセットが正しくインストールされ、インポートが機能し始めました。
とりわけ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をインストールする必要があるという別の制約があります。他のきれいな解決策はありますか?
これも理由である可能性があります。次の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>