Wie importiere ich die javax.servlet-API in mein Eclipse-Projekt?


320

Ich möchte mit Servlets in Eclipse entwickeln, aber es heißt, dass das Paket javax.servletnicht aufgelöst werden kann. Wie kann ich javax.servletmeinem Eclipse-Projekt ein Paket hinzufügen ?


Ich versuche, ein einfaches Hallo-Wort-Servlet auszuführen. Normalerweise würde ich Java importieren, wenn ich eine GUI machen wollte. Ich kann nicht den richtigen Import für ein Servlet finden
Tom

Antworten:


414

Stellen Sie sicher, dass Sie die richtige Eclipse und den richtigen Server haben

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?


Integrieren Sie den Server in Eclipse und ordnen Sie ihn dem Projekt zu

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:

  1. Integrieren Sie den Servletcontainer in Eclipse

    ein. Über Serveransicht

    • Öffne das Serveransicht im unteren Feld.
    • Klicken Sie dort mit der rechten Maustaste und wählen Sie Neu> Server .
    • Wählen Sie die entsprechende Servletcontainer-Marke und -Version aus und führen Sie den Assistenten durch.

      Geben Sie hier die Bildbeschreibung ein

    b. Oder über Eclipse-Einstellungen

    • Öffnen Sie Fenster> Einstellungen> Server> Laufzeitumgebungen .
    • Hier können Sie Server hinzufügen , bearbeiten und entfernen .

      Geben Sie hier die Bildbeschreibung ein

  2. Server mit Projekt verknüpfen

    ein. In neuem Projekt

    • Öffnen Sie den Projektnavigator / Explorer auf der linken Seite.
    • Klicken Sie dort mit der rechten Maustaste und wählen Sie Neu> Projekt und dann im Menü Web> Dynamisches Webprojekt .
    • Stellen Sie im Assistenten die Ziellaufzeit auf den integrierten Server ein.

      Geben Sie hier die Bildbeschreibung ein

    b. Oder in einem bestehenden Projekt

    • Klicken Sie mit der rechten Maustaste auf das Projekt und wählen Sie Eigenschaften .
    • In Gezielte Runtimes Abschnitt, wählen Sie den integrierten Server.

      Geben Sie hier die Bildbeschreibung ein

    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.


Tragen Sie niemals lose serverspezifische JAR-Dateien mit sich herum

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/liboder sogar /JRE/lib, /JRE/lib/extusw. mit servletcontainer spezifischen Bibliotheken in einem sorglosen Versuch , die Zusammenstellung Fehler zu beheben:


4
@BalusC Wenn ich Apache Ant zum Erstellen meines Projekts verwende, wie füge ich den Ordner /lib(servlet-api.jar & jsp-api.jar) des Servlet-Containers dynamisch ein? Oder muss ich den Pfad zum Ordner / lib wie - <property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>etc
kaustav datta

1
@BalusC Warum werden Maven-Projekte mit Archetyp erstellt, die maven-archetype-webappdie 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)
Arun

1
@ arun- servlet-apiAbhä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.
Asgs

@BalusC, 1) Ist javax.servlet-api-3.1.0.jar gleich tomcat8 / lib / servlet-api.jar? Ich dekompiliere die beiden Gläser und finde dann, dass die Moust der Klassen / Interfaces gleich sind. 2) Ist javax.servlet-api-3.1.0.jar container-neutral (keine servletcontainer-spezifischen Bibliotheken)?
Gfan

@gfan: Technisches Problem ist nicht, ob von Containern bereitgestellte Bibliotheken "container-neutral" sind, sondern das Vorrang und die Reihenfolge beim Laden von Klassen. Wenn von Containern bereitgestellte Bibliotheken vom falschen Klassenladeprogramm geladen werden (z. B. über den Webapp-Klassenladeprogramm), kann dies zu Problemen führen, selbst wenn es sich "zufällig" um genau dieselbe Version handelt. Stellen Sie nur keine von Containern bereitgestellten Bibliotheken von doppelten Stellen außerhalb des Containers bereit. Zeitraum.
BalusC

220

javax.servlet importieren

SCHRITT 1

Gehen Sie zu den Eigenschaften Ihres Projekts (mit Alt+ Enteroder Rechtsklick).

SCHRITT 2

Überprüfen Sie Apache Tomcat v7.0 unter Targeted Runtime und es funktioniert.


2
Hat mir geholfen, meine JBOSS-Laufzeit hinzuzufügen. Meine Liste war leer.
Spanne

2
Das war die Lösung für mich. Ich hatte Tomcat 6.0 als Bereitstellungsumgebung festgelegt (als Server in Eclipse), habe es jedoch versäumt, es als Laufzeitumgebung anzugeben. aber nicht zur Kompilierungszeit.
Paul

Vielen Dank! Aber wie kann ich Kopien von mu-Servern löschen? Ich habe Apache Tomcat v7.0 (2) und (3), die ich löschen möchte. Weiß jemand wie?
Robben

Hat mir nicht geholfen, das Problem mit zu lösen The import javax.servlet cannot be resolved.
Mrgloom

1
Das funktioniert! Danke, @mrgloom, vielleicht möchten Sie den Server entfernen und einen neuen Server in Ihrem lokalen Host erstellen
Freddie Fabregas

81

Kleiner Unterschied zu Hari:

Klicken Sie mit der rechten Maustaste auf Projekt ---> Eigenschaften ---> Java-Erstellungspfad ---> Bibliothek hinzufügen ... ---> Server-Laufzeit ---> Apache Tomcat ----> Fertig stellen.


3
Hallo ivanLam, wird Apache Tomcat nach der Server-Laufzeit nicht angezeigt? Was nun!
Sandeep Pattanaik

15

Fügen Sie servlet-api.jar aus Ihrem Server-Lib-Ordner hinzu.Geben Sie hier die Bildbeschreibung ein

Mach diesen Schritt

Geben Sie hier die Bildbeschreibung ein


1
Die Lösung funktioniert bei mir immer noch nicht unter dem Fehler. Ein untergeordneter Container ist beim Start fehlgeschlagen. Bote]]
Maya Mohite

13

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>

12

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 !!


14
Mit Bezug auf die oben BalusC Post nie manuell kopieren / download / Bewegung / umfasst die einzelnen servletcontainer spezifischen Bibliotheken wie servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar, javaee.jarusw. Es wäre nur für zukünftige Portabilität führt, Kompatibilität, Classpath und Wartbarkeit Probleme.
Aniket Kulkarni

5

Sie können servlet-api.jardie 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.

  1. Klicken Sie mit der rechten Maustaste auf das Projekt.
  2. Gehen Sie zu Eigenschaften.
  3. Gehen Sie zu Java Build Path.
  4. Wählen Sie auf den Registerkarten die Option Bibliothek hinzufügen.
  5. Jar-Dateien hinzufügen
  6. Geben Sie den Pfad Ihrer servlet-api.jarDatei an.
  7. Reinigen und bauen Sie Ihr Projekt.

Downvoting, mit Bezug auf die oben BalusC Post und Aniket Kulkarni Kommentar, kopieren Sie nie manuell / download / Bewegung / umfassen die einzelnen servletcontainer spezifische Bibliotheken wie servlet-api.jar, jsp-api.jar, javaee.jarwürde usw. Sie nur auf zukünftige Portabilität, Kompatibilität, Classpath und Wartbarkeit Schwierigkeiten führen.
El-Teedee

5

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.


3

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.jarEclipse-Erstellungspfad hinzugefügt haben . Normalerweise verfügt Ihr Anwendungsserver (z. B. Tomcat ) über die richtige JAR-Datei.


3

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>

Referenz

Für Gradle-Projekte:

dependencies {
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}

oder laden Sie es herunter javax.servlet.jarund fügen Sie es Ihrem Projekt hinzu.


2

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.servletimportieren 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.


2

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.


2

Viele von uns entwickeln sich in Eclipse über ein Maven-Projekt. In diesem Fall können Sie Tomcat-Abhängigkeiten über die tomcat-servlet-apiund tomcat-jsp-api-Jars in Maven einfügen. Für jede Version von Tomcat gibt es eine. Normalerweise reicht es aus, diese mit Umfang providedzu Ihrem POM hinzuzufügen . Dadurch bleibt Ihr Build portabler.

Wenn Sie Tomcat in Zukunft aktualisieren, aktualisieren Sie einfach auch die Version dieser Gläser.


0

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?


0

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>
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.