V druhom článku o Java Servlets sme prešli životným cyklom klasického HTTP servletu. V tomto článku si vytvoríme jednoduchý servlet, vysvetlíme si jeho štruktúru a ukážeme si, ako tento servlet nasadiť.

Servlet generujúci statický obsah

Generujúci statický obsah – myslí sa tým, že kedykoľvek zavoláte takýto servlet, vráti vám ten istý výsledok. Teda niečo statické, servlet nezískava dáta z databázy, zo súboru alebo iným dynamickým spôsobom.

V príklade najprv uvediem kompletný výpis kódu a potom ho postupne vysvetlím. Zdrojové texty servletov sú klasické *.java súbory. Použitý príklad si môžete stiahnuť aj rovno vyskúšať.

// HelloWorldServlet.java package interval;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class HelloWorldServlet extends HttpServlet {
  protected void doGet(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {
    res.setContentType(„text/html“);
    PrintWriter out = res.getWriter();
    out.println(„<HTML><HEAD><TITLE>Hello World!</TITLE>“+
        „</HEAD><BODY><H2>Hello World!</H2></BODY></HTML>“);
    out.println(„<HR><EM>“+getServletInfo()+“</EM>“);
    out.close();
  }
  public String getServletInfo() {
    return „HelloWorldServlet 1.0“;
  }
}

Ak by ste požiadali server (napríklad Jakarta-Tomcat) o náš servlet HelloWorldServlet, vrátil by nám takýto výsledok:

Hello World!

Prejdime si teraz postupne kód servletu a vysvetlime si jednotlivé časti. V prvom riadku definujem názov balíčka, ktorého súčasťou náš servlet bude. A o niečo nižšie vykonám import troch balíkov, ktoré je treba vždy v každom servlete naimportovať:

package interval;
 
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

Ďalej nasleduje deklarácia samotnej triedy nášho http servletu HelloWorldServlet, ktorá musí byť odvodená z triedy HttpServlet. Po deklarácii triedy nasleduje predefinovanie metódy doGet(HttpServletRequest req, HttpServletResponse res), ktorá ako vstupné parametre očakáva objekty zastupujúce požiadavku a odpoveď. Metóda doGet() potenciálne môže vyhodiť výnimku ServletException a IOException.

public class HelloWorldServlet extends HttpServlet {
  protected void doGet(HttpServletRequest req, HttpServletResponse res)
        throws ServletException, IOException {
   // … telo metódy doGet() …
  }
}

V tele metódy doGet() ako prvé čo musím urobiť, je nastaviť MIME (Multipurpose Internet Mail Extension) typ dokumentu, ktorý pošle servlet ako odozvu na požiadavku. V našom prípade je to text/html. Prostredníctvom metódy setContentType() určujem aký typ dokumentu náš servlet vytvorí. Môže ísť o text, html, xml, tabuľky MS Excel, obrázky GIF, JPEG, PNG a množstvo ďalších. Nastavenie vykonám prostredníctvom objektu triedy HttpServletResponse. Toto nastavenie musím vykonať skôr ako čokoľvek odošlem na výstup. Ďalšie informácie o MIME nájdete na RFC-Editor.

res.setContentType(„text/html“);

Pokračujeme ďalej. Ak máme nastavený typ dokumentu, môžeme požiadať objekt triedy HttpServletResponse prostredníctvom metódy getWriter() o vytvorenie výstupného prúdu triedy PrintWriter. Prostredníctvom tohto objektu budeme zapisovať textové údaje na výstup. Po ukončení zapisovania výstupný prúd uzavrieme.

PrintWriter out = res.getWriter();
 out.println(„<HTML><HEAD><TITLE>Hello World!</TITLE>“+
    „</HEAD><BODY><H2>Hello World!</H2></BODY></HTML>“);
 out.println(„<HR><EM>“+getServletInfo()+“</EM>“);
 out.close();

Do servletu som len pre zaujímavosť doplnil aj metódu getServletInfo(), ktorá vráti jednoduchý reťazec a ktorú volám v metóde println().

Kompilácia a nasadenie servletu

Po tom, čo máme servlet hotový, musíme ho skompilovať (javac HelloWorldServlet.java) a umiestniť na vhodné miesto na server. V prípade, že použijete server Tomcat, nemal by byť s kompiláciou problém. V adresári tomcat_install_dir/common/lib by sa mal nachádzať súbor servlet.jar, ktorý obsahuje balíky javax.servlet.http a javax.servlet.jsp. Ak sa vám podarí servlet bez chýb skompilovať, dostanete súbor HelloWorldServlet.class. Tento súbor je treba nakopírovať do tomcat_install_dir/webapps/vasa_aplikacia/WEB-INF/classes/interval/. Ak server beží, treba ho následne reštartovať.

V prehliadači potom zadáte toto URL (ak sa pozriete na vyššie uvedený obrázok, je to tam vidieť):

http://localhost:8080/
        vasa_aplikacia/servlet/interval.HelloWorldServlet

Ďalej si môžete vytvoriť v adresári WEB-INF súbor web.xml. To je konfiguračný súbor vašej aplikácie. Pridajte doň tieto riadky:

<?xml version=“1.0″ encoding=“ISO-8859-1″?>
<!DOCTYPE web-app
   PUBLIC „-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN“
   „http://java.sun.com/dtd/web-app_2_3.dtd“>
<web-app>
  <servlet>
    <servlet-name>Hello</servlet-name>
    <servlet-class>interval.HelloWorldServlet</servlet-class>
  </servlet>
</web-app>

Ak si tento konfiguračný súbor vytvoríte a vložíte doň uvedené riadky, môžete sa v prehliadači odkazovať na meno servletu uvedené vo web.xml v elemente <servlet-name>. (Teda zadáte http://localhost:8080/vasa_aplikacia/servlet/Hello. Za localhost dosaďte názov alebo IP vášho servera.) V ďalšej časti sa pozrieme bližšie na spôsob možnej inicializácie servletu prostredníctvom súboru web.xml.

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

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

1 Příspěvěk v diskuzi

Odpovědět