Jak stworzyć projekt Jakarta EE w InteliJ IDEA Community Edition?

Projekt "Hello World" z użyciem Javy 17, platformy Jakarta EE 9, serwera aplikacji Tomcat 10.0.12 i InteliJ IDEA Community Edition

Jak stworzyć projekt Jakarta EE w InteliJ IDEA Community Edition?

Aplikacja internetowa vs biznesowa

Jakarta EE to skrót od Jakarta Enterprise Edition (do 2018 roku znana jako Java EE). Jest to platforma Javy w wydaniu biznesowym do tworzenia aplikacji internetowych (ang. Web Applications) oraz aplikacji biznesowych (ang. Enterprise Application) rozwijana od 2017 roku przez Eclipse Foundation (wcześniej przez firmę Oracle).

Aplikacja internetowa to aplikacja uruchomiona na serwerze aplikacji (np. Apache Tomcat), z którą można wchodzić w interakcje przy pomocy przeglądarki internetowej. Jest używana przez osoby fizyczne i małe firmy. Przykładem aplikacji internetowej może być sklep internetowy lub blog.

Aplikacja biznesowa jest znacznie bardziej skomplikowana i większa niż aplikacja internetowa. Jest używana przez wielkie firmy i rządy. Wykonuje specyficzne dla ich działalności zadania. Przykładem aplikacji biznesowej może być aplikacja przetwarzająca płatności używana przez bank.

Stworzenie projektu w InteliJ IDEA Community Edition

InteliJ IDEA Community Edition to darmowa wersja zintegrowanego środowiska programistycznego InteliJ IDEA rozwijana przez społeczność Open Source. Wersja ta nie posiada wsparcia dla Jakarta EE (posiada je tylko płatna wersja Ultimate) w związku z czym będziemy musieli stworzyć projekt samodzielnie bez pomocy ze strony IDE.

Tak więc uruchamiamy InteliJ IDEA Community Edition i tworzymy nowy projekt Mavena wybierając Javę w wersji 17:

Tworzenie nowego projektu. Wybór technologii Maven i wersji Javy

Klikamy Next by przejść dalej. W kolejnym kroku nadajemy projektowi nazwę i wskazujemy lokalizację na dysku twardym gdzie zostanie stworzony. Następnie uzupełniamy informacje o koordynatach artefaktu naszego projektu jak poniżej:

Tworzenie nowego projektu. Wybór nazwy projektu, jego lokalizacji na dysku twardym oraz koordynatów artefaktu używanych przez Mavena

Na koniec klikamy Finish. Projekt został stworzony.

Zależność potrzebna do tworzenia servletów

Do pliku pom.xml musimy dodać zależność jakarta.servlet:jakarta.servlet-api w wersji 5.0.0:

<dependencies>
    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <version>5.0.0</version>
        <scope>provided</scope>
    </dependency>
</dependencies>

Co ważne, scope (zakres) powinien być ustawiony na provided (dostarczony). Oznacza to, że w naszym kodzie będziemy mogli korzystać z klas artefaktu jakarta.servlet-api, jednak nie będą one spakowane do pliku z rozszerzeniem .war (Web Application Archive), który jest używany przez serwer aplikacji. Apache Tomcat to jedna z implementacji Jakarta EE, w związku z czym sam dostarczy klasy z jakarta.servlet-api. Ostatecznie pom.xml powinien wyglądać tak:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>pl.javowiec</groupId>
    <artifactId>jakarta-ee</artifactId>
    <version>1.0-SNAPSHOT</version>

    <properties>
        <maven.compiler.source>17</maven.compiler.source>
        <maven.compiler.target>17</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>jakarta.servlet</groupId>
            <artifactId>jakarta.servlet-api</artifactId>
            <version>5.0.0</version>
            <scope>provided</scope>
        </dependency>
    </dependencies>

</project>

Zauważ, że ta konfiguracja nie zbuduje pliku z rozszerzeniem .war. Na razie nie będzie nam to potrzebne.

Strona startowa i servlet HelloWorld

W projekcie pod ścieżką src/main musimy stworzyć nowy folder (PPM -> New -> Directory) z nazwą webapp. W webapp tworzymy folder WEB-INF wraz z pustym plikiem web.xml (tzw. deployment descriptor):

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="https://jakarta.ee/xml/ns/jakartaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://jakarta.ee/xml/ns/jakartaee https://jakarta.ee/xml/ns/jakartaee/web-app_5_0.xsd"
         version="5.0">
</web-app>

W folderze webapp tworzymy także plik index.html (PPM -> New -> HTML file -> HTML 5 file), który powinien wyglądać tak:

<!DOCTYPE html>
<html lang="pl">
    <head>
        <meta charset="UTF-8">
        <title>Jakarta EE - Hello World</title>
    </head>
    <body>
        <h1>Jakarta EE</h1>
        <a href="/helloworld">Hello World - kliknij mnie!</a>
    </body>
</html>

Strona startowa index.html wyświetli nagłówek Jakarta EE i link do adresu /helloworld. Kliknięcie w link będzie musiało zostać obsłużone przez Tomcata. W tym celu musimy stworzyć klasę pl.javowiec.HelloWorld w folderze java (PPM -> New -> Java Class -> Class), która będzie wyglądać tak:

package pl.javowiec;

import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

import java.io.IOException;
import java.io.PrintWriter;

@WebServlet("/helloworld")
public class HelloWorld extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
        resp.setContentType("text/html");
        resp.setCharacterEncoding("UTF-8");
        PrintWriter writer = resp.getWriter();
        writer.println("Hello World! Witaj Javowcu :)");
    }

}

Klasa ta dziedziczy po klasie jakarta.servlet.http.HttpServlet. Oznacza to, że jest tzw HTTP Servlet, który obsługuje żądania HTTP. W naszym przykładzie obsłużenie żądania GET pod adresem /helloworld będzie polegało na zwróceniu napisu "Hello World! Witaj Javowcu :)" do przeglądarki.

Instalacja Tomcata i plugin "Smart Tomcat"

Plugin Smart Tomcat umożliwia wygodne uruchamianie Tomcata z poziomu InteliJ wraz z naszą aplikacją. Nie musimy zajmować się kopiowaniem naszej aplikacji za każdym razem do odpowiedniego folderu Tomcata. Plugin ten robi to za nas. Aby go móc używać, najpierw musimy go zainstalować. Wciskamy więc skrót CTRL + ALT + S, przechodzimy do menu Plugins i w zakładce Marketplace szukamy Smart Tomcat. Klikamy Install i zamykamy okno przyciskiem OK.

Plugin Smart Tomcat w Marketplace

Kolejnym krokiem jest instalacja Tomcata. Na tej stronie możemy sprawdzić, która wersja Tomcata będzie odpowiednia. Używamy wersję Servleta 5.0 (patrz wersja zależności jakarta.servlet-api), więc według tej tabelki powinniśmy używać Tomcata 10.0.x. Aktualnie najwyższą wersją 10.0.x jest 10.0.12, więc stąd pobieramy plik binarny z sekcji "Core" i wypakowujemy go np. do ścieżki /opt/tomcat.

Teraz pozostaje nam połączenie pluginu Smart Tomcat z serwerem Tomcat. W InteliJ klikamy Add Configuration, następnie plusik + i wybieramy nową konfigurację Smart Tomcat. W polu Name możemy wpisać nazwę konfiguracji: Hello World. Po kliknięciu przycisku Configuration otworzy się nowe okno, gdzie możemy wskazać przy pomocy plusika + ścieżkę do rozpakowanego serwera Tomcat:

Konfiguracja serwera Tomcat w InteliJ IDEA Community

Po wskazaniu go klikamy przycisk OK i z rozwijanej listy Tomcat Server wybieramy nasz serwer Tomcat. Pole Context Path zamieniamy na /, dzięki czemu nasza strona zostanie wyświetlona bezpośrednio pod ścieżką http://localhost:8080.

Konfiguracja uruchomieniowa pluginu Smart Tomcat

Zatwierdzamy przyciskiem OK i skrótem SHIFT + F10 uruchamiamy naszą aplikację na serwerze Tomcat. Po chwili możemy przejść pod ścieżkę http://localhost:8080 w przeglądarce i podziwiać naszą mało skomplikowaną stronę startową 😋

Strona startowa aplikacji HelloWorld

Po kliknięciu w link zostaniemy przekierowani na stronę http://localhost:8080/helloworld. Żądanie GET zostanie obsłużone przez nasz HTTP Servlet HelloWorld, który zwróci napis "Hello World! Witaj Javowcu :)"

Odpowiedź z HTTP Servleta HelloWorld

Oczywiście to jedynie skrawek możliwości platformy Jakarta EE, ale od czegoś trzeba zacząć 😄 Zachęcam do modyfikowania kodu i dodania np. nowego linku, który będzie prowadził do innego HTTP Servleta wyświetlającego inny napis. Sam lekko zmieniłem stronę startową przy użyciu biblioteki Bootstrap by trochę lepiej wyglądała:

Zmieniona strona startowa z użyciem biblioteki Bootstrap

GitHub

Kod źródłowy jest udostępniony na GitHubie. Poniżej link 🙂

GitHub - JavowiecPL/jakarta-ee-hello-world: Gotowy projekt “Hello World” z kategorii Jakarta EE stworzony na potrzeby postów publikowanych na blogu Javowiec.pl
Gotowy projekt &quot;Hello World&quot; z kategorii Jakarta EE stworzony na potrzeby postów publikowanych na blogu Javowiec.pl - GitHub - JavowiecPL/jakarta-ee-hello-world: Gotowy projekt &quot;Hell...

Podsumowanie

W tym artykule pokazałem Ci jak stworzyć projekt "Hello World" z użyciem Javy 17, platformy Jakarta EE 9, serwera aplikacji Tomcat 10.0.12 i InteliJ IDEA Community Edition.

Pomimo, że wersja Community nie posiada wsparcia dla Jakarta EE, wraz z pluginem "Smart Tomcat" udało nam się uruchomić naszą pierwszą aplikację. Zachęcam do dalszego eksperymentowania 😉

Liczba komentarzy:

Zaloguj się lub dołącz do społeczności Javowców, aby móc uczestniczyć w dyskusji 🙂