Ich möchte mit Servlets in Eclipse entwickeln, aber es heißt, dass das Paket javax.servlet
nicht aufgelöst werden kann. Wie kann ich javax.servlet
meinem Eclipse-Projekt ein Paket hinzufügen ?
Ich möchte mit Servlets in Eclipse entwickeln, aber es heißt, dass das Paket javax.servlet
nicht aufgelöst werden kann. Wie kann ich javax.servlet
meinem Eclipse-Projekt ein Paket hinzufügen ?
Antworten:
Stellen Sie sicher, dass Sie mindestens Eclipse IDE für Enterprise Java-Entwickler (mit Enterprise ) verwenden. Es enthält Entwicklungstools zum Erstellen dynamischer Webprojekte und zum einfachen Integrieren von Servletcontainern (diese Tools sind Teil der Web Tools Platform, WTP). Falls Sie bereits Eclipse IDE für Java (ohne Enterprise) hatten und einige verwandte Plugins manuell installiert haben, besteht die Möglichkeit, dass dies nicht ordnungsgemäß durchgeführt wurde. Am besten werfen Sie es in den Papierkorb und holen sich die echte Eclipse IDE für Enterprise Java.
Sie müssen auch sicherstellen, dass auf Ihrem Computer bereits ein Servletcontainer installiert ist, der mindestens dieselbe Servlet-API-Version wie der Servletcontainer in der Produktionsumgebung implementiert, z. B. Apache Tomcat , Oracle GlassFish , JBoss AS / WildFly usw. Normalerweise nur Das Herunterladen und Extrahieren der ZIP-Datei ist ausreichend. Laden Sie im Fall von Tomcat nicht das EXE-Format herunter , sondern nur für Windows-basierte Produktionsumgebungen. Siehe auch ua Mehrere von Tomcat Server bei localhost benötigte Ports (8005, 8080, 8009) werden bereits verwendet .
Ein Servletcontainer ist eine konkrete Implementierung der Servlet-API. Notiere dass der Java EE SDK- Download bei Oracle.com im Wesentlichen GlassFish enthält. Wenn Sie also bereits Java EE SDK heruntergeladen haben, haben Sie im Grunde bereits GlassFish. Beachten Sie auch, dass beispielsweise GlassFish und JBoss AS / WildFly mehr als nur ein Servletcontainer sind, sondern auch JSF, EJB, JPA und alle anderen Java EE-Funktionen unterstützen. Siehe auch ao Was genau ist Java EE?
Führen Sie die folgenden Schritte in Eclipse aus, nachdem Sie sowohl Eclipse for Enterprise Java als auch einen Servletcontainer auf Ihrem Computer installiert haben:
Integrieren Sie den Servletcontainer in Eclipse
ein. Über Serveransicht
Wählen Sie die entsprechende Servletcontainer-Marke und -Version aus und führen Sie den Assistenten durch.
b. Oder über Eclipse-Einstellungen
Server mit Projekt verknüpfen
ein. In neuem Projekt
Stellen Sie im Assistenten die Ziellaufzeit auf den integrierten Server ein.
b. Oder in einem bestehenden Projekt
In Gezielte Runtimes Abschnitt, wählen Sie den integrierten Server.
In beiden Fällen übernimmt Eclipse dann automatisch die Bibliotheken des Servletcontainers im Erstellungspfad. Auf diese Weise können Sie die Servlet-API importieren und verwenden.
Sie sollten auf keinen Fall die Notwendigkeit haben, in der Build Path- Eigenschaft des Projekts herumzuspielen. Sie sollten vor allem nie manuell kopieren / download / Bewegung / umfassen die einzelnen servletcontainer spezifische Bibliotheken wie servlet-api.jar
, jsp-api.jar
, el-api.jar
, j2ee.jar
,javaee.jar
, usw. Es wäre nur für zukünftige Portabilität, Kompatibilität, Classpath und Wartbarkeit Schwierigkeiten führen, weil Ihr Webapp nicht funktionieren würde , wenn es Bereitgestellt auf einem Servlet-Container eines anderen Herstellers / einer anderen Version als dem, von dem diese Bibliotheken ursprünglich bezogen wurden.
Wenn Sie Maven verwenden, müssen Sie unbedingt sicherstellen, dass servletcontainer-spezifische Bibliotheken, die bereits von der Ziellaufzeit bereitgestellt werden, als gekennzeichnet sind <scope>provided</scope>
.
Hier sind einige typische Ausnahmen , die Sie erhalten, wenn Sie verunreinigen die /WEB-INF/lib
oder sogar /JRE/lib
, /JRE/lib/ext
usw. mit servletcontainer spezifischen Bibliotheken in einem sorglosen Versuch , die Zusammenstellung Fehler zu beheben:
<property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>
etc
maven-archetype-webapp
die Servlet-API-JAR nicht als Abhängigkeit enthalten? Das Projekt hat eine index.jsp mit Kompilierungsfehler. (Eclipse Luna Build-ID: 20140612-0600, JDK 8, M2eclipse)
servlet-api
Abhängigkeiten werden von den Servlet-Laufzeitumgebungen wie Tomcat, Wildfly, Glassfish usw. bereitgestellt. Nehmen Sie es niemals in Ihre App auf, da es eine gute Möglichkeit gibt, dass es mit der Umgebung in Konflikt gerät.
Gehen Sie zu den Eigenschaften Ihres Projekts (mit Alt+ Enteroder Rechtsklick).
Überprüfen Sie Apache Tomcat v7.0 unter Targeted Runtime und es funktioniert.
The import javax.servlet cannot be resolved
.
Kleiner Unterschied zu Hari:
Klicken Sie mit der rechten Maustaste auf Projekt ---> Eigenschaften ---> Java-Erstellungspfad ---> Bibliothek hinzufügen ... ---> Server-Laufzeit ---> Apache Tomcat ----> Fertig stellen.
Fügen Sie servlet-api.jar aus Ihrem Server-Lib-Ordner hinzu.
Mach diesen Schritt
Fügen Sie die Abhängigkeit javax.servlet in pom.xml hinzu. Ihr Problem wird gelöst.
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<version>3.0.1</version>
<scope>provided</scope>
</dependency>
Schnellkorrektur - Dies funktionierte in Eclipse - Klicken Sie mit der rechten Maustaste auf Projekt -> Eigenschaften -> Java-Erstellungspfad (Registerkarte) -> Externe JARs hinzufügen -> Suchen Sie die Servlet-API-JAR-Implementierung (falls Tomcat den Namen servlet-api.jar hat) -> OK klicken. Das ist es !!
servlet-api.jar
, jsp-api.jar
, el-api.ja
r, j2ee.jar
, javaee.jar
usw. Es wäre nur für zukünftige Portabilität führt, Kompatibilität, Classpath und Wartbarkeit Probleme.
Sie können servlet-api.jar
die JAR-Dateien einfach kopieren und in den lib-Ordner kopieren, der sich in WEB-INF befindet. Dann bereinigen und erstellen Sie einfach Ihr Projekt, Ihre Fehler werden behoben.
**OR**
Sie können JAR-Dateien direkt zur Bibliothek hinzufügen, indem Sie die folgenden Schritte ausführen.
servlet-api.jar
Datei an.servlet-api.jar
, jsp-api.jar
, javaee.jar
würde usw. Sie nur auf zukünftige Portabilität, Kompatibilität, Classpath und Wartbarkeit Schwierigkeiten führen.
Ich weiß, dass dies ein alter Beitrag ist. Ich habe jedoch eine andere Instanz beobachtet, in der Tomcat im Projekt bereits hinzugefügt wurde, aber wir erhalten immer noch diesen Fehler. Hat dieses Problem zu beheben , dass:
Alt + Enter
Projekt Facets
Auf der rechten Seite neben Details, ist ein weiterer Reiter „Runtimes“. Der installierte Tomcat-Server wird dort aufgelistet. Wählen Sie es aus.
Speichern Sie die Konfiguration und fertig!
Hoffe das hilft jemandem.
Aus Wikipedia .
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>");
}
}
Dies funktioniert natürlich nur, wenn Sie den servlet-api.jar
Eclipse-Erstellungspfad hinzugefügt haben . Normalerweise verfügt Ihr Anwendungsserver (z. B. Tomcat ) über die richtige JAR-Datei.
Fügen Sie für Maven-Projekte folgende Abhängigkeit hinzu:
<!-- 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>
Für Gradle-Projekte:
dependencies {
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
oder laden Sie es herunter javax.servlet.jar
und fügen Sie es Ihrem Projekt hinzu.
Ich habe während der Projekterstellung eine Nullzeigerausnahme im Zusammenhang mit "Dynamic Web Module" erhalten.
Um das Projekt zu kompilieren erhalten (das heißt, javax.servlet
importieren erfolgreich) musste ich Projekts gehen Eigenschaften , Pick - Projekt Facets in der Seitenleiste, tick Dynamische Web - Modul und klicken Sie auf Übernehmen .
Überraschenderweise wurde diesmal die Facette "Dynamic Web Module" korrekt installiert und der Import begann zu funktionieren.
In meinem Fall wurde Tomcat 7 trotz Installation nicht aufgelistet (deaktiviert) , als ich zum Bildschirm Targetted Runtimes ging.
Um dies zu beheben, musste ich zu Einstellungen-> Server-> Laufzeitumgebungen gehen und dann Tomcat 7 deinstallieren und neu installieren.
Viele von uns entwickeln sich in Eclipse über ein Maven-Projekt. In diesem Fall können Sie Tomcat-Abhängigkeiten über die tomcat-servlet-api
und tomcat-jsp-api
-Jars in Maven einfügen. Für jede Version von Tomcat gibt es eine. Normalerweise reicht es aus, diese mit Umfang provided
zu Ihrem POM hinzuzufügen . Dadurch bleibt Ihr Build portabler.
Wenn Sie Tomcat in Zukunft aktualisieren, aktualisieren Sie einfach auch die Version dieser Gläser.
Sie sollten vor allem niemals die einzelnen servletcontainer-spezifischen Bibliotheken wie servlet-api.jar manuell kopieren / herunterladen / verschieben / einschließen
@ BalusC,
Ich würde es vorziehen, die genauen Klassen zu verwenden, die meine Anwendung verwenden wird, anstatt die von Eclipse bereitgestellten (wenn ich mich wie ein paranoider Entwickler fühle).
Eine andere Lösung wäre die Verwendung von Eclipse "Konfigurationspfad konfigurieren"> Bibliotheken> Externe Jars hinzufügen und Servlet-API für jeden Container hinzufügen, den Sie verwenden möchten.
Befolgen Sie die Lösung von @kaustav datta, wenn Sie ant zum Erstellen verwenden - haben Sie eine Eigenschaft wie tomcat.home oder weblogic.home. Es führt jedoch eine weitere Einschränkung ein, dass der Entwickler Weblogic auf seinem lokalen Computer installieren muss, wenn Weblogic verwendet wird! Irgendeine andere sauberere Lösung?
Dies könnte auch der Grund sein. Ich habe mir Folgendes ausgedacht 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>
Das ungelöste Problem war auf den Ausschluss von zurückzuführen spring-boot-starter-tomcat
. Entfernen <exclusions>...</exclusions>
Sie einfach die Abhängigkeit, um das Problem zu beheben, aber stellen Sie sicher , dass dadurch auch der eingebettete Tomcat-Server ausgeschlossen wird.
Wenn Sie auch einen eingebetteten Tomcat-Server benötigen, können Sie dieselbe Abhängigkeit mit hinzufügen compile scope
.
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>compile</scope>
</dependency>