Java Servlet

Java Servlet – Sun Microsystems sukurta technologija, skirta dinaminiam turiniui generuoti. Java Servlet programuojamas Java programavimo kalba. Pagrindinė sąvoka šioje technologijoje – servletas. Tai serveryje esantis komponentas, gaunantis iš kliento (pvz., naršyklės) užklausą (angl. request) bei generuojantis atsaką (angl. response).

Servletas gali būti generuojamas automatiškai, pasitelkiant JavaServer Pages technologiją ar kitą šablonų generavimo variklį, tokį kaip WebMacro ar Apache Velocity.

Web talpykla (container)

Nekomercinės Web talpyklos 
 Apache Geronimo
 GlassFish
 JBoss
 Jakarta Tomcat – populiariausia Web talpykla, užsitarnavusi stabilios reputaciją
 Java System Application Server
 Jetty
 Java Mini Daemon
 Enhydra

Komercinės Web talpyklos 
 Caucho's Resin Server
 BEA WebLogic Server or Weblogic Express
 Borland Enterprise Server
 Oracle Application Server
 IBM's WebSphere
 iPlanet Sun/Netscape
 IronFlare Orion Application Server
 Macromedia JRun

Servleto naudojimas 
Servletas gali būti naudojamas keletu būdu:
 Dviejų lygių architektūra – servletas pats vienas generuoja vartotojui reikalingą puslapį. Šiuo atveju vartotojo naršyklė yra pirmas lygis, o servletas – antras. Ši architektūra pasirenkama, kuomet servleto užduotis yra loginiu požiūriu paprasta.
 Trijų lygių architektūra – servletas darbo metu susisiekia arba su atskirai parašytu ir veikiančiu sprendimus priimančiu moduliu, arba (retais atvejais) ir tiesiai su duomenų baze. Tiesioginis susisiekimas su duomenų baze, nors ir techniškai galimas, paprastai nerekomenduojamas ir atskirai nenagrinėjamas.
 Keturių lygių architektūra – servletas darbo metu susiekia su atskirai parašytu ir veikiančiu sprendimus priimančiu moduliu. Susiekiama dažniausiai per CORBA ar RMI protokolus. Šis modulis savo ruožtu susiekia su viena ar keliomis duomenų bazėmis (per JDBC).

Servleto gyvavimo ciklas 
Servletas gali būti vienoje iš šių būsenų:
 Inicializuojamas: šiuo metu arba vykdomas servleto konstruktoriaus kodas, arba init() metodas. Servletą kuria konteineris, naudodamas konstruktorių be parametrų. Sukūrus servletą, vykdomas init() metodas. Viso servleto gyvavimo metu šis init() iškviečiamas tiktai vieną kartą.
 Veikia (inicializuotas): vykdomas servleto metodas service(). Būtent šioje būsenoje servletas gali apdoroti kliento užklausas bei generuoti atsakus. Kiekvieną atsaką apdoroja atskira gija.
 Sunaikintas: šiuo metu vykdomas metodas destroy(). Jis yra iškviečiamas vieną kartą ir yra skirtas atlikti veiksmams, kurių gali prireikti prieš sunaikinant servleto objektą (pvz., uždaryti prisijungimus prie duomenų bazės).
 Neegzistuoja: servleto objektas nesukurtas arba sunaikintas.

Servleto kūrimas

Paprasčiausio servleto pavyzdys 
Programuotojas, kurdamas paprasčiausią servletą, gali paveldėti javax.servlet.http. HttpServlet klasę ir perrašyti tam tikrus jos metodus. Dažniausiai užtenka perrašyti doGet ir doPost metodus, taip pat init pradiniams duomenims pakrauti.

 init metodą iškviečia servleto talpykla iškart po servleto sukūrimo.
 doGet(HttpServletRequest request, HttpServletResponse response) vykdo HTTP GET užklausą (HTTP Get request)
 doPost(HttpServletRequest request, HttpServletResponse response) vykdo HTTP POST užklausą (HTTP Post request)
Be doGet() ir doPost() metodų, HttpServlet klasė turi atitinkamus metodus ir kitoms HTTP užklausoms (visoms, išskyrus HTTP CONNECT):
 doTrace() vykdo HTTP TRACE užklausą
 doOptions() vykdo HTTP OPTIONS užklausą
 doHead() vykdo HTTP HEAD užklausą
 doPut() vykdo HTTP PUT užklausą
 doDelete() vykdo HTTP DELETE užklausą

doGet() ir doPost() metodai perduoda HTML formoje vartotojo įvestus duomenis.
Skirtumas tarp HTTP GET ir POST metodų yra tas, kad pirmuoju metodu visa informacija apie norimą resursą perduodama interneto adresu.

HTML formos aprašymo pavyzdys:

      
     
 

Tai pavyzdys paprasčiausios formos su laukeliu įvesti tekstui ir patvirtinimo mygtuku.
Parametras action lemia, koks servletas konteineryje apdoros užklausą.

Servleto metodai doGet() ir doPost() perduoda du parametrus: HttpServletRequest ir HttpServletResponse. HttpServletRequest, be kitų duomenų, saugomos perduotų parametrų (pvz., iš html formos arba nuorodos) reikšmės.

 String klausimas = request.getParameter(„klausimas“); // request - HttpServletRequest tipo objektas

Čia jau programuotojas pats turi nuspręsti, ką daryti su gautu tekstu. Jis gali sugeneruoti naują puslapį ir nusiųsti vartotojui:

 PrintWriter out = response.getWriter();
 out.println(„Jūsų įvestas klausimas buvo: “ + klausimas);

Svarbu prisiminti, kad puslapis automatiškai baigiamas generuoti tada, kai baigiamas vykdyti doGet() arba doPost() metodas.

Realiai HTML puslapiai (kaip parodyta pavyzdyje) servleto kode negeneruojami, juose dažniausiai realizuojama verslo logika, o prezentacijai dažniausiai naudojami JSP puslapiai.

Programavimo priemonės 
Kai kurios Java programavimo aplinkų turi priemones servletų kūrimo automatizavimui:
 Borland JBuilder

Nuorodos 
 Technologijos specifikacija
 Servletų klasių hierarchija

J2EE