回答:
エンタープライズ Java開発者向けに少なくともEclipse IDEを使用していることを確認してください(エンタープライズと共に)。動的なWebプロジェクトを作成し、サーブレットコンテナを簡単に統合するための開発ツールが含まれています(これらのツールはWeb Tools Platform、WTPの一部です)。すでにEclipse IDE for Java(Enterpriseなし)があり、関連するプラグインを手動でインストールした場合は、正しく実行されなかった可能性があります。あなたはそれをゴミ箱に捨てて、エンタープライズJava 1用の実際のEclipse IDEを入手するのが最善です。
また、Apache Tomcat、Oracle GlassFish、JBoss 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 for Enterprise Javaとservletcontainerの両方をマシンにインストールしたら、Eclipseで次の手順を実行します。
Eclipseでservletcontainerを統合する
a。サーバービュー経由
b。または、Eclipse設定から
サーバーをプロジェクトに関連付ける
a。新しいプロジェクトで
左側のProject Navigator / Explorerを開きます。
そこで右クリックし、[新規]> [プロジェクト ] を選択して、メニューで[Web ] > [動的Webプロジェクト ] を選択します。
ウィザードで、ターゲットランタイムを統合サーバーに設定します。
b。または、既存のプロジェクトで
どちらの方法でも、Eclipseはビルドパスにあるサーブレットコンテナーのライブラリを自動的に取得します。これにより、サーブレットAPIをインポートして使用できるようになります。
とにかく、いじる必要はないはずです 、プロジェクトのビルドパスプロパティ。あなたは上記のすべてのすべきことはありません手動のような個々のservletcontainer固有のライブラリが含ま/ /ダウンロード/移動をコピーservlet-api.jar
、jsp-api.jar
、el-api.jar
、j2ee.jar
、javaee.jar
あなたのWebアプリケーションは、作業するとき、それはのではないだろうので、などはそれだけで、将来の移植性、互換性、クラスパスおよび保守トラブルにつながりますそれらのライブラリが最初に取得された場所とは異なるmake / versionのservletcontainerにデプロイされます。
Mavenを使用している場合は、ターゲットランタイムによってすでに提供されているservletcontainer固有のライブラリがとしてマークされていることを完全に確認する必要があります<scope>provided</scope>
。
コンパイルエラーを修正しようとする不注意な試みで、servletcontainer固有のライブラリを使用して、/WEB-INF/lib
または、さらに/JRE/lib
は/JRE/lib/ext
、などを散らかすときに取得できるいくつかの典型的な例外を次に示します。
<property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>
などのようにハードコーディングする必要がありますか
maven-archetype-webapp
、servlet-api JARが依存関係に含まれていないのはなぜですか?プロジェクトには、コンパイルエラーのあるindex.jspがあります。(EclipseのルナビルドID:20140612から0600、JDK 8、M2eclipse)
servlet-api
依存関係は、Tomcat、Wildfly、Glassfishなどのサーブレットランタイム環境によって提供されます。これをアプリの一部として含めないでください。環境と衝突する可能性があるためです。
プロジェクトのプロパティに移動します(Alt+ Enterまたは右クリックで)
ターゲットランタイムの下でApache Tomcat v7.0を確認してください。
The import javax.servlet cannot be resolved
でした。
Hariとの少しの違い:
プロジェクトを右クリック--->プロパティ---> Javaビルドパス--->ライブラリを追加... --->サーバーランタイム---> Apache Tomcat ---->完了。
サーバーのlibフォルダーからservlet-api.jarを含めます。
このステップを実行
pom.xmlにjavax.servlet依存関係を追加します。あなたの問題は解決されます。
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
クイックフィックス-これはEclipseで機能しました-プロジェクトを右クリック->プロパティ-> Javaビルドパス(タブ)->外部JARを追加->サーブレットAPI jar実装を見つけます(Tomcat-その名前のservlet-api.jarの場合)-> OKをクリックします。それでおしまい !!
servlet-api.jar
、jsp-api.jar
、el-api.ja
R、 j2ee.jar
、javaee.jar
それだけで将来の移植性、互換性、クラスパスおよび保守トラブルにつながる、など。
単純にをコピーしてservlet-api.jar
、そのjarファイルをWEB-INFにあるlibフォルダーにコピーできます。その後、プロジェクトをクリーンアップしてビルドするだけで、エラーは解決されます。
**OR**
次の手順を使用して、jarファイルをライブラリに直接追加できます。
servlet-api.jar
ファイルのパスを指定します。servlet-api.jar
、jsp-api.jar
、javaee.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>
Gradleプロジェクトの場合:
dependencies {
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
またはダウンロードjavax.servlet.jar
してプロジェクトに追加します。
何よりも、servlet-api.jarのような個々のservletcontainer固有のライブラリを手動でコピー/ダウンロード/移動/インクルードしないでください。
@BalusC、
私は、Eclipseによって提供されるクラスではなく、私のアプリケーションが使用するクラスとまったく同じクラスを使用したいと思います(私が妄想的な開発者のように感じている場合)。
別の解決策は、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>
、それは問題をressolveしますが、依存関係を確認してこれをやっても、サーバのTomcat埋め込ま除外されます。
組み込みのTomcatサーバーも必要な場合は、と同じ依存関係を追加できますcompile scope
。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>compile</scope>
</dependency>