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:
- Webový prohlížeč
- Webový server
- Spring Boot
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:
-
http://www.pokus.com/vtipy/zvireci/index.html ^^^^ Protokol (http) ^^^^^^^^^^^^^ Domena, internetova adresa serveru (www.pokus.com) ^^^^^^^^^^^^^^^^^^^^^^^^^ Adresa stranky (/vtipy/zvireci/index.html)
-
https://pokus.com:8080/ ^^^^^ Protokol (https) ^^^^^^^^^ Domena, internetova adresa serveru (pokus.com) ^^^^ Cislo sitoveho portu na serveru (8080) ^ Adresa stranky (/)
-
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)
-
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)
-
http://localhost:8000/index.html ^^^^ Protokol (http) ^^^^^^^^^ Domena, internetova adresa serveru ^^^^ Cislo sitoveho portu na serveru (8000) ^^^^^^^^^^^ Adresa stranky
Poznamky:
- http je klasicky protokol. https je to stejne, jen sifrovane (proti odposlechu).
- Pokud neni uvedeno cislo sitoveho portu, pak se predpoklada 80 pro http a 443 pro https.
- pokus.com a www.pokus.com jsou zcela jine internetove adresy serveru. Obvykle jsou nasmerovany na stejny server, ale vubec tomu tak byt nemusi.
- localhost znamena vzdycky tento pocitac (z hlediska pocitace tedy pozadavek sam na sebe).
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:
- ROOT.war ... tedy aplikace nasazena na (prazdno)
- vtipy.war ... tedy aplikace nasazena na /vtipy
- VideoBoss.war ... tedy aplikace nasazena na /VideoBoss (pozor, rozlisuji se velka a mala pismena)
-
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)
-
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)
-
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)
-
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
.
-
Pozadavek na adresu: http://pokus.com/ukol02/index.html ^^^^^^^^^^^ Adresa stranky Spring Boot vyvola metodu oznacenou @RequestMapping("/index.html")
-
Pozadavek na adresu: http://pokus.com/ukol02/vyroky/index.html ^^^^^^^^^^^^^^^^^^ Adresa stranky Spring Boot vyvola metodu oznacenou @RequestMapping("/vyroky/index.html")
-
Pozadavek na adresu: http://pokus.com/ukol02/vyroky/ ^^^^^^^^ Adresa stranky Spring Boot vyvola metodu oznacenou @RequestMapping("/vyroky") nebo @RequestMapping("/vyroky/")
-
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!
-
Prohlizec posle pozadavek na:
http://pokus.com/ukol02/index.htmlSpring Boot vrati staticky soubor:
PROJEKT/src/main/resources/static/index.html -
Prohlizec posle pozadavek na:
http://pokus.com/ukol02/css/styly.cssSpring Boot vrati staticky soubor:
PROJEKT/src/main/resources/static/css/styly.css -
Prohlizec posle pozadavek na:
http://pokus.com/ukol02/kontakt/o-nas.htmlSpring Boot vrati staticky soubor:
PROJEKT/src/main/resources/static/kontakt/o-nas.html -
Prohlizec posle pozadavek na:
http://pokus.com/ukol02/meme.htmlExistuje @RequestMapping("/meme.html"),
metoda vraci ModelAndView("meme-template")Spring Boot provede sablonu:
PROJEKT/src/main/resources/templates/meme-template.html -
Prohlizec posle pozadavek na:
http://pokus.com/ukol02/test/testik.htmlExistuje @RequestMapping("/test/testik.html"),
metoda vraci ModelAndView("meme-template")Spring Boot provede sablonu:
PROJEKT/src/main/resources/templates/meme-template.html -
Prohlizec posle pozadavek na:
http://pokus.com/ukol02/kontakt/napiste-nam.htmlExistuje @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 -
Prohlizec posle pozadavek na:
http://pokus.com/ukol02/admin/prihlaseni.htmlExistuje @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 -
Prohlizec posle pozadavek na:
http://pokus.com/ukol02/admin/pokus.htmlExistuje @RequestMapping("/admin/pokus.html")
metoda vraci ModelAndView() // Bez udani jmena sablony!Spring Boot provede sablonu: PROJEKT/src/main/resources/templates/admin/pokus.html
-
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:
-
Jsme na strance:
http://sladkost.tomcat.cloud/ukol02/vyrok/index.htmlV ni je:
<a href="pokus.html">Odkaz</a>
Po klinuti na odkaz pujde prohlizec na:
http://sladkost.tomcat.cloud/ukol02/vyrok/pokus.html -
Jsme na strance:
http://sladkost.tomcat.cloud/ukol02/vyrok/index.htmlV ni je:
<a href="../o-me/">Odkaz</a>
Po klinuti na odkaz pujde prohlizec na:
http://sladkost.tomcat.cloud/ukol02/o-me/ -
Jsme na strance:
http://sladkost.tomcat.cloud/ukol02/vyrok/index.htmlV ni je:
<a href="/pokus.html">Odkaz</a>
Po klinuti na odkaz pujde prohlizec na:
http://sladkost.tomcat.cloud/pokus.html -
Jsme na strance:
http://sladkost.tomcat.cloud/ukol02/vyrok/index.htmlV ni je:
<a href="//zkouska/pokus.html">Odkaz</a>
Po klinuti na odkaz pujde prohlizec na:
http://zkouska/pokus.html -
Jsme na strance:
https://sladkost.tomcat.cloud/ukol02/index.htmlV 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.