Přeskočit na obsah

Java Servlets

Z Wikipedie, otevřené encyklopedie

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

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

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

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 requestsů 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

Ačkoli je možné pomocí servletů generovat HTML, tak se to kvůli přehlednosti a členení 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.