Spring MVC – základy

1232

Na konci článku nájdeš videonávod ako na Spring MVC.

MVC pattern – Model-View-Controller

Vysvetlime si v jednoduchosti, čo je to MVC pattern. Používateľ dáva request (žiadosť) na server. Request obdrží Controller – ten vie kam má request posunúť a čo s ním robiť. Controller potom posunie request do business logiky (business service). Business logika je všetko, čo sa týka logiky aplikácie. Ak máš bankovú aplikáciu je to business logika bankovníctva, ak máš predaj lístkov, tak je to business logika okolo predaja lístkov.

Controller teda vie kto sa špecializuje na určité podmienky, napríklad ak chceme v controlleri zoznam používateľov, tak sa pošle request z controllera do business service a ten vráti zoznam používateľov. Controller chytí zoznam používateľov a posunie ho do View – teda napríklad na zobrazenie. View vie ako zobraziť dáta, ktoré prijal.

Ešte sme nespomenuli Model. Model sú vlastne dáta, ktoré nám tečú aplikáciou. Controller požiadal o vrátenie dát Business servisom, ten ich vrátil do Controllera a Controller ich posunul na View, ktorý ich spracoval a zobrazil používateľovi.

Aké sú výhody? Každá časť paternu sa sústreďuje na niečo iné a tak vieme pekne rozložiť celú aplikáciu. Ďalšou výhodou je, že jednotlivé časti vieme nahradiť. Napríklad vieme dáta z Controllera posunúť na iný View. Alebo Controller požiada o vrátenia dát inú business servisu, ktorá sa špecializuje na niečo iné.

Klasický MVC model:

Model v Spring MVC:

Spring MVC

V tejto časti začneme pracovať na webovej aplikácii pomocou Spring MVC. Ako prvé si otvoríme stránku https://start.spring.io/. Na tejto stránke si vygenerujem základný Spring boot projekt.

Vyklikaj základné nastavenia:

V sekcii dependencies si nájdi a do projektu pridaj Web a Thymeleaf.

Projekt si vygeneruj.

Otvor si svoj obľúbený vývojový program a otvor si tam tento novo vygenerovaný projekt.

Controller

Začneme s tým, že pripravíme controller pre Filmy. Aby sme túto triedu zaregistrovali ako bean a MVC controller, tak ju označíme anotáciou @Controller.

@Controller
public class MovieController {
}

Teraz musíme povedať, akú adresu bude tento controller obsluhovať. Presnejšie z ktorej adresy bude obsluhovať http requesty. Tohto dosiahneme ak metódu označíme anotáciou RequestMapping. Metóda bude vracať zoznam filmov, ktoré vložíme do modelu.

@RequestMapping("/movies")
public String getMovies(){

Vo vnútri v metóde sa napojíme na MovieRepository a vyžiadame si všetky filmy.

MovieRepository movieRepository;

public MovieController(MovieRepository movieRepository) {
    this.movieRepository = movieRepository;
}

@RequestMapping("/movies")
public String getMovies(){
   movieRepository.findAll();

Podľa diagramu Spring MVC modelu sa späť na servlet má vrátiť model. Model musíme ale najprv získať. Spravíme to jednoducho tak, že ako vstupný parameter getMovies bude rozhranie Model zo Springu.

Tomuto modelu nastavíme ako atribút naše filmy, ktoré sa do atribútu priradia pod názvom movies (názov je na tebe). Vo view bude tiež dostupný model a potom aj tento atribút movies.

@RequestMapping("/movies")
public String getMovies(Model model){
   model.addAttribute("movies",movieRepository.findAll());

Ktorý view nám má zobraziť tieto filmy? To sme nikde nenastavovali. Ako návratovú hodnotu máme String a presne toto miesto využijeme na to, aby sme určili, na ktorý view sa má poslať model. Zatiaľ si tento view nazvime movies.

@RequestMapping("/movies")
public String getMovies(Model model){ 
    model.addAttribute("movies",movieRepository.findAll());
    return "movies";
}

A toto je náš prvý kompletný Spring MVC controller.

View

Ako view vieme použiť niekoľko technológií. Napríklad JSP alebo Thymeleaf. JSP stránky si nevieš prezerať bez toho aby si mal zapnutý server. Thymeleaf stránky vieš prezerať aj keď nemáš zapnutý server. Nebudú sa ti samozrejme načítať dáta – nemajú sa načítať z kade – server nebeží, ale vieš si ich aj tak zobraziť, čo je vhodné keď dizajnuješ stránku.

Aby sme mohli používať thymeleaf musíme si do projektu vložiť dependency:

<dependency>
   <groupId>org.springframework.boot</groupId>
   <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>

Druhý krok je vytvoriť si prvú html stránku. Do resources/templates si vytvor movies.html.

Do <html lang=”en”> tagu si pridáme odkaz na to, aby sme povedali, že toto je thymeleaf.

<html lang="en" xmlns:th="http://www.thymeleaf.org">

Do body si pridáme takýto kód:

<h1>Movies</h1>
<ul>
    <h1>Movie name</h1>
</ul></pre>

Čo sa tu deje, je v prvom rade to, že sme si spravili html šablónu toho, čo chceme zobraziť. Chcem zobraziť nadpis teda Movies a pod ním zoznam filmov v databáze.

Čo poviem teraz je to, že každý film, chcem mať nový li element.

<h1>Movies</h1>
<ul>
    <li th:each="movie : ${movies}">Movie name</li>
</ul>

Použil som špeciálnu značku th, ktorá vraví, že budem používať niečo z thymeleaf. TO niečo je presnejšie each, čo nám itereuje cez kolekciu hodnôt. V našom prípade cez kolekciu movies. Potom jednotlivé elementy kolekcie movies sa uložia postupne do movie premennej. Túto movie premennú potom môžeme používať vo vnútri li elementu.

Zápis ${movies} nám vraví, že zoberiem premennú movies – z kade ju zoberiem? Zoberiem ju z modelu, ktorý mi Spring dodal do template. Presnejšie z MovieController kde sme v metóde getMovies nasetovali na model atribút movies.

Teraz mám v premennej movie nasetovaný film. Cez bodkovú anotáciu sa viem dopracovať k vlastnostiam tohto objektu a teda aj k názvu. K výpisu textu použijeme th:text kde do výrazu v dolár a kučeravé zátvorky dám práve túto premennú movie.

<h1>Movies</h1>
<ul>
    <li th:each="movie : ${movies}">
        <span th:text="${movie.nazov}">Movie name</span>
    </li>
</ul>

Ak si tento súbor prezeráme priamo v prehliadači, tak všetko sa nám zobrazí – zobrazí sa HTML dokument s ul zoznamom kde je jeden film a to Movie name – teda default hodnota, ktorú tam máme napísanú.

Ak teraz spustíme server a túto stránku si pozrieme na servery, tak sa namiesto Movie name vypíše zoznam filmov.

Video:

Ak ťa viac baví počúvať a pozerať, tak si môžeš pozrieť tento článok aj vo videu:

Záver

Už si na konci a práve si zvládol napísať svoju prvú Spring MVC aplikáciu. Ak by si sa chcel dozvedieť o Springu viac alebo si nepochopil všetko, tak som aj pre teba pripravil Spring framework kurz na learn2code.sk.

Ak sa chceš o mne dozvedieť viac, tak klikaj na jaroslavbeno.sk alebo ma sleduj na sociálnych sieťach – youtube, facebook, instagram, linkedin.

Zakomponujem aj malú reklamu. V spolupráci s tvorcami stoličky Neseda.com ti ponúkam s kódom/kupónom JaroslavBeno 10% zľavu (aplikovateľná aj na zľavnenú stoličku).

Ja som Jaro a my sa vidíme, počujeme ak Boh dá nabudúce.

Čaves.

Dobrý článok? Chceš dostávať ďalšie?

Už viac ako 6 200 ITečkárov dostáva správy e-mailom. Nemusíš sa báť, nie každé ráno. Len občasne.

Súhlasím so spracovaním mojich osobných údajov. ( Viac informácií. )

Tvoj email neposkytneme 3tím stranám. Posielame naňho len informácie z robime.it. Kedykoľvek sa môžeš odhlásiť.