Logo Czechitas
Vloženo: 19. 3. 2018

Lekce 03 - Adresy a odkazy, více o ThymeLeaf

Sepsal jsem článek o cestách a odkazech z pohledu různých programů. Hlavní protagonisté jsou:

Nejde o vyčerpávající popis, chtěl jsem to ukázat na příkladech.

Mrkněte se na to. Ideální by bylo napsat si za (nepovinný) úkol malou webovou aplikaci a vyzkoušet si všechny příklady.

Prohlizec pri odesilani pozadavku rozpoznava tyto casti adresy:

Priklady:

  1. http://www.pokus.com/vtipy/zvireci/index.html
    ^^^^                                                Protokol (http)
           ^^^^^^^^^^^^^                                Domena, internetova adresa serveru (www.pokus.com)
                        ^^^^^^^^^^^^^^^^^^^^^^^^^       Adresa stranky (/vtipy/zvireci/index.html)
    
  2. https://pokus.com:8080/
    ^^^^^                                               Protokol (https)
            ^^^^^^^^^                                   Domena, internetova adresa serveru (pokus.com)
                      ^^^^                              Cislo sitoveho portu na serveru (8080)
                          ^                             Adresa stranky (/)
    
  3. https://pokus.com/vtipy/index.html?jazyk=cs
    ^^^^^                                               Protokol (https)
            ^^^^^^^^^                                   Domena, internetova adresa serveru (pokus.com)
                     ^^^^^^^^^^^^^^^^^                  Adresa stranky (/vtipy/index.html)
                                       ^^^^^^^^         1 parametr (jazyk=cs)
    
  4. https://pokus.com/index.html?jazyk=cs&barvy=tmave
    ^^^^^                                               Protokol (https)
            ^^^^^^^^^                                   Domena, internetova adresa serveru (pokus.com)
                     ^^^^^^^^^^^                        Adresa stranky (/vtipy/index.html)
                                 ^^^^^^^^^^^^^^^^^^^^   2 parametry (jazyk=cs, barvy=tmave)
    
  5. http://localhost:8000/index.html
    ^^^^                                                Protokol (http)
           ^^^^^^^^^                                    Domena, internetova adresa serveru
                     ^^^^                               Cislo sitoveho portu na serveru (8000)
                         ^^^^^^^^^^^                    Adresa stranky
    

Poznamky:

Webovy server pri obdrzeni pozadavku rozpoznava tyto casti adresy:

Je dulezite si uvedomit, ze webovy server vi, jake ma nasazene webove aplikace. Z toho plyne, ze rozpoznava stejne casti adresy jako webovy prohlizec, jen navic jmeno webove aplikace. Definujme, ze ma nasazene:

  1. https://pokus.com/index.html?jazyk=cs&barvy=tmave
    ^^^^^                                               Protokol (https)
            ^^^^^^^^^                                   Domena, internetova adresa serveru (pokus.com)
                                                        Webova aplikace (prazdno, tedy ROOT.war)
                     ^^^^^^^^^^^                        Adresa stranky (/index.html)
                                 ^^^^^^^^^^^^^^^^^^^^   2 parametry (jazyk=cs, barvy=tmave)
    
  2. http://www.pokus.com/vtipy/zvireci/index.html
    ^^^^                                                Protokol (http)
           ^^^^^^^^^^^^^                                Domena, internetova adresa serveru (www.pokus.com)
                        ^^^^^^                          Webova aplikace (/vtipy, tedy vtipy.war)
                              ^^^^^^^^^^^^^^^^^^^       Adresa stranky (/zvireci/index.html)
    
  3. http://tomcat.cloud/VideoBoss/customers/all.html
    ^^^^                                                Protokol (http)
           ^^^^^^^^^^^^                                 Domena, internetova adresa serveru (www.pokus.com)
                       ^^^^^^^^^^                       Webova aplikace (/VideoBoss, tedy VideoBoss.war)
                                 ^^^^^^^^^^^^^^^^^^^    Adresa stranky (/customers/all.html)
    
  4. https://tomcat.cloud/Pexeso/vecernicek/index.html
    ^^^^^                                               Protokol (https)
            ^^^^^^^^^^^^                                Domena, internetova adresa serveru (www.pokus.com)
                                                        Webova aplikace (prazdno, tedy ROOT.war).
                                                            Ackoliv to vypada, ze by na serveru
                                                            mohla byt webova aplikace Pexeso,
                                                            vyse jsme definovali, ze webovy server
                                                            ma nasazena jen 3 warka,
                                                            takze nutne pujde do ROOT.war
                                                            a bude tam hledat slozku Pexeso.
                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^   Adresa stranky (/Pexeso/customers/all.html)
    

Cesty z pohledu Spring Bootu

Pro Spring Boot je dulezity @RequestMapping uvnitr Java tridy oznacene @Controller. Dejme tomu, ze webova aplikace je nasazena na /ukol02, tedy ze je distribuovana jako ukol02.war a webovy server bezi na internetove adrese pokus.com.

  1. Pozadavek na adresu:
    http://pokus.com/ukol02/index.html
                           ^^^^^^^^^^^              Adresa stranky
    
    Spring Boot vyvola metodu oznacenou @RequestMapping("/index.html")
    
  2. Pozadavek na adresu:
    http://pokus.com/ukol02/vyroky/index.html
                           ^^^^^^^^^^^^^^^^^^       Adresa stranky
    
    Spring Boot vyvola metodu oznacenou @RequestMapping("/vyroky/index.html")
    
  3. Pozadavek na adresu:
    http://pokus.com/ukol02/vyroky/
                           ^^^^^^^^                 Adresa stranky
    
    Spring Boot vyvola metodu oznacenou @RequestMapping("/vyroky") nebo @RequestMapping("/vyroky/")
    
  4. Pozadavek na adresu:
    http://pokus.com/ukol02/vyroky/?id=100
                           ^^^^^^^^                 Adresa stranky
                                    ^^^^^^          Parametr
    
    Spring Boot vyvola metodu oznacenou @RequestMapping("/vyroky") nebo @RequestMapping("/vyroky/")
    

Ktere soubory bude Spring Boot odesilat

Dejme tomu, ze webova aplikace je nasazena na /ukol02, tedy ze je distribuovana jako ukol02.war a webovy server bezi na internetove adrese pokus.com. Mejme ve webove aplikaci tyto soubory:

PROJEKT
    src
        main
            resources
                static
                    index.html
                    css
                        styly.css
                    kontakt
                        o-nas.html
                    test
                        testik.html
                templates
                    meme-template.html
                    kontakt
                        napiste-nam-template.html
                    vsichni-uzivatele
                        login-template.html
                    admin
                        pokus.html

Dale mejme ve webove aplikaci javovou tridu oznacenou @Controller, ktera ma nasledujici @RequestMapping:

@RequestMapping("/meme.html")
metoda vraci ModelAndView("meme-template")

@RequestMapping("/test/testik.html")
metoda vraci ModelAndView("meme-template")

@RequestMapping("/kontakt/napiste-nam.html")
metoda vraci ModelAndView("kontakt/napiste-nam-template")

@RequestMapping("/admin/prihlaseni.html")
metoda vraci ModelAndView("vsichni-uzivatele/login-template")

@RequestMapping("/admin/pokus.html")
metoda vraci ModelAndView()         // Bez udani jmena sablony!
  1. Prohlizec posle pozadavek na:
    http://pokus.com/ukol02/index.html

    Spring Boot vrati staticky soubor:
    PROJEKT/src/main/resources/static/index.html

  2. Prohlizec posle pozadavek na:
    http://pokus.com/ukol02/css/styly.css

    Spring Boot vrati staticky soubor:
    PROJEKT/src/main/resources/static/css/styly.css

  3. Prohlizec posle pozadavek na:
    http://pokus.com/ukol02/kontakt/o-nas.html

    Spring Boot vrati staticky soubor:
    PROJEKT/src/main/resources/static/kontakt/o-nas.html

  4. Prohlizec posle pozadavek na:
    http://pokus.com/ukol02/meme.html

    Existuje @RequestMapping("/meme.html"),
    metoda vraci ModelAndView("meme-template")

    Spring Boot provede sablonu:
    PROJEKT/src/main/resources/templates/meme-template.html

  5. Prohlizec posle pozadavek na:
    http://pokus.com/ukol02/test/testik.html

    Existuje @RequestMapping("/test/testik.html"),
    metoda vraci ModelAndView("meme-template")

    Spring Boot provede sablonu:
    PROJEKT/src/main/resources/templates/meme-template.html

  6. Prohlizec posle pozadavek na:
    http://pokus.com/ukol02/kontakt/napiste-nam.html

    Existuje @RequestMapping("/kontakt/napiste-nam.html"),
    metoda vraci ModelAndView("kontakt/napiste-nam-template")

    Spring Boot provede sablonu:
    PROJEKT/src/main/resources/templates/kontakt/napiste-nam-template.html

  7. Prohlizec posle pozadavek na:
    http://pokus.com/ukol02/admin/prihlaseni.html

    Existuje @RequestMapping("/admin/prihlaseni.html")
    metoda vraci ModelAndView("vsichni-uzivatele/login-template")

    Spring Boot provede sablonu:
    PROJEKT/src/main/resources/templates/vsichni-uzivatele/login-template.html

  8. Prohlizec posle pozadavek na:
    http://pokus.com/ukol02/admin/pokus.html

    Existuje @RequestMapping("/admin/pokus.html")
    metoda vraci ModelAndView() // Bez udani jmena sablony!

    Spring Boot provede sablonu: PROJEKT/src/main/resources/templates/admin/pokus.html

  9. Prohlizec posle pozadavek na: http://pokus.com/ukol02/cervena-karkulka.html

    Neexistuje ani @RequestMapping("/cervena-karkulka.html") ani staticky soubor PROJEKT/src/main/resources/static/cervena-karkulka.html

    Spring Boot odesle chybovou stranku

Relativni vs absolutni cesta ve webove strance (uvnitr html souboru)

Odkazy vyhodnocuje webovy prohlizec

Priklady:

  1. Jsme na strance:
    http://sladkost.tomcat.cloud/ukol02/vyrok/index.html

    V ni je:
    <a href="pokus.html">Odkaz</a>

    Po klinuti na odkaz pujde prohlizec na:
    http://sladkost.tomcat.cloud/ukol02/vyrok/pokus.html

  2. Jsme na strance:
    http://sladkost.tomcat.cloud/ukol02/vyrok/index.html

    V ni je:
    <a href="../o-me/">Odkaz</a>

    Po klinuti na odkaz pujde prohlizec na:
    http://sladkost.tomcat.cloud/ukol02/o-me/

  3. Jsme na strance:
    http://sladkost.tomcat.cloud/ukol02/vyrok/index.html

    V ni je:
    <a href="/pokus.html">Odkaz</a>

    Po klinuti na odkaz pujde prohlizec na:
    http://sladkost.tomcat.cloud/pokus.html

  4. Jsme na strance:
    http://sladkost.tomcat.cloud/ukol02/vyrok/index.html

    V ni je:
    <a href="//zkouska/pokus.html">Odkaz</a>

    Po klinuti na odkaz pujde prohlizec na:
    http://zkouska/pokus.html

  5. Jsme na strance:
    https://sladkost.tomcat.cloud/ukol02/index.html

    V ni je:
    <a href="//zkouska/pokus.html">Odkaz</a>

    Po klinuti na odkaz pujde prohlizec na:
    https://zkouska/pokus.html

Soubory

Archív najdete zde: WebLekce03.zip

Videozáznam

Na Youtube je záznam z lekce:

Celý playlist na Youtube najdete zde: Java 2 - Brno (jaro 2018) - Youtube playlist.