Java EE: szybki start z projektem War z Gradle w IntelliJ Idea

Proste z pozoru zadanie pt. jak napisać i uruchomić prostą stronę w JSP i servlet w serwerze Tomcat korzystając z wbudowanych ułatwień w IntelliJ Idei okazuje się dosyć trudnym zadaniem dla początkujących programistów Java. Poniżej znajduje się uproszczony przepis jak zrobić to w kilkudziesięciu (!) prostych krokach. Przepis bazuje na systemie Linux ale większość kroków powinna być identyczna na innych OS-ach.

Wymagania na starcie

  • JDK 1.8 lub nowsze, polecenie „java -version” powinno zwracać wynik zbliżony do ’java version "1.8.0_111"
  • Gradle 3.1 lub nowsze, polecenie „gradle -version” powinno zwracać wynik zbliżony zawierający ...Gradle 3.1...,
  • IntelliJ Idea Utimate (nie mam pewności czy wsparcie do Tomcata jest w Community).

Utworzenie projektu

  • Robimy nowy projekt w Idei: File -> New -> Project -> Empty project -> Next -> wskazujemy katalogi, np. w katalogu ~/projects/example-gradle-war/
  • Robimy nowy moduł typu „Gradle”:
    • File -> Project Structure -> Modules -> (+) -> New module -> Gradle -> zaznaczamy „Additional Libraries and Frameworks”: Java i Web,
      screenshot_2016-12-13_01_create_module
    • podajemy GroupId: mberkan.pl, ArtifactId: examplewar, VersionId: 1.0-SNAPSHOT -> Next,
    • na ekranie konfiguracji gradle nic nie zmianiamy, klikamy Next,
    • zostawiamy „Module name” = examplewar i podane ścieżki, klikamy Finish i „Ok” -> jako wynik mamy plik build.gradle i katalog src/main/webapp z plikiem index.jsp
  • Instalacja serwera Tomcat:
    • ściągamy binarkę z http://tomcat.apache.org/download-80.cgi i rozpakowujemy do katalogu ~/opt/apache-tomcat-8.5.6/
    • w Idei wchodzimy na Run -> Edit configuration
    • klikamy (+) i wybieramy „Tomcat Server” -> „Local”
      screenshot_2016-12-13_02_add_tomcat_server_configuration
    • jako nazwę podajemy „Tomcat 8.5.6”, klikamy Configure i wskazujemy powyższy katalog ~/opt/apache-tomcat-8.5.6/
      screenshot_2016-12-13_04_add_tomcat_server_configuration_2
    • przy ostrzeżeniu na dole pt. „No artifacts marked for deployment” klikamy „Fix” i wybieramy „examplewar-1.0-SNAPSHOT.war (exploded)”
    • klikamy OK
  • Odpalamy skonfigurowanego Tomcata przyciskiem „Debug”
    screenshot_2016-12-13_configured_tomcat
  • na konsoli powinno się pojawić coś w rodzaju:
    [2016-12-13 11:22:22,095] Artifact Gradle : mberkan.pl : examplewar-1.0-SNAPSHOT.war (exploded): Artifact is deployed successfully
    
  • Otwieramy przeglądarką URL http://localhost:8080/ i powinien pojawić się napis „$END$” (lub inna treść strony JSP wygenerowana z szablonu).
  • „Fast-development” plików JSP

    Fast-development to określenie szybkiego osiągania efektu zmian w kodzie JSP widocznego w przeglądarce – standardowo trzeba budować projekt i restartować serwer aplikacyjny co jest szalenie nieefektywne przy komercyjnym tworzeniu oprogramowania. Chcemy aby wyniki naszych zmian były widoczne niemal od razu, jak w PHP.

    • Wprowadzamy zmianę w pliku JSP, np. za znacznikiem $END$ dodając „XXX”,
    • Sprawdzamy że zwykłe przeładowanie strony w przeglądarce nic nie daje :-(,
    • Wybieramy Run -> Update 'Tomcat 8.5.6′ application (CRTL-F10) -> zaznaczamy „Update classes and resources” -> OK,
    • Przeładowujemy strony w przeglądarce -> widzimy zmianę :-).

    Pierwszy servlet

    • W pliku build.gradle w sekcji dependencies dodajemy:
      compile group: 'javax.servlet', name: 'javax.servlet-api', version: '3.1.0'
      

      (inaczej nie znajdzie się klasa HttpServlet)

    • W widoku „Gradle” klikamy pierwszą ikonkę ze strzałkami „Refresh all gradle projects”
    • Zaznaczamy w sekcji „Project” katalog src/main i dodajemy (CRTL-Insert) „Directory” o nazwie java
    • Klikamy na stworzony katalog i dodajemy „Package” o nazwie pl.mberkan.examplewar
    • Klikamy na stworzony pakiet i dodajemy „Class” o nazwie ExampleServlet
    • Wygenerowanej klasie dodajemy extend HttpServlet, dodajemy ciało metody i mapowanie na URL:
      package pl.mberkan.examplewar;
      
      import javax.servlet.annotation.WebServlet;
      import javax.servlet.http.HttpServlet;
      import javax.servlet.http.HttpServletRequest;
      import javax.servlet.http.HttpServletResponse;
      import java.io.IOException;
      
      /**
       * @author Marek Berkan
       */
      @WebServlet("/servlet")
      public class ExampleServlet extends HttpServlet {
          public void doGet(HttpServletRequest request, 
                            HttpServletResponse response)
                  throws IOException {
              response.getWriter().println("Hello");
          }
      }
      
      
    • Wybieramy Run -> Update 'Tomcat 8.5.6′ application (CRTL-F10) -> zaznaczamy „Redeploy” -> OK
    • Otwieramy przeglądarką URL http://localhost:8080/servlet i widzimy „Hello”.

    Fast development servletów

    • Wprowadzamy zmianę w pliku ExampleServlet, np. za „Hello” dodając „XXX”,
    • Sprawdzamy że zwykłe przeładowanie strony w przeglądarce nic nie daje :-(,
    • Wybieramy Build -> Recompile 'ExampleServlet.java’ (CRTL-Shift-F9),
    • Przeładowujemy strony w przeglądarce -> widzimy zmianę.

    Podsumowanie

    Mam nadzieję że ten przepis ułatwi start nowego projektu początkującym programistom Java.

    Kod opisanej aplikacji znajduje się pod adresem https://github.com/.

    O autorze

    Marek Berkan Marek Berkan: programista, entuzjasta tworzenia oprogramowania, zarządzania zespołami technicznymi. Prywatnie motocyklista, kolarz MTB, biegacz, żeglarz, rekreacyjny wspinacz, zamiłowany turysta. Witryny: , , .

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *