Servlet

A Wikipédiából, a szabad enciklopédiából
A JSP fájlokból is servlet kód generálódik

A servlet egy olyan Java objektum, amely HTTP kérést dolgoz fel és HTTP választ generál. Ezzel ugyanúgy a dinamikus tartalomgenerálás problémáját oldja meg, mint a PHP, a CGI és az ASP.NET. A generált tartalom jellemzően HTML, de lehet például XML is.

A servlet container a webszerver azon komponense, amely a servleteket kezeli. A container dolga a servletek életciklusainak a kezelése és az URL-ek hozzárendelése a servletekhez.

A javax.servlet és javax.servlet.http csomagokban specifikált Java Servlet API tartalmazza a servlet és a servlet container kommunikációjához szükséges osztályokat.

A servlet kódja megírható Java nyelven is, viszont generálható JavaServer Pages (JSP) oldalból is. A servlet illetve JSP forráskódot és a webalkalmazás többi részét jellemzően WAR fájlba csomagolják, ami nem más, mint egy ZIP fájl .war kiterjesztéssel. (A war itt nem a háborúra utal, hanem a web archive rövidítése.)

Verziótörténet[szerkesztés | forrásszöveg szerkesztése]

A servlet specifikáció 1.0 verzióját a Sun Microsystems készítette el és adta ki 1997 júniusában. A 2.3 verziótól kezdve a specifikációt a Java Community Process keretében fejlesztik. A JSR 53 dokumentum definiálja a Servlet 2.3 és a JSP 1.2 specifikációkat. A JSR 154 dokumentum tartalmazza a Servlet 2.4 és 2.5 specifikációkat.

James Gosling már a Java programozási nyelv kezdeteikor gondolt a servletekre, de a koncepció nem érett termékké addig, amíg a Sun ki nem adta a Java Web Server-t.[1] A később megjelent Java EE specifikációnak is a részévé vált a Servlet API.

Verzió Kiadás dátuma Platform Fontosabb változások
3.0 2009. december JavaEE 6, J2SE 6.0 asszinkron servlet, biztonság, fájl feltöltés
2.5 2005. szeptember JavaEE 5, J2SE 5.0 Előfeltétele a J2SE 5.0, támogatja az annotációkat.
2.4 2003. november J2EE 1.4, J2SE 1.3 A web.xml fájl XML sémát használ.
2.3 2001. augusztus J2EE 1.3, J2SE 1.2 Megjelennek a Filter-ek.
2.2 1999. augusztus J2EE 1.2, J2SE 1.2 A J2EE részévé válik a Servlet API. Bevezetik a független, .war fájlokban tárolt webalkalmazásokat.
2.1 1998. november specifikálatlan Az első hivatalos specifikáció. Megjelennek a RequestDispatcher és a ServletContext objektumok.
2.0 JDK 1.1 A Java Servlet Development Kit 2.0 részeként.
1.0 1997. június  

A servlet életciklusa[szerkesztés | forrásszöveg szerkesztése]

A servlet életciklusa az alábbi fázisokból áll:

  1. A container példányosítja (létrehozza) a servlet objektumot.
  2. A container meghívja a servlet példány init() metódusát. Ez a metódus inicializálja a servletet és mindenképp le kell futnia mielőtt a servlet HTTP kéréseket tudna fogadni. Az init() metódus csak egyszer fut le a servlet élete során.
  3. Az inicializációt követően a servlet képes a klienseket kiszolgálni. A container minden HTTP kérésre meghívja a servlet service() metódusát. Minden kérés külön szálban hajtódik végre.
  4. A servlet életének záróakkordja az, amikor a container meghívja a destroy() metódusát. Az init() metódushoz hasonlóan a destroy() is csak egyszer hajtódik végre a szerver életében.

ServletConfig és ServletContext[szerkesztés | forrásszöveg szerkesztése]

ServletContext csak egy van minden alkalmazásban. Ezt az objektumot minden servlet használhatja alkalmazásszintű információk és konténeradatok lekérdezésére. ServletConfig példány viszont minden servlethez külön létezik. Ez az objektum az egyes servletek inicializációjához szükséges paramétereket tartalmazza. A ServletContextet a ServletConfigon keresztül és a ServletRequesten keresztül is lekérdezdezheti a szoftverfejlesztő.

Példa kód[szerkesztés | forrásszöveg szerkesztése]

A következő példa servlet kiírja "Hello world"-t a HTML oldalra.

Megjegyzendő, hogy a HttpServlet alosztálya a GenericServlet-nek, és implementálja a Servlet interface-t.

A service() metodódus továbbítja a kéréseket a következő metódusok felé: doGet(), doPost(), doPut(), doDelete().

import java.io.IOException;
import java.io.PrintWriter;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
public class HelloWorld extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    PrintWriter out = response.getWriter();
    out.println("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0 " +
                "Transitional//EN\">\n" +
                "<html>\n" +
                "<head><title>Hello World</title></head>\n" +
                "<body>\n" +
                "<h1>Hello, world!</h1>\n" +
                "</body></html>");
  }
}

Servlet containerek[szerkesztés | forrásszöveg szerkesztése]

A servlet container egy olyan webszerver, ami támogatja a servletek futtatását. Képesnek kell lennie az alapvető webszerver funkcionalitásra, azaz tudnia kell HTTP kéréseket kezelni, továbbá kell bele egy java futtatókörnyezet (JRE), végül tudnia kell URL-eket servletmetódus hívásokká alakítani. A servletek telepítési módja a containerben sokféle lehet, a container implementációjától függ. Minden container esetében meg kell adni a telepítéskor azt az URL-t, ahol a servlet elérhető. Az egyéb paraméterek containerfüggőek.

A servlet containereket szokták illetni web container vagy web engine kifejezésekkel is.

Lásd még[szerkesztés | forrásszöveg szerkesztése]

Külső hivatkozások[szerkesztés | forrásszöveg szerkesztése]

Források[szerkesztés | forrásszöveg szerkesztése]

  1. Servlet History. (Hozzáférés: 2008. június 12.)