1. diel - Úvod do Spring Boot frameworku v Jave
Vitajte pri prvej lekcii kurzu o Java frameworku Spring, ktorý je súčasne najpoužívanejší framework na tvorbu webových aplikácií v Jave. Dnes si Spring predstavíme a porovnáme ho s alternatívnou knižnicou JEE. Ďalej si vysvetlíme, prečo je Spring taký obľúbený a rozdiel medzi jeho dvoma distribúciami. Povieme si tiež, aké technológie budeme v kurze používať.
Minimálne požiadavky
Kurz predpokladá znalosti:
- Javy SE (štandardná edícia), najmä:
- HTML a CSS.
Pokiaľ niektoré zo znalostí nemáte, absolvujte prvý uvedený kurz.
Vývoj webových aplikácií v Jave
Vývojári, ktorí dnes chcú vytvárať webové aplikácie v Jave, si primárne vyberajú z dvoch knižníc:
- Jakarta EE (predtým Java EE)
- Spring
Poďme si ich predstaviť a vysvetliť, prečo si vybrať práve Spring a prečo zvolíme distribúciu Spring Boot.
Jakarta EE
Jakarta Enterprise Edition (skrátene JEE) by sa dala predstaviť ako „podniková edícia Javy“. Predtým sa volala Java Enterprise Edition a spravovaná bola priamo spoločnosťou Oracle, dnes už patrí pod Eclipse Foundation. Ide o rozšírenie do klasickej Java Standard Edition. Dôležité je uvedomiť si, že sa jedná iba o súbor rozhrania (bez implementácie). Implementáciu týchto rozhraní typicky dodáva "komunita" (ostatní vývojári/spoločnosti) formou tzv. aplikačných serverov.
Projekty napísané v prvých verziách tohto frameworku typicky obsahovali množstvo opakujúceho sa kódu (tzv. boilerplate kód) a zbytočných konfiguračných súborov. Java komunite sa tento prístup natoľko nepáčil, že vytvorila Spring Framework.
Dnes je už rozdiel medzi JEE a Spring Frameworkom minimálny. Obe technológie sa líšia iba v rozhraniach (ako vývojár framework používa /prevoláva metódy), inak vedia de facto rovnaké veci. Programátor, ktorý pochopí základy Spring Frameworku, do istej miery pochopí aj základy JEE. Aj napriek vylepšeniu JEE je Spring Framework stále o niečo obľúbenejčí.
Spring Framework
Prvotným cieľom Spring Frameworku bolo uľahčiť vývoj webových aplikácií v Jave. Medzi výhody Springu oproti prvotnými verziami JEE okrem iného patrilo:
- Ľahšia práca s návrhovým vzorom Dependency Injection (viď ďalej v kurze)
- Ľahšie otestovanie aplikácie pomocou unit testov
Je dôležité uvedomiť si, že niektoré "komponenty" Spring Frameworku pracujú s rozhraním z JEE (napr. s JPA). S týmito komponentmi sa stretneme v priebehu ďalších lekcií.
Rovnako JEE, tak aj Spring Framework vyžaduje na spustenie tzv. servlet kontajner. To môže byť pre začiatočníka zdrvujúce a náročné nastaviť (viď inštalácia a nastavenie aplikačného servera v JEE, čo je rozpísané na jednu celú lekciu). Tento nedostatok rieši Spring Boot.
Spring Boot

A dostávame sa ku knižnici, ktorú budeme v kurze používať. Spring Boot je nadstavba Spring Frameworku, ktorá rieši vyššie spomínaný nedostatok. Implementuje teda všetky funkcionality Spring Frameworku a navyše má v sebe zabudovaný servlet kontajner (Tomcat), ktorý by si vývojári inak museli nastavovať ručne. Tento kontajner pri spustení projektu automaticky vytvorí a nakonfiguruje server, ku ktorému sa budú môcť pripájať používatelia cez HTTP protokol (z webového prehliadača).
Rozdiel je teda v tom, že v Spring Frameworku by si autor musel nastavovať
server sám, zatiaľ čo Spring Boot ho nastaví za vývojárov. V kurze budeme
používať práve Spring Boot. Aspoň si ušetríme pár vytrhaných vlasov,
nejaký ten čas, nervy a tiež riadky kódu
Spring Boot sa väčšinou využíva aj vo firmách, pretože Spring
Framework ako taký je veľmi zložitý aj na základné spustenie projektu.
Okrem väčšej veľkosti aplikácie či webu nás nečaká žiadna nevýhoda,
ak si vyberieme Spring Boot namiesto Spring Frameworku, takže si myslím, že
voľba je jasná
Vývojár, ktorý sa naučí Spring Boot, a nastúpi do firmy kde sa používa Spring Framework, ho bude schopný bez problémov používať.
Termíny späté s vývojom webových aplikácií
Na úvod je dôležité povedať, že webové aplikácie fungujú výrazne odlišne od tých lokálnych, ktoré sme v predchádzajúcich kurzoch vytvárali. Poďme si predstaviť ich najdôležitejšie princípy.
Frontend a backend
Štruktúra väčšiny webov sa delí na:
- Frontend - (Predná) časť aplikácie, ktorá beží u užívateľa v prehliadači. Predstavuje užívateľské rozhranie, napr. registračný formulár. Ide iba o škrupinu, ku ktorej majú prístup používatelia a ktorá by spravidla nemala mať hlbšiu logiku. Frontend komunikuje priamo s backendom.
- Backend - (Zadná) časť aplikácie, ktorá sa už nachádza na vzdialenom serveri. Zabezpečuje funkčnosť celého programu. Užívatelia ju nevidia a nemajú k nej prístup. Backend vykonáva logické operácie, pracuje so súbormi a databázou.

Toto rozdelenie (na frontend a backend) nám taktiež pomáha lepšie deliť prácu medzi vývojárov. Tí sa typicky špecializujú iba na jednu z týchto častí. Backend vývojár nebude vedieť urobiť pekné animácie (pretože na to sa špecializuje frontend vývojár) a naopak frontend vývojár zase nebude vedieť efektívne čítať dáta z databázy (pretože na to sa zas špecializuje backend vývojár).
Existuje ešte tretia skupina vývojárov, ktorí sa špecializujú ako na frontend, tak aj na backend. Hovoríme im tzv. fullstack vývojári.
V tomto základnom kurze budeme vyvíjať ako backend, tak aj frontend,
pretože pôjde o jednoduché projekty. Reálne sa v Springu typicky vytvára
iba serverová časť (backend). Na ten sa potom pripája frontend cez nejaký
javascriptový framework, ako je napr. React alebo Angular. To všetko si potom ukážeme v
nadväzujúcom kurze
Príklad interakcie medzi backendom a frontendom
Uveďme si jednoduchý príklad. Predstavme si, že máme webovú aplikáciu, na ktorej sa používatelia môžu registrovať a prihlasovať. Scenár, ktorý opisuje registráciu, by mohol vyzerať nejako takto:
- Aplikácia v prehliadači vykreslí stránku s registračným formulárom
- Užívateľ formulár vyplní
- Užívateľ klikne na tlačidlo "Registrovať sa" (odošle formulár)
- Aplikácia na serveri spracuje odoslané dáta z formulára
- Aplikácia uloží užívateľské údaje do databázy servera (aby sa mohol nový užívateľ neskôr prihlásiť).
Prvé tri kroky (vykreslenie a interakcia s užívateľom) vykonáva frontend. Štvrtý a piaty (spracovanie a uloženie dát) krok vykoná už backend.
MVC
Spring Boot je postavený na obľúbenej MVC architektúre. To znamená, že aplikáciu rozdeľuje do 3 logických vrstiev:
- na užívateľské rozhranie,
- logiku a na
- komunikačnú vrstvu, ktorá tieto 2 vrstvy prepája.
Vrstva pre používateľské rozhranie potom môže generovať stránky pre frontend, ktorý sme si predstavili vyššie. Aplikácia je tak prehľadná a jednoducho rozšíriteľná (napr. neriešime vzhľad stránky v tom istom súbore, kde riešime prácu s databázou). Túto architektúru si predstavíme ďalej v kurze v samostatnej lekcii, pretože sa všetko točí práve okolo nej.
Dependency Injection
Možno tento návrhový vzor už poznáte alebo ste sa v praxi už stretli s problémami s odovzdávaním závislostí. Výhodou Springu je, že má zabudovanú Dependency injection. To je spôsob, ako si objekt požiada o ďalšie objekty, ktoré na svoju činnosť potrebuje a je na nich teda závislý (anglicky "depends", preto "dependency").
Keby sme nepoužívali Dependency Injection, musel by si každý objekt sám hľadať a spravovať ďalšie objekty z aplikácie alebo by sme mu ich museli všetky ručne odovzdávať. Vo veľkých aplikáciách by to bolo prakticky neuskutočniteľné. Opäť sa nenechajte zo začiatku zmiasť. Akonáhle sa dostaneme do reálneho kódu, bude všetko jasné, pretože o nič zložité nejde.
Čo budeme používať?
Pracovať budeme s nasledujúcimi technológiami:
- Maven – Jedná sa o nástroj, ktorý uľahčuje prácu s knižnicami tretích strán (knižnice vyvinuté komunitou, nie spoločnosťou Oracle). Budeme tým primárne riešiť vloženie Springu do nášho projektu.
- MySQL – Toto je databáza, s ktorou bude Spring komunikovať. Môžeme použiť samozrejme aj PostgreSQL, len bude potrebné pozmeniť nastavenia. K tomu si všetko povieme.
- Swagger – Jedná sa o automaticky vygenerovanú dokumentáciu k REST API, ktorú budeme vytvárať až v ďalších kurzoch. Knižnica nám vygeneruje zoznam tzv. "endpointov". Swagger nie je nutné sťahovať, dáme ho do Mavenu.
- IDE – Je jedno, v akom IDE budete pracovať. Pokiaľ ale chcete postupovať presne ako ja, použite IntelliJ Idea. Jeho Community Edition je dostupná zadarmo na stránkach JetBrains. Odporúčam vytvoriť aplikáciu práve v nej.
V ďalšej lekcii, Úvod do webových aplikácií v Java Spring, si urobíme úvod do webových aplikácií, aby sme pochopili, prečo sú žiadanejšie, než aplikácie desktopové.