Jak zaimportować interfejs API javax.servlet do mojego projektu Eclipse?

320

Chcę rozwijać się za pomocą serwletów w środowisku Eclipse, ale mówi, że pakietu javax.servletnie można rozwiązać. Jak mogę dodać javax.servletpakiet do mojego projektu Eclipse?

Tomek
źródło
próbuję uruchomić prosty serwlet typu „cześć”, zwykle gdybym chciał stworzyć GUI, importowałbym java ...... swing. *; Nie mogę znaleźć odpowiedniego importu dla serwletu
tom

Odpowiedzi:

415

Upewnij się, że masz odpowiednie środowisko Eclipse i serwer

Upewnij się, że używasz co najmniej Eclipse IDE dla programistów Enterprise Java (z Enterprise ). Zawiera narzędzia programistyczne do tworzenia dynamicznych projektów internetowych i łatwej integracji kontenerów serwletów (narzędzia te są częścią Web Tools Platform, WTP). Jeśli masz już Eclipse IDE dla Java (bez Enterprise) i ręcznie zainstalowałeś niektóre powiązane wtyczki, istnieje prawdopodobieństwo, że nie zostało to zrobione poprawnie. Najlepiej usuń go i weź prawdziwy Eclipse IDE dla Enterprise Java One.

Musisz również upewnić się, że masz już na swoim komputerze zainstalowany serwlet-kontener, który implementuje co najmniej taką samą wersję API serwletów jak serwlet-kontener w środowisku produkcyjnym, na przykład Apache Tomcat , Oracle GlassFish , JBoss AS / WildFly itp. Zwykle po prostu wystarczy pobrać plik ZIP i rozpakować go. W przypadku Tomcat nie pobieraj formatu EXE, który dotyczy tylko środowisk produkcyjnych opartych na systemie Windows. Zobacz także ao Kilka portów (8005, 8080, 8009) wymaganych przez serwer Tomcat na serwerze lokalnym jest już używanych .

Servletcontainer to konkretna implementacja Servlet API. Należy pamiętać, że pakiet Java EE SDK ze strony Oracle.com zasadniczo zawiera GlassFish. Więc jeśli zdarzyło Ci się już pobrać Java EE SDK, to w zasadzie masz już GlassFish. Należy również pamiętać, że na przykład GlassFish i JBoss AS / WildFly są czymś więcej niż kontenerem serwletów, obsługują także JSF, EJB, JPA i wszystkie inne funkcje związane z Java EE. Zobacz także ao Czym dokładnie jest Java EE?


Zintegruj serwer w Eclipse i powiąż go z programem Project

Po zainstalowaniu zarówno Eclipse for Enterprise Java, jak i servletcontainer na twoim komputerze, wykonaj następujące kroki w Eclipse:

  1. Zintegruj servletcontainer w Eclipse

    za. Przez widok serwerów

    • Otwórz widok Serwery w dolnym polu.
    • Kliknij prawym przyciskiem myszy i wybierz Nowy> Serwer .
    • Wybierz odpowiednią markę i wersję kontenera serwletów i przejdź przez kreatora.

      wprowadź opis zdjęcia tutaj

    b. Lub poprzez preferencje Eclipse

    • Otwórz okno> Preferencje> Serwer> Środowiska wykonawcze .
    • Tutaj możesz dodawać , edytować i usuwać serwery.

      wprowadź opis zdjęcia tutaj

  2. Skojarz serwer z projektem

    za. W nowym projekcie

    • Otwórz Project Navigator / Explorer po lewej stronie.
    • Kliknij prawym przyciskiem myszy i wybierz Nowy> Projekt, a następnie w menu Internet> Dynamiczny projekt sieciowy .
    • W kreatorze ustaw docelowy czas wykonywania na zintegrowany serwer.

      wprowadź opis zdjęcia tutaj

    b. Lub w istniejącym projekcie

    • Kliknij prawym przyciskiem myszy projekt i wybierz Właściwości .
    • W sekcji Docelowe środowiska wykonawcze wybierz serwer zintegrowany.

      wprowadź opis zdjęcia tutaj

    Tak czy inaczej, Eclipse automatycznie pobierze biblioteki kontenera serwletów na ścieżkę kompilacji. W ten sposób będziesz mógł importować i używać interfejsu API serwletów.


Nigdy nie noś ze sobą luźnych plików JAR specyficznych dla serwera

W żadnym wypadku nie powinieneś majstrować przy właściwości ścieżki budowania projektu. Należy przede wszystkim nigdy ręcznie skopiować / download / ruch / include indywidualny servletcontainer-specyficzny biblioteki podoba servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar, javaee.jar, itd doprowadziłoby to tylko do przenoszenia przyszłości, kompatybilności, ścieżki klasy i łatwość konserwacji kłopotów, ponieważ webapp nie będzie działać, gdy jest wdrożone do kontenera serwletów innej marki / wersji niż te, z których biblioteki te zostały pierwotnie pozyskane.

Jeśli używasz Maven, musisz absolutnie upewnić się, że biblioteki specyficzne dla kontenera serwletów, które są już dostarczane przez docelowy środowisko wykonawcze, są oznaczone jako <scope>provided</scope>.

Oto kilka typowych wyjątki, które można uzyskać, kiedy ściółka /WEB-INF/liblub nawet /JRE/lib, /JRE/lib/extitp z bibliotekami servletcontainer specyficzne w próbie nieostrożnego aby naprawić błędy kompilacji:

BalusC
źródło
4
@BalusC Jeśli do budowy projektu używam Apache Ant, jak dynamicznie dołączać folder /lib(servlet-api.jar & jsp-api.jar) kontenera serwletu? Czy też muszę na <property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>
stałe zakodować
1
@BalusC dlaczego projekty maven tworzone przy użyciu archetypu maven-archetype-webappnie uwzględniają JAR serwletu-api jako zależności? Projekt ma plik index.jsp z błędem kompilacji. (Eclipse Luna Budowa Numer 20140612-0600 JDK 8 M2eclipse)
Arun
1
servlet-apiZależności @arun są dostarczane przez środowiska wykonawcze serwletów, takie jak Tomcat, Wildfly, Glassfish itp.,. Nigdy nie dołączaj go jako części aplikacji, ponieważ istnieje duża możliwość, że koliduje on z otoczeniem.
asgs
@BalusC, 1) Czy javax.servlet-api-3.1.0.jar jest równy tomcat8 / lib / servlet-api.jar? Dekompiluję dwa słoiki, a potem stwierdzam, że klasy / interfejsy są takie same. 2) Czy javax.servlet-api-3.1.0.jar jest neutralny dla kontenerów (nie jest bibliotekami specyficznymi dla serwletów)?
gfan
@gfan: problemem technicznym nie jest to, czy biblioteki dostarczone przez kontener są „neutralne dla kontenerów”, ale pierwszeństwo i kolejność ładowania klas. Jeśli biblioteki dostarczone przez kontener są ładowane przez niewłaściwy moduł ładujący klasy (np. Przez moduł ładujący klasy webapp), może dojść do spustoszenia, nawet jeśli jest to „przypadkowo” dokładnie ta sama wersja. Po prostu nie udostępniaj bibliotek dostarczanych przez kontener z duplikatów poza kontenerem. Kropka.
BalusC
220

import javax.servlet

KROK 1

Przejdź do właściwości swojego projektu (za pomocą przycisku Alt+ Enterlub kliknięcia prawym przyciskiem myszy)

KROK 2

sprawdź Apache Tomcat v7.0 w Docelowym środowisku wykonawczym i działa.

prayagupd
źródło
2
Pomógł mi dodać środowisko wykonawcze JBOSS. Moja lista była pusta.
rozpiętość
2
To było dla mnie rozwiązanie. Ustawiłem tomcat 6.0 jako środowisko wdrażania (jako serwer w środowisku Eclipse), ale zaniedbałem określanie go jako środowiska środowiska wykonawczego ... Zgaduję, że oznacza to, że może on znaleźć pliki .jars w moim folderze tomcat / lib w czasie wykonywania, ale nie w czasie kompilacji.
Paul
Dzięki! Ale jak mogę usunąć kopie serwerów mu? Mam Apache Tomcat v7.0 (2) i (3), które chcę usunąć. Czy ktoś wie jak?
Robben
Nie pomogło mi rozwiązać problemu The import javax.servlet cannot be resolved.
mrgloom 21.04.17
1
To działa! Dzięki, @mrgloom, możesz chcieć usunąć serwer i utworzyć nowy serwer w swoim lokalnym hoście
Freddie Fabregas
81

Mała różnica od Hari:

Kliknij prawym przyciskiem myszy projekt ---> Właściwości ---> Ścieżka kompilacji Java ---> Dodaj bibliotekę ... ---> Środowisko wykonawcze serwera ---> Apache Tomcat ----> Zakończ.

ivanLam
źródło
3
Witaj ivanLam, Apache Tomcat nie wyświetla się po uruchomieniu serwera? Co zrobić teraz!
Sandeep Pattanaik,
15

Dołącz servlet-api.jar z folderu lib serwera.wprowadź opis zdjęcia tutaj

Zrób ten krok

wprowadź opis zdjęcia tutaj

sarath
źródło
1
Rozwiązanie nie działa, nadal mam błąd Wystąpił błąd kontenera potomnego podczas uruchamiania java.util.concurrent.ExecutionException: org.apache.catalina.LifecycleException: Nie można uruchomić komponentu [StandardEngine [Catalina] .StandardHost [localhost] .StandardContext [/ messenger]]
Maya Mohite
13

Dodaj zależność javax.servlet w pom.xml. Twój problem zostanie rozwiązany.

<dependency>
    <groupId>javax.servlet</groupId>
    <artifactId>javax.servlet-api</artifactId>
    <version>3.0.1</version>
    <scope>provided</scope>
</dependency>
Zeeshan Akhter
źródło
12

Szybka poprawka - działało to w Eclipse - Kliknij prawym przyciskiem myszy na projekt -> Właściwości -> Ścieżka kompilacji Java (Tab) -> Dodaj zewnętrzne pliki JAR -> zlokalizuj implementację jar aplet apletu (jeśli Tomcat - o nazwie servlet-api.jar) -> Kliknij OK. Otóż ​​to !!

Hari Gudigundla
źródło
14
W odniesieniu do wyżej BalusC postu nigdy ręcznie skopiować / download / ruch / obejmują poszczególne biblioteki servletcontainer specyficzne jak servlet-api.jar, jsp-api.jar, el-api.jar, j2ee.jar, javaee.jar, itd. To doprowadzi tylko do przenoszenia przyszłej ścieżki klasy, kompatybilność, łatwość konserwacji i kłopotów.
Aniket Kulkarni
5

możesz po prostu skopiować servlet-api.jari skopiować pliki jar do folderu lib, który znajduje się w WEB-INF. następnie po prostu wyczyść i zbuduj swój projekt, twoje błędy zostaną rozwiązane.

  **OR**

możesz bezpośrednio dodawać pliki jar do biblioteki, wykonując następujące czynności.

  1. Kliknij projekt prawym przyciskiem myszy.
  2. Przejdź do właściwości.
  3. Przejdź do ścieżki kompilacji Java.
  4. Wybierz opcję Dodaj bibliotekę z kart.
  5. Dodaj pliki jar
  6. podaj ścieżkę do swojego servlet-api.jarpliku.
  7. Oczyść i zbuduj swój projekt.
Mitul Maheshwari
źródło
Downvoting, w nawiązaniu do powyżej BalusC post i Aniket Kulkarni komentarza, nigdy ręcznie skopiować / download / ruch / obejmują poszczególne biblioteki servletcontainer specyficzne jak servlet-api.jar, jsp-api.jar, javaee.jar, itd. To prowadzi tylko do przenośności przyszłość, zgodności, ścieżki klasy i łatwość konserwacji kłopotów.
el-teedee
5

Wiem, że to stary post. Zauważyłem jednak inny przypadek, w którym w projekcie dodano już Tomcat, ale nadal pojawia się ten błąd. Czy to rozwiązać, że:
Alt + Enter
Aspekty projektu
Po prawej stronie, obok szczegółów, znajduje się kolejna zakładka „Runtimes”. Zainstalowany serwer tomcat zostanie tam wymieniony. Wybierz to.
Zapisz konfigurację i GOTOWE!

Mam nadzieję, że to komuś pomoże.

KNP
źródło
3

Z wikipedii .

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>");
  }
}

Działa to oczywiście tylko wtedy, gdy dodano servlet-api.jarścieżkę kompilacji Eclipse. Zazwyczaj twój serwer aplikacji (np. Tomcat ) będzie miał odpowiedni plik jar.

Juha Syrjälä
źródło
3

W przypadku projektów maven dodaj następującą zależność:

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

Odniesienie

W przypadku projektów stopniowych:

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

lub pobierz javax.servlet.jari dodaj do swojego projektu.

Joby Wilson Mathews
źródło
2

Podczas tworzenia projektu otrzymywałem wyjątek wskaźnika zerowego dotyczący „Dynamic Web Module”.

Aby projekt się skompilował (to znaczy, aby javax.servletpomyślnie go zaimportować) musiałem przejść do Właściwości projektu , wybrać Aspekty projektu na pasku bocznym, zaznaczyć Dynamiczny moduł internetowy i kliknąć Zastosuj .

Zaskakujące jest to, że tym razem aspekt „Dynamic Web Module” został poprawnie zainstalowany, a import zaczął działać.

Ivan Vučica
źródło
2

W moim przypadku, kiedy poszedłem do ekranu docelowego środowiska uruchomieniowego , Tomcat 7 nie był wymieniony (wyłączony), mimo że został zainstalowany.

Aby to naprawić, musiałem przejść do Preferencje-> Serwer-> Środowiska wykonawcze, a następnie odinstalować i ponownie zainstalować Tomcat 7.

Paul LeBeau
źródło
2

Wielu z nas rozwija się w Eclipse poprzez projekt Maven. Jeśli tak, możesz uwzględnić zależności Tomcat w Maven za pomocą słoików tomcat-servlet-apii tomcat-jsp-api. Istnieje jeden dla każdej wersji Tomcat. Zwykle providedwystarczy dodać te z lunetą do POM. Dzięki temu kompilacja będzie bardziej przenośna.

Jeśli zaktualizujesz Tomcat w przyszłości, po prostu zaktualizujesz również wersję tych słoików.

Erica Kane
źródło
0

Przede wszystkim nigdy nie należy ręcznie kopiować / pobierać / przenosić / dołączać poszczególnych bibliotek specyficznych dla kontenera serwletów, takich jak servlet-api.jar

@BalusC,

Wolałbym używać dokładnie tych klas, których będzie używać moja aplikacja, niż tych dostarczonych przez Eclipse (kiedy czuję się jak twórca paranoików).

Innym rozwiązaniem byłoby użycie Eclipse „Konfiguruj ścieżkę kompilacji”> Biblioteki> Dodaj zewnętrzne słoiki i dodać aplet apletu dowolnego kontenera, który zdecyduje się użyć.

I zastosuj rozwiązanie @kaustav datta, gdy używasz mrówki do budowania - masz właściwość taką jak tomcat.home lub weblogic.home. Wprowadza jednak inne ograniczenie, że programista musi zainstalować Weblogic na swoim komputerze lokalnym, jeśli jest używany weblogic! Jakieś inne czystsze rozwiązanie?

RuntimeException
źródło
0

To może być również powód. wymyśliłem następujące 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>

Nierozwiązany problem był spowodowany wyłączeniem spring-boot-starter-tomcat. Wystarczy usunąć <exclusions>...</exclusions>zależność, aby rozwiązać problem, ale upewnij się, że to spowoduje również wykluczenie wbudowanego serwera tomcat.

Jeśli potrzebujesz także wbudowanego serwera tomcat, możesz dodać tę samą zależność compile scope.

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-tomcat</artifactId>
    <scope>compile</scope>
</dependency>
Muhammad Usman
źródło