#08.1 – uruchamiamy aplikacje webowe w Eclipse

By 8 września 2015Kurs Javy

Pisaliśmy już o tym, jak uruchamiać normalne aplikacje pod Eclipse, dzisiaj pokażemy, jak zrobić to samo z aplikacjami webowymi.

Sposób uruchamiania aplikacji webowych różni się od standardowych tym, że muszą one być uruchamiane wewnątrz tzw. serwera aplikacji, dlatego cały proces wygląda trochę inaczej. Na szczęście Eclipse zdecydowanie ułatwia nam zadanie.

Zanim zaczniemy

Przed konfiguracją Eclipse warto pobrać najnowszą wersję serwera aplikacji, na którym będziemy pracować. Opcją ‚podstawową’ jest tutaj Apache Tomcat – jest to dość okrojony kontener, który pozwoli nam uruchamiać aplikacje webowe w prosty sposób, a jednocześnie nie obciąży za bardzo komputera.

Najnowszą wersję można pobrać na oficjalnej stronie projektu, wersja 8 wymaga Javy 7 oraz pracuje ze specyfikacją Servler API w wersji 3.1, więcej informacji można znaleźć na stronie https://tomcat.apache.org/whichversion.html.

Apache Tomcat jest oczywiście napisany w języku Java i nie wymaga instalacji – wystarczy rozpakować plik ZIP w dowolnym miejscu na dysku (nie będziemy bezpośrednio korzystali z plików, więc może to być jakiś folder, do którego nie zaglądamy za często).

Dodawanie serwera aplikacji w Eclipse

Okienko serwerów aplikacji dostępne jest w perspektywie ‚Java EE’ (oczywiście, zawsze można je manualnie aktywować w menu view). Dla przypomnienia, perspektywę możemy zmienić w prawym górnym rogu ekranu:

Screenshot_1

Wybór perspektywy

Okno serwerów aplikacji początkowo powinno być puste, z opcją dodania kolejnego:

Screenshot_2

Puste okno serwerów aplikacji

Po kliknięciu pojawi się nowe okno z możliwością wyboru rodzaju serwera, jaki chcemy uruchomić.

Wybór rodzaju serwera aplikacji, który chcemy dodać

Wybór rodzaju serwera aplikacji, który chcemy dodać

Ponieważ musimy najpierw skonfigurować serwer, wybieramy opcję ‚Next’.

Kolejnym krokiem jest podanie ścieżki do katalogu, w którym zainstalowany (rozpakowany) jest serwer oraz wybranie używanego JRE. Wygląd tego okna zależy od konkretnego typu serwera aplikacji, który wybraliśmy w poprzednim oknie i pozwala na jego konfigurację.

Konfiguracja serwera aplikacji

Konfiguracja serwera aplikacji

Uwaga! Jeśli wcześniej już konfigurowałeś ten typ serwera aplikacji, Eclipse pozwoli Ci wybrać istniejącą konfigurację już na poprzednim ekranie.

Po konfiguracji wybieramy opcję ‚Finish’. Przejście dalej przeniesie nas do wyboru aplikacji, które chcemy uruchamiać na tym serwerze, ale uruchomimy go z menu, aby zobaczyć jak to robić już po skonfigurowaniu serwera.

Uruchamianie aplikacji w ramach serwera aplikacji

Masz już skonfigurowany serwer aplikacji :) Teraz należy jeszcze dodać do niego aplikacje, tj powiedzieć, który z otwartych projektów ma być uruchamiany. Robimy to w oknie ‚Add and remove’, do którego możemy dostać się poprzez menu kontekstowe:

Menu kontekstowe serwera aplikacji

Menu kontekstowe serwera aplikacji

W oknie, które się pojawi, po prawej stronie są aplikacje skonfigurowane na wybranym serwerze, a po lewej aplikacje, które są dostępne w naszym workspace. W najprostszym wypadku będzie to lista projektów/modułów Maven, które mają packaging WAR. Elementy możemy przenosić pomiędzy listami za pomocą przycisków.

Okno konfiguracji aplikacji na serwerze

Okno konfiguracji aplikacji na serwerze

Po wszystkim zamykamy okno klikając na ‚finish’. Nasz serwer powinien teraz uruchamiać także naszą aplikację, która powinna być wypisana po ‚rozwinięciu’ serwera:

Szybki podgląd aplikacji uruchomionych na serwerze

Szybki podgląd aplikacji uruchomionych na serwerze

Jak pewnie zauważyłaś, możemy tutaj wyświetlić także zależności, które ten projekt deklaruje, a które są dostępne w naszym workspace.

Teraz nie pozostaje nic innego, jak tylko uruchomić nasz serwer aplikacji, i zweryfikować, czy nasza aplikacja działa tak, jak chcieliśmy :)

Warto tutaj jeszcze wspomnieć, że domyślnie jeśli serwer aplikacji jest uruchomiony, za każdym razem jak zapiszemy jakieś zmiany w projekcie, zmiany zostaną wdrożone i uruchomione na serwerze. Często wymaga to restartu serwera, co może być irytujące – można to jednak wyłaczyć w opcjach serwera.

Ustawienia serwera aplikacji

Domyślnie po dodaniu aplikacji do serwera, jest ona dostępna pod adresem /{nazwa projektu} . Możemy to modyfikować (lub po prostu podejrzeć) w oknie ustawień serwera.

Aby je uruchomić, klikamy dwukrotnie na wybrany serwer aplikacji. Pojawi się okno z dwoma zakładkami – pierwsza pozwala na konfiguracje samego serwera, portów itp, z kolei druga jest dla nas bardziej interesująca – pokazuje wszystkie moduły, które będą uruchamiane wraz z serwerem.

Lista aplikacji uruchamianych na serwerze.

Lista aplikacji uruchamianych na serwerze.

Podsumowanie

Eclipse ma całkiem przyjemne wsparcie dla różnych serwerów aplikacji, konfiguracja jest dość łatwa i bezproblemowa. Niestety czasem zdarzają się problemy, których rozwiązaniem jest najczęściej skonfigurowanie serwera od nowa. Mimo tych niedogodności, korzystanie z serwerów aplikacji nie przynosi większych niedogodności.

  •  
  •  
  •  
  • 5
  •  
  • Michal1511

    Hej,

    Bardzo fajny poradnik, na pewno się przyda :)

    ps. Na końcu zjedliście literkę „w” w słowie „serwerów”
    „Mimo tych niedo­god­ności, korzys­tanie z ser­w­eró aplikacji nie przynosi więk­szych niedogodności.”

    Pozdrawiam!

  • kasia

    Nie dalej jak 3 miesiące temu z koleżanką szukałyśmy sposobów uruchomienia programów serwerowych z eclipse :) Przyda się wszystkim początkującym w apkach serwerowych :)

    • Super, cieszymy się, że się przydało! :)

  • Kamil

    w spisie lekcji (Kurs Java) jest niepoprawny link do tego artykułu

    • Faktycznie, zakradł się jakiś wielokropek. Już poprawione, dziękujemy za zwrócenie uwagi!

  • Marek

    Hej, proszę o pomoc!
    Mam plik webapp, w którym packing jest ustawiony na war, jednak po kliknieciu add or remove na serwerze wyskakuje kominikat: ” There are no resources that can be added or removed from the server”. Co jest nie tak?

  • Karol

    Mnie Maven chyba przerasta, może to kwestia, że na razie nie mogę pojąć istoty działania…Zaimportowałem projekt z lekcji #08 uporałem się z błedem musiałem użyć Generate Deployment Descriptor. Teraz po odpaleniu aplikacji w serwerze tomcat otrzymuje http status 404. Noże to kwestia, że źle uruchamiam aplikację? Robię jak ze zwykłą stroną jsp czyli run on server i wybieram tomcat. Może wcześniej potrzebuję skompilować jakoś projekt? Np Maven build? Choć z drugiej strony nie tworzyliśmy jeszcze serwletów, więc nie wiem jak projekt powinien się zachować. Przepraszam jeśli moja wypowiedź jest zbyt haotyczna, ale powoli zaczynam się zrażać, że niewiele rozumiem. Wcześniej używałem HTML i CSS i w małym stopniu JS. Są to dopiero moje początki programowania, a JAVA wydaję się być językiem godnym nauki dlatego go wybrałem, nie wiem czy nie za ciężkim na początek by zrozumieć całą istotę mvc do tego zarządzanie projektami w maven. Czy każdego początki to taka nerwówka?

    • Cześć, czasem jeśli jest jakiś błąd w pliku web.xml, serwer nie uruchamia się i pojawiają się niechciane 404. Wydaje mi się, że problem mógł się pojawić podczas importu – plik web.xml powinien być w paczce, którą importowałeś i nie powinieneś musieć go generować.
      Spróbuj zaimportować ponownie albo podeślij paczkę zip plików projektu, które masz na dysku – postaramy się zlokalizować błąd i pomóc go rozwiązać ;)

      Początki zawsze są trudne, ale potem jest już tylko łatwiej :) Jeśli to w jakikolwiek sposób pomoże – wielu programistów napotyka na problemy kiedy rozpoczyna korzystanie z niego. Grunt to się nie poddawać, próbować dalej a za jakiś czas będziesz w stanie samodzielnie rozwiązywać wszystkie problemy z Mavenem i przede wszystkim – unikać ich powstawania :)

      • Karol

        Jasne nie załamuję się i działam dalej:)
        Tylko nie wiem czy dobrze importuje mi projekt w Maven. Ponieważ kiedy robię import wrzuca mi tak jakby 4 projekty. Pierwszy to przez add to working set zapewne i 3 projekty aplikacji (koty-application, koty-domain, koty-webapp). Po imporcie koty-webapp wyświetlają błąd The superclass „javax.servlet.http.HttpServlet” was not found on the Java Build Path ale bez problemu można to rozwiązać Project->Properties->Target Runtimes->Apache Tomcat, może ma tu znaczenie że używam wersji eclipse
        Version: 3.7.1.RELEASE
        Build Id: 201510041213
        Platform: Eclipse Mars.1 (4.5.1)
        Po imporcie i rozwiązaniu problemów robie run on server koty-webapp i niestety HTTP Status 404, ni jak nie wiem jak ruszyć z miejsca:/ Aplikacja pobrana z lekcji 9, na końcu strony.

        • Hmm, zaimportowaliśmy żeby zweryfikować i wszystko działa – wklej może logi na pastebin i podeślij, zobaczymy czy coś znajdziemy, co może być problemem :)

          Zwróć też uwagę, że pod / nie jest skonfigurowany żaden kontroler. U nas po wejściu pod adres http://localhost:8080/koty-webapp/lista pojawia się lista kotów zgodnie z oczekiwaniami :)

          • Karol

            Usunąłem, zrobiłem import z zaznaczonym add to working set (nie wiem czemu domyślnie podpowiada koty tak jak ma być). Naprawiłem błąd który wyświetlał się. I już działa, pokazuje listę z linkami do odpowiednik kotów oraz funkcją która w przyszłości ma dodawać koty. Dzięki za pomoc ruszam do kolejnej lekcji to tej z pewnością wrócę, bo na razie wiele rzeczy jest dla mnie nie jasnych.

  • Michał

    Jeśli komuś nie chce się uruchomić Add and Remove przy konfiguracji serwera to zazwyczaj pomaga wybranie z menu kontekstowego –> maven —> update project. Ja miałem z tym problem.

    • To powinno rozwiązać problemy, jeśli Eclipse nie ‚załapał’ czegoś związanego z Mavenem. Na pewno warto spróbować jako jeden z kroków przy szukaniu problemów :)

  • Marek

    Z jakiegoś nieznanego mi powodu, rozwijając serwer widzę jedynie: koty-domain i spring-web. Dependencies mam dokładnie takie same jak u Was w rozwiązaniu, próbowałem odświeżać projekt ale to nie pomaga, jakieś pomysły?

    • Spróbuj jeszcze prawym przyciskiem myszy kliknąć na serwer i wybrać opcję clean. Możesz też podesłać rozwiązanie – spróbujemy zerknąć czy u nas podobnie się importuje. Czasami usunięcie projektu z eclipse i ponowny import także pomaga :)

  • efk

    Witam otóż walczę z tym Tomcatem, nie wiem czemu tak się to wszystko wyświetla. Wcześniej miałem problem jak kolega niżej a konkretnie: ,,There are no resources that can be added or removed from the server”. Dlatego zmieniłem ustawienia w Java Facets dodając Dynamica na 3.0, a jave zmieniłem z 1.4 na 1.7. Tomcat wersja 7.0. Też coś chyba się nie zgadza z modułami. Proszę o sugestię, pozdrawiam ;)

    https://uploads.disquscdn.com/images/75f01a68dfc0e221837fba1bec0b0132d2699e3ec6cc116a829ef670dfe79f44.png

  • Gucio

    Witam,
    mam problem dodaje wszystko według zaleceń próbuje już z waszym kodem żeby wykluczyć błędy.
    mam komunikat który inni wcześniej czyli: „There are no resources that can be added or removed from the server”. Zmieniłem ustawienia w java facets dodałem Dynamic 3.0 komunikat zniknął ale kiedy chce zrobić add or removed to do wyboru mam cały projekt a nie tylko moduł koty-webapp.
    Męczę się z tym już kilka godzin i nie mogę znaleźć przyczyny. Oczywiście projekt się nie uruchamia. Proszę o pomoc.

    • Rafał

      Musisz updatować ustawienia Project Facets.

      Project (prawym przyciskiem myszy) -> Properties -> Project Facets.
      Jeśli nie masz nic otwarte w panelu, kliknij w link. Odznacz Dynamic Web Module i wybierz wersję (chyba 2.4). Apply, ok i próbuj ponownie ;-)

  • Adrian

    Witam,
    kiedy próbuję uruchomić aplikację pojawia mi się bardzo długi komunikat. Próbowałem sam znaleźć rozwiązanie, ale niestety się nie udało, dlatego proszę o podpowiedź.

    „kwi 23, 2017 12:01:07 PM org.apache.tomcat.util.digester.SetPropertiesRule begin
    WARNING: [SetPropertiesRule]{Server/Service/Engine/Host/Context} Setting property ‚source’ to ‚org.eclipse.jst.jee.server:koty-webapp’ did not find a matching property.
    kwi 23, 2017 12:01:07 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Server version: Apache Tomcat/8.5.14
    kwi 23, 2017 12:01:07 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Server built: Apr 13 2017 12:55:45 UTC
    kwi 23, 2017 12:01:07 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Server number: 8.5.14.0
    kwi 23, 2017 12:01:07 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: OS Name: Windows 8.1
    kwi 23, 2017 12:01:07 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: OS Version: 6.3
    kwi 23, 2017 12:01:07 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Architecture: amd64
    kwi 23, 2017 12:01:07 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Java Home: C:Program FilesJavajdk1.8.0_112jre
    kwi 23, 2017 12:01:07 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: JVM Version: 1.8.0_112-b15
    kwi 23, 2017 12:01:07 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: JVM Vendor: Oracle Corporation
    kwi 23, 2017 12:01:07 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: CATALINA_BASE: C:Usersadrianworkspace.metadata.pluginsorg.eclipse.wst.server.coretmp0
    kwi 23, 2017 12:01:07 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: CATALINA_HOME: C:Program Files (x86)apache-tomcat-8.5.14apache-tomcat-8.5.14
    kwi 23, 2017 12:01:07 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Command line argument: -Dcatalina.base=C:Usersadrianworkspace.metadata.pluginsorg.eclipse.wst.server.coretmp0
    kwi 23, 2017 12:01:07 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Command line argument: -Dcatalina.home=C:Program Files (x86)apache-tomcat-8.5.14apache-tomcat-8.5.14
    kwi 23, 2017 12:01:07 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Command line argument: -Dwtp.deploy=C:Usersadrianworkspace.metadata.pluginsorg.eclipse.wst.server.coretmp0wtpwebapps
    kwi 23, 2017 12:01:07 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Command line argument: -Djava.endorsed.dirs=C:Program Files (x86)apache-tomcat-8.5.14apache-tomcat-8.5.14endorsed
    kwi 23, 2017 12:01:07 PM org.apache.catalina.startup.VersionLoggerListener log
    INFO: Command line argument: -Dfile.encoding=Cp1250
    kwi 23, 2017 12:01:07 PM org.apache.catalina.core.AprLifecycleListener lifecycleEvent
    INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:Program FilesJavajdk1.8.0_112bin;C:WINDOWSSunJavabin;C:WINDOWSsystem32;C:WINDOWS;C:/Program Files/Java/jdk1.8.0_112/jre/bin/server;C:/Program Files/Java/jdk1.8.0_112/jre/bin;C:/Program Files/Java/jdk1.8.0_112/jre/lib/amd64;”C:Program FilesJavajdk1.8.0_112bin”;C:ProgramDataOracleJavajavapath;C:Program Files (x86)InteliCLS Client;C:Program FilesInteliCLS Client;C:Program Files (x86)AMD APPbinx86_64;C:Program Files (x86)AMD APPbinx86;C:windowssystem32;C:windows;C:windowsSystem32Wbem;C:windowsSystem32WindowsPowerShellv1.0;C:Program Files (x86)ATI TechnologiesATI.ACECore-Static;C:Program FilesIntelIntel(R) Management Engine ComponentsDAL;C:Program FilesIntelIntel(R) Management Engine ComponentsIPT;C:Program Files (x86)IntelIntel(R) Management Engine ComponentsDAL;C:Program Files (x86)IntelIntel(R) Management Engine ComponentsIPT;C:Program Files (x86)Windows LiveShared;C:UsersadrianDesktopprogramy pgruntimewin64;C:UsersadrianDesktopprogramy pgbin;C:WINDOWSsystem32;C:WINDOWS;C:WINDOWSSystem32Wbem;C:WINDOWSSystem32WindowsPowerShellv1.0;C:Program Files (x86)SkypePhone;C:Program FilesGitcmd;C:texlive2012binwin32;C:UsersadrianDesktop;;.
    kwi 23, 2017 12:01:07 PM org.apache.coyote.AbstractProtocol init
    INFO: Initializing ProtocolHandler [„http-nio-8080”]
    kwi 23, 2017 12:01:08 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
    INFO: Using a shared selector for servlet write/read
    kwi 23, 2017 12:01:08 PM org.apache.coyote.AbstractProtocol init
    INFO: Initializing ProtocolHandler [„ajp-nio-8009”]
    kwi 23, 2017 12:01:08 PM org.apache.tomcat.util.net.NioSelectorPool getSharedSelector
    INFO: Using a shared selector for servlet write/read
    kwi 23, 2017 12:01:08 PM org.apache.catalina.startup.Catalina load
    INFO: Initialization processed in 2495 ms
    kwi 23, 2017 12:01:08 PM org.apache.catalina.core.StandardService startInternal
    INFO: Starting service Catalina
    kwi 23, 2017 12:01:08 PM org.apache.catalina.core.StandardEngine startInternal
    INFO: Starting Servlet Engine: Apache Tomcat/8.5.14
    kwi 23, 2017 12:01:11 PM org.apache.jasper.servlet.TldScanner scanJars
    INFO: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
    kwi 23, 2017 12:01:11 PM org.apache.catalina.core.ApplicationContext log
    INFO: No Spring WebApplicationInitializer types detected on classpath
    kwi 23, 2017 12:01:11 PM org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler [„http-nio-8080”]
    kwi 23, 2017 12:01:11 PM org.apache.coyote.AbstractProtocol start
    INFO: Starting ProtocolHandler [„ajp-nio-8009″]
    kwi 23, 2017 12:01:11 PM org.apache.catalina.startup.Catalina start
    INFO: Server startup in 2735 ms”

    Pozdrawiam

    • Adrian

      Już wiem, co oznaczają te wszystkie informacje. Przepraszam za zamieszanie:)

  • Paweł

    Witam

    Mam problem i nigdzie w internecie nie mogę znaleźć konkretnej odpowiedzi na to, co w wypadku jeśli mój eclipse nie posiada perspektywy server, co więcej wchodząc w Window->Preferences również nie ma opcji server. Czy jest jakiś plugin do eclipsa by to naprawić czy bez przeinstalowania na inną wersje sie nie obejdzie?
    Pozdrawiam

    • Szymon Draga

      Istnieje coś takiego jak Tomcat Plugin, ale chyba lepiej używać Eclipse’a w wersji dla Java EE.