Chcę rozwijać się za pomocą serwletów w środowisku Eclipse, ale mówi, że pakietu javax.servlet
nie można rozwiązać. Jak mogę dodać javax.servlet
pakiet do mojego projektu Eclipse?
Chcę rozwijać się za pomocą serwletów w środowisku Eclipse, ale mówi, że pakietu javax.servlet
nie można rozwiązać. Jak mogę dodać javax.servlet
pakiet do mojego projektu Eclipse?
Odpowiedzi:
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?
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
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.
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:
<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.
Przejdź do właściwości swojego projektu (za pomocą przycisku Alt+ Enterlub kliknięcia prawym przyciskiem myszy)
sprawdź Apache Tomcat v7.0 w Docelowym środowisku wykonawczym i działa.
The import javax.servlet cannot be resolved
.
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.
Dołącz servlet-api.jar z folderu lib serwera.
Zrób ten krok
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>
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 !!
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.
**OR**
możesz bezpośrednio dodawać pliki jar do biblioteki, wykonując następujące czynności.
servlet-api.jar
pliku.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.
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.
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>
W przypadku projektów stopniowych:
dependencies {
providedCompile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.0.1'
}
lub pobierz javax.servlet.jar
i dodaj do swojego projektu.
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ć.
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-api
i tomcat-jsp-api
. Istnieje jeden dla każdej wersji Tomcat. Zwykle provided
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.
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?
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>