Java Servlet

Z Wikipedie, otevřené encyklopedie
Skočit na: Navigace, Hledání

Servlet je program napsaný v jazyce Java, který je nástrojem pro tvorbu webových aplikací. Funguje na principu zpracování HTTP požadavků a generování HTML stránek. Servletem je každá Java třída, která implementuje interface javax.servlet.Servlet. Protože ale z praktického hlediska má smysl uvažovat pouze servlety obsluhující protokol HTTP, je důležitější vědět, že HTTP servletem je každá třída, která je potomkem třídy javax.servlet.http.HttpServlet.[1]


Struktura[editovat | editovat zdroj]

Třída typu Servlet v naprosté většině případů rozšiřuje (klíčové slovo extends) třídu HttpServlet. Dále je nutné přepsat (klíčový pojem @Override) metodu doGet(), která bere parametr typu HttpServletRequest a HttpServletResponse a nevrací žádnou návratovou hodnotu, aby pro nás Servlet vytvořil HTML stránku. Metoda musí propouštět (throws) nebo zpracovávat výjimku IOException. Třída neobsahuje metodu main(), protože všechny metody jsou volány kontejnerem. V případě, že bychom nepřepsali metodu doGet(), museli bychom přepsat jinou metodu, například doPost(). Pro vypsání textu na stránku, musíme vytvořit objekt třídy PrintWriter a přiřadit do našeho objektu volání metody getWriter() na parametru typu HttpServletResponse metody doGet(). Poté jen zavoláme nad objektem typu PrintWriter metodu println() s parametrem typu String, který obsahuje text ve formátu HTML. Kód by mohl vypadat nějak takto:

  public class MujServlet extends HttpServlet { 
      @Override
      public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException { 
          PrintWriter print = response.getWriter();
          print.println("Text ve formatu HTML");
      } 
  }

Rozdíly mezi metodami doGet() a doPost()[editovat | editovat zdroj]

Povinností třídy rozšiřující třídu HttpServlet je přepsat minimálně jednu metodu, která zpracovává příchozí HTTP dotaz. Nejvyužívanějšími metodami jsou právě metody doGet() a doPost(). Předpis obou metod je velice podobný:

  • public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {}
  • public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {}

Tyto metody se liší ve způsobu, jakým zasílají data. Metoda doGet() posílá data pomocí parametrů uvedených na konci URL adresy. Tento způsob není vhodný při vkládání dlouhých textových řetězců a způsobuje opětovné posílání dat při obnově stránky. Meto doPost() posílá data uvnitř HTTP dotazu. Díky tomu je nám umožněno posílat textové řetězce téměř neomezené délky. Nejsme ovšem schopni přečíst data zvenku, což může být výhodou. Pokud metodu použijeme korektně, tak nedojde k opakovanému posílání dat.

Rozdíly mezi Filtry a Listenery[editovat | editovat zdroj]

Servletový Filtr je třída implementující Java třídu Filter a primárně slouží ke sledování žádostí a odpovědí odeslaných resp. přijatých Servletem. Filtr se používá například pro autentizaci uživatele. Naproti tomu Servletový Listener sleduje události ve webovém kontejneru a nějakým způsobem na ně reaguje. Událostí může být například spuštění nebo ukončení aplikace. Příkladem Listeneru může být třída implementující Java třídu HttpSessionListener nebo ServletContextListener.

JSP[editovat | editovat zdroj]

Java Server Pages alias JSP jsou textové soubory s příponou .jsp, umístěné ve webové aplikaci, které jsou při prvním požadavku na zobrazení automaticky převedeny servletovým kontejnerem na servlet (.java) a přeloženy do Java třídy (.class). Servlety vzniklé z JSP stránek jsou tedy mapovány na URL původního textového souboru.[2] JSP neboli Java Server Pages jsou v podstatě Servlety. Jedná se soubory s příponou .jsp, které jsou serverem (nejčastěji Apache Tomcat) přeloženy na zdrojový kód Servletu s příponou .java. Server následně načte přeložený .java soubor, který je již Servletem a předá mu HTTP požadavek. Psaní kódu v JSP souboru je velmi podobné psaní kódu v PHP skriptovacím programovacím jazyce. Hlavní výhodou JSP je množství napsaného kódu, které je násobně menší, než kdyby byl kód napsán ve třídě Servletu. V případě, že se rozhodneme využívat JSTL, množství napsaného kódu se ještě více zredukuje, protože nemusíme psát kód v jazyce Java, ale jen používáme tagy z JSTL knihovny. JSTL je knihovna usnadňující časté operace pomocí již vytvořených značek. Pracuje s cykly, vyhodnocováním, formáty či databází (práce s databází z JSP by ale porušila MVC).[3]

Reference[editovat | editovat zdroj]

  1. http://kore.fi.muni.cz/wiki/index.php/Úvod_do_webových_aplikací, Servlet API
  2. https://kore.fi.muni.cz/wiki/index.php/Java_Server_Pages, JSP - Java Server Pages
  3. http://www.linuxsoft.cz/article.php?id_article=1970, Java na Webu II. - Základní stavba : JSP (View)