Java Servlets

Z Wikipedie, otevřené encyklopedie
Skočit na navigaci Skočit na vyhledávání

Java Servlet je program napsaný v programovacím jazyce Java, který běží na webovém nebo aplikačním serveru. Tvoří vrstvu mezi HTTP požadavkem od webového klienta a databází nebo aplikací na jiném serveru. Servlety jsou Java protějšek jiných technologií pro tvorbu dynamického webového obsah jako jsou PHP nebo ASP.NET.

Úvod[editovat | editovat zdroj]

Základní použití servletů:

  • Zpracování dat z HTML formulářů.
  • Získávání dat z databáze.
  • Řešení bezstavového problému protokolu HTTP.
  • Vytváření dynamického obsahu webu.

Java Servlety často slouží ke stejnému účelu jako programy realizované pomocí Common Gateway Interface ( CGI). Ale Servlety nabízejí několik výhod ve srovnání s CGI:

  • Výkon je výrazně vyšší.
  • Servlety se pouští v adresním prostoru webového serveru. Není tedy nutné vytvářet samostatný proces pro zpracování každého požadavku klienta.
  • Servlety jsou nezávislé na platformě, protože jsou psány v Javě.
  • Plná funkčnost knihoven jazyka Java je servletům k dispozici. Je možné komunikovat s applety, databází nebo jiným virtuálním strojem pomocí RMI.

Technicky vzato je servlet třída z Java EE, která je v souladu se Java Servlet API. To je standard pro implementaci Java tříd, které reagují na HTTP požadavky a najdeme jej v balíčcích javax.servlet a javax.servlet.http. Servlety by v zásadě mohli komunikovat přes libovolný protokol typu klient-server, ale nejčastěji jsou používány s protokolem HTTP. Běžně generovaný dynamický obsah je HTML, ale může se jednat i o jiné jazyky například XML. Servlety mohou udržovat stav relace pomocí HTTP cookies nebo přepisováním URL.

Webový Server[editovat | editovat zdroj]

Pro použití servletů je potřeba mít webový server, který se také někdy označuje jako servlet kontejner. Nejčastěji se servlety zabalí do WAR archívu a provede se jejich nasazení (deploy) na server. Mezi webové servery patří například Apache Tomcat. Webový server v sobě obsahují i aplikační servery jako GlassFish, JBoss nebo Web Logic.

Životní cyklus servletu[editovat | editovat zdroj]

Pro životního cyklu servletu jsou zásadní 3 metody. Jsou to metody init(), service() a destroy(). Jsou implementovány každým servletem a jsou vždy volány v určitý okamžik jeho životního cyklu. Využití metod je patrné v následujícím scénáři.

  1. Předpokládejme, že uživatel chce navštívit konkrétní URL.
    • Webový prohlížeč na tuto URL odešle HTTP request.
    • Tento požadavek poslán na příslušný server.
  2. HTTP je přijat webovým serverem a předán servlet kontejneru.
    • Kontejner namapuje požadavek na konkrétní servlet.
    • Servlet je dynamicky načten a uložen do adresního prostoru kontejneru.
  3. Kontejner zavolá metodu init() příslušného servletu.
    • Tato metoda je volána pouze při prvním načtení servletu do paměti.
    • Je možné nastavit inicializační parametry pro prvotní konfiguraci servletu.
  4. Kontejner zavolá metodu service() příslušného servletu.
    • Tato metoda se volá pro zpracování HTTP requestu.
    • Servlete může číst data poskytovaná HTTP requestem.
    • Servlet může vygenerovat HTTP response (odpověď) pro klienta.
  5. Servlet zůstává v paměti a je k dispozici pro zpracování dalších HTTP requestů od klienta.
    • Metoda service() je volána pro každý HTTP request.
  6. Kontejner se v určitém okamžiku rozhodne odebrat servlet z paměti.
    • Algoritmus pro rozhodování o smazání servletu se u jednotlivých kontejnerů liší.
  7. Kontejner zavolá metodu destroy() a ta mu odebere všechny zdroje, které má servlet přiděleny.
  8. Paměť alokovaná pro servlet a jeho objekty pak může být uvolněna garbage collectorem.

Využití v dnešních aplikacích[editovat | editovat zdroj]

Ačkoli je možné pomocí servletů generovat HTML, tak se to kvůli přehlednosti a členění kódu nedělá. Dříve se v MVC návrhu používala pro zobrazovací vrstvu technologie Java Server Pages ( JSP), ale dnes spíše převažuje novější technologie Java Server Faces ( JSF). Nad samotnými servlety jsou pak vytvořeny frameworky, které se v dnešní době takřka výhradně používají. Jsou jimi Enterpise Java Beans ( EJB) nebo třeba také Spring.