Servlet
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]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 |
---|---|---|---|
Jakarta Servlet 6.0 | 6.0 2021. október 15. | Jakarta EE 10 | Elavult funkciók eltávolítása és szükséges fejlesztések megvalósítása |
Jakarta Servlet 5.0 | 5.0 2020. október 9. | Jakarta EE 9 | API áthelyezve a javax.servlet csomagból a jakarta.servlet csomagba |
Jakarta Servlet 4.0.3 | 2019. szeptember 10 | Jakarta EE 8 | Átnevezve a védett "Java" névről. |
Java Servlet 4.0 | 2017. szeptember | Java EE 8 | HTTP/2 |
Java Servlet 3.1 | 2013. május | JavaEE 7 | Non-blocking I/O, HTTP protocol upgrade mechanizmus (WebSocket)[2] |
Java Servlet 3.0 | 2009. december | JavaEE 6, J2SE 6.0 | asszinkron servlet, biztonság, fájl feltöltés |
Java Servlet 2.5 | 2005. szeptember | JavaEE 5, J2SE 5.0 | Előfeltétele a J2SE 5.0, támogatja az annotációkat. |
Java Servlet 2.4 | 2003. november | J2EE 1.4, J2SE 1.3 | A web.xml fájl XML sémát használ. |
Java Servlet 2.3 | 2001. augusztus | J2EE 1.3, J2SE 1.2 | Megjelennek a Filter -ek.
|
Java Servlet 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. |
Java Servlet 2.1 | 1998. november | specifikálatlan | Az első hivatalos specifikáció. Megjelennek a RequestDispatcher és a ServletContext objektumok.
|
Java Servlet 2.0 | JDK 1.1 | A Java Servlet Development Kit 2.0 részeként. | |
Java Servlet 1.0 | 1997. június |
A servlet életciklusa
[szerkesztés]A servlet életciklusa az alábbi fázisokból áll:
- A container példányosítja (létrehozza) a servlet objektumot.
- 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. Azinit()
metódus csak egyszer fut le a servlet élete során. - 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. - A servlet életének záróakkordja az, amikor a container meghívja a
destroy()
metódusát. Azinit()
metódushoz hasonlóan adestroy()
is csak egyszer hajtódik végre a servlet életében.
ServletConfig és ServletContext
[szerkesztés]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]A következő példa servlet kiírja "Hello world" szöveget a HTML oldalra – valójában egy teljes HTML oldalt generál, amelyen elhelyezi a fenti szöveget, h1-es címként formázva.
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]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]Külső hivatkozások
[szerkesztés]- Sun-féle servlet oktatóanyag angolul
- Sun-féle servlet leírás angolul
- JSR 154 (A Servlet 2.4 és 2.5 specifikációk.)
- JSR 53 (A Servlet 2.3 specifikáció.)
- A Servlet 2.3 API
Források
[szerkesztés]- ↑ Servlet History. [2008. szeptember 5-i dátummal az eredetiből archiválva]. (Hozzáférés: 2008. június 12.)
- ↑ Archivált másolat. (Hozzáférés: 2015. december 10.)