Servlety sú neoddeliteľnou súčasťou platformy J2EE od firmy SUN. Sú to programové komponenty bežiace na strane servera, napísané v Jave. To znamená, že vyžadujú „java-enabled-server“ a samozrejme JVM (Java Virtual Machine). So servletmi ako medzičlánkom sa môžete nepriamo stretnúť pri technológii dynamických stránok JavaServer Pages.

Ako som už spomenul, servlety sú komponenty nezávislé na protokole a platforme, napísané v Jave. Sú vykonávané na strane servera, pričom musí ísť o server podporujúci Javu. Servlety sú načítané a spúšťané pomocou JVM na príslušnom aplikačnom servery. Podľa špecifikácie sú servlety nevizuálne komponenty, teda sa nezobrazujú pomocou žiadneho GUI. Avšak to neznamená, že servlety nemôžu „generovať“ používateľské rozhranie. V skutočnosti sa väčšinou používajú servlety pracujúce nad internetovým protokolom HTTP. Odpoveďou takýchto servletov je potom v prevažnej väčšine HTML kód. Servlety môžeme použiť na rôzne úlohy: čítanie/zapisovanie do databázy, posielanie mailov, spracovávanie formulárov, posielanie cookies atď. Jednoducho sú určené na tvorbu dynamických internet/intranet riešení, podobne ako JavaServer Pages.

Servlety implementujú princíp požiadavka/odpoveď, typický pre architektúru klient-server. Java Servlet API definuje štandardné rozhrania pre obsluhu týchto požiadaviek a odpovedí medzi klientom a serverom. Nasledujúci obrázok zjednodušene ilustruje procesy medzi klientom a serverom.

Procesy medzi klientom a serverom

  1. Klient pošle požiadavku na server.
  2. Server prepošle požiadavku na konkrétny servlet.
  3. Servlet vytvorí odpoveď a predá ju serveru. (Odpoveď je vytvorená dynamicky a jej obsah závisí od požiadavky, ktorú poslal klient. Servlet môže využiť rôzne externé zdroje.)
  4. Server pošle klientovi odpoveď.

Servlety by sme mohli prirovnať k CGI skriptom v tom, že pomocou servletou môžeme tiež vytvárať dynamický obsah. Avšak servlety majú určité nesporné výhody v porovnaní s CGI:

  • Portabilita a platformová nezávislosť – túto vlastnosť majú vďaka jazyku Java. Java Servlet API definuje totiž štandardné rozhranie medzi servletom a web serverom.
  • Perzistencia a výkonnosť – servlet je skompilovaný a natiahnutý do pamäte len prvý krát a volaný pri každej požiadavke od klienta. To znamená, že servlet menej vyťažuje systémové zdroje, databázové pripojenia a podobne. Naproti tomu CGI je natiahnuté do pamäte pri každej požiadavke.
  • Založenosť na Jave – keďže servlety sú postavené na jazyku Java, majú k dispozícii všetky výhody tohto jazyka. Objektovosť, modularitu, bezpečnosť a podobne.

Java Servlet API

Java Servlet API je množinou Java tried definujúcich rozhranie medzi klientom a servletom. Cez toto rozhranie obsluhuje servlet príchodzie požiadavky. Servlet API nie je štadardnou súčasťou Java frameworku, ale je k dispozícii buď ako samostatný balíček alebo ako súčasť J2EE. Java Servlet API pozostáva z dvoch balíčkov:

  • javax.servlet
  • javax.servlet.http

Základný balíček tried javax.servlet obsahuje abstraktné triedy a rozhrania na tvorbu všeobecných servletov pre rôzne protokoly. Týmto je myslené, že servlety môžu byť použité pre ľubovolné protokoly (HTTP, HTTPS, FTP), záleží na konkrétnej implementácii. Balík javax.servlet.http rozširuje funkcionalitu základného balíka a pridáva podporu protokolu HTTP.

Pozrime sa trochu bližšie na prvý balík, ktorý obsahuje niekoľko rôznych rozhraní. Najdôležitejšie je rozhranie Servlet. Toto rozhranie definuje metódy, ktoré musí každý servlet obsahovať. Ide hlavne o metódu service(), ktorá obsluhuje požiadavky. Napríklad konkrétne trieda GenericServlet implementuje toto rozhranie. Ak potrebujem použiť servlet pracujúci s protokolom HTTP, využijem špecializovanejšiu triedu HttpServlet. V tomto seriály sa budem zaoberať výhradne servletmi pracujúcimi s týmto protokolom. Táto trieda poskytuje ďalšie metódy na spracovanie HTTP požiadaviek, napríklad doGet() a doPost() na spracovanie požiadaviek typu GET a POST.

Interakcia klient-servlet

Klient, ktorý posiela požiadavku nejakej aplikácii založenej na servletoch, nekomunikuje priamo s nimi, ale s príslušným serverom. Server potom predá požiadavku servletu pomocou Java Servlet API. Úlohou servera je riadiť spúšťanie a inicializovať servlet, ukončovať a likvidovať servlet z pamäti. Štandardne sa v pamäti servera nachádza len jedna inštancia konkrétneho servletu, kde zostáva aj po dobu nečinnosti. Záleží na nastavení servera kedy bude uvolnená z pamäte. A čo sa deje ak na jeden servlet príde niekoľko požiadaviek súčasne? Server vytvorí pre každú požiadavku nové vlákno. To znamená, že servlety sú multithreadové. Teda opakujem, za vytvorenie nového vlákna je zodpovedný server, rovnako ako je zodpovedný za načítanie a znovunačítanie (pri zmene) servletu do pamäte.

Nasledujúci obrázok zjednodušene ilustruje základnú interakciu medzi klientom a servletom:

Interakcia klient-servlet

  1. Na začiatku pri prvej požiadavke (alebo pri zmene) je servlet načítaný serverom. Všetky premenné inštancie sú zinicializované. Servlet zostáva aktívny počas celej doby životnosti.
  2. Dvaja klienti žiadajú o službu ten istý servlet. Server preto vytvorí dve nezávislé vlákna, pričom každé vlákno má prístup k inštancii servletu, jeho metódam a premenným.
  3. Každé vlákno obsluhuje vlastné požiadavky a odozvy, ktoré vracia príslušnému klientovi.

Ak ste sa dočítali až sem, gratulujem. Ani ja nemám moc rád sivú teóriu, ale nič sa nedá robiť, základy je treba položiť. V budúcom článku sa bližšie pozrieme na životný cyklus servletu.

Užitočné zdroje

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Žádný příspěvek v diskuzi

Odpovědět