From Wikipedia, the free encyclopedia
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.)
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 az alábbi fázisokból áll:
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.service()
metódusát. Minden kérés külön szálban hajtódik végre.destroy()
metódusát. Az init()
metódushoz hasonlóan a destroy()
is csak egyszer hajtódik végre a servlet életében.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ő.
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>");
}
}
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.
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.