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?
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.
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:
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.
b. Lub poprzez preferencje Eclipse
Otwórz okno> Preferencje> Serwer> Środowiska wykonawcze .
Tutaj możesz dodawać , edytować i usuwać serwery.
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.
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.
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 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
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.
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.
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.
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 !!
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.
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!
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;publicclassHelloWorldextendsHttpServlet{publicvoid doGet(HttpServletRequest request,HttpServletResponse response)throwsServletException,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.
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ć.
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.
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.
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?
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.
Odpowiedzi:
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:
Zintegruj servletcontainer w Eclipse
za. Przez widok serwerów
Wybierz odpowiednią markę i wersję kontenera serwletów i przejdź przez kreatora.
b. Lub poprzez preferencje Eclipse
Tutaj możesz dodawać , edytować i usuwać serwery.
Skojarz serwer z projektem
za. W nowym projekcie
W kreatorze ustaw docelowy czas wykonywania na zintegrowany serwer.
b. Lub w istniejącym projekcie
W sekcji Docelowe środowiska wykonawcze wybierz serwer zintegrowany.
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/lib
lub nawet/JRE/lib
,/JRE/lib/ext
itp z bibliotekami servletcontainer specyficzne w próbie nieostrożnego aby naprawić błędy kompilacji:źródło
<property name="tomcat.home" value="D:\\Program Files\\Apache Software Foundation\\apache-tomcat-6.0.36"/>
maven-archetype-webapp
nie 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)servlet-api
Zależ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.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.
źródło
The import javax.servlet cannot be resolved
.Mała różnica od Hari:
źródło
Dołącz servlet-api.jar z folderu lib serwera.
Zrób ten krok
źródło
Dodaj zależność javax.servlet w pom.xml. Twój problem zostanie rozwiązany.
źródło
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 !!
źródło
servlet-api.jar
,jsp-api.jar
,el-api.ja
r,j2ee.jar
,javaee.jar
, itd. To doprowadzi tylko do przenoszenia przyszłej ścieżki klasy, kompatybilność, łatwość konserwacji i kłopotów.możesz po prostu skopiować
servlet-api.jar
i 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.możesz bezpośrednio dodawać pliki jar do biblioteki, wykonując następujące czynności.
servlet-api.jar
pliku.źródło
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.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.
źródło
Z wikipedii .
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.źródło
W przypadku projektów maven dodaj następującą zależność:
Odniesienie
W przypadku projektów stopniowych:
lub pobierz
javax.servlet.jar
i dodaj do swojego projektu.źródło
Podczas tworzenia projektu otrzymywałem wyjątek wskaźnika zerowego dotyczący „Dynamic Web Module”.
Aby projekt się skompilował (to znaczy, aby
javax.servlet
pomyś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ć.
źródło
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.
źródło
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-api
itomcat-jsp-api
. Istnieje jeden dla każdej wersji Tomcat. Zwykleprovided
wystarczy 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.
źródło
@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?
źródło
To może być również powód. wymyśliłem następujące
pom.xml
.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
.źródło