Jakarta Servlet - Jakarta Servlet - Wikipedia
![]() | tento článek potřebuje další citace pro ověření.únor 2014) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
![]() | tento článek má nejasný styl citace.Květen 2016) (Zjistěte, jak a kdy odstranit tuto zprávu šablony) ( |
Původní autoři | Pavni Diwanji |
---|---|
Vývojáři | Eclipse Foundation |
První vydání | Prosince 1996 |
Stabilní uvolnění | 5.0 / 7. září 2020 |
Úložiště | ![]() |
Napsáno | Jáva |
Plošina | Jakarta EE 9 |
Velikost | 2,56 MB |
Typ | Softwarová součást pro Webové rozhraní API |
Licence | Veřejná licence Eclipse |
webová stránka | jakarta |

A Jakarta Servlet (dříve Java Servlet) je Jáva softwarová součást který rozšiřuje možnosti a serveru. Ačkoli servlety mohou reagovat na mnoho typů požadavků, nejčastěji se implementují webové kontejnery pro hostování webové aplikace na webové servery a tak se kvalifikovat jako servlet na straně serveru webové rozhraní API. Takové webové servlety jsou Jáva protějšek k jinému dynamický webový obsah technologie jako PHP a ASP.NET.
Úvod
Jakarta Servlet zpracovává nebo ukládá a Třída Java v Jakarta EE který odpovídá Jakarta Servlet API,[1] standard pro implementaci tříd Java, které reagují na požadavky. Servlety mohly v zásadě komunikovat přes jakékoli klient-server protokol, ale nejčastěji se používají s HTTP. Proto se „servlet“ často používá jako zkratka pro „servlet HTTP“.[2] Tak, a vývojář softwaru může k přidání použít servlet dynamický obsah do a webový server za použití Java platforma. Generovaný obsah je běžný HTML, ale mohou to být i další údaje, jako např XML a častěji JSON. Servlety mohou udržovat Stát v zasedání proměnných napříč mnoha transakcemi serveru pomocí HTTP cookies nebo Mapování URL.
Jakarta Servlet API bylo do určité míry nahrazeno dvěma standardními technologiemi Java pro webové služby:
- the Jakarta RESTful webové služby (JAX-RS 2.0) užitečné pro služby AJAX, JSON a REST a
- the Jakarta XML Web Services (JAX-WS) užitečné pro MÝDLO Webové služby.
Chcete-li nasadit a spustit servlet, a webový kontejner musí být použito. Webový kontejner (také známý jako servletový kontejner) je v podstatě komponenta webového serveru, který interaguje s servlety. Webový kontejner je zodpovědný za správu životního cyklu servletů, mapování adresy URL na konkrétní servlet a zajištění toho, aby měl žadatel adresy URL správná přístupová práva.
Servlet API obsažené v Balíček Java hierarchie javax.servlet
, definuje očekávané interakce webového kontejneru a servletu.[2]
A Servlet
je objekt který obdrží požadavek a na základě tohoto požadavku vygeneruje odpověď. Základní balíček servletu definuje objekty Java, které představují požadavky a odpovědi servletů, stejně jako objekty, které odrážejí konfigurační parametry servletu a prostředí pro provádění. Balík javax.servlet.http
definuje HTTP - specifické podtřídy obecných prvků servletu, včetně objektů správy relací, které sledují více požadavků a odpovědí mezi webovým serverem a klientem. Servlety mohou být baleny v a Soubor WAR jako webová aplikace.
Servlety lze generovat automaticky z Stránky serveru Jakarta (JSP) Překladač Jakartských serverových stránek. Rozdíl mezi servlety a JSP je v tom, že servlety obvykle vkládají HTML do kódu Java, zatímco JSP vloží kód Java do HTML. Zatímco přímé použití servletů ke generování HTML (jak je ukázáno v níže uvedeném příkladu) se stalo vzácným, webový rámec MVC vyšší úrovně v Jakartě EE (JSF ) stále výslovně používá technologii servletu pro zpracování požadavků / odpovědí na nízké úrovni prostřednictvím FacesServlet
. O něco starší použití je použití servletů ve spojení s JSP ve vzoru nazvaném „Model 2 ", což je příchuť model – pohled – řadič.
Aktuální verze servletu je 4.0.[3]
Dějiny
Rozhraní Java Servlet API bylo poprvé veřejně oznámeno na úvodní schůzce JavaOne konference v květnu 1996.[4][5] Asi dva měsíce po oznámení na konferenci byla první veřejná implementace zpřístupněna na webových stránkách JavaSoft. Jednalo se o první alfa webového serveru Java (JWS; tehdy známé pod svým kódovým jménem) Jeeves)[6] který by byl nakonec odeslán jako produkt 5. června 1997.[7]
Ve svém blogu na java.net, Veterán Slunce a GlassFish vedoucí Jim Driscoll podrobně popisuje historii technologie servletů.[8] James Gosling první myšlenka na servlety v raných dobách roku Jáva, ale koncept se stal produktem až v prosinci 1996, kdy společnost Sun dodala společnost JWS.[9][10][11] To bylo před tím, co je nyní Jakarta EE bylo provedeno do specifikace.
Specifikaci Servlet1 vytvořil Pavni Diwanji[12][13] zatímco pracovala v Sun Microsystems, s verzí 1.0 dokončenou v červnu 1997. Počínaje verzí 2.2 byla specifikace vyvinuta pod Proces komunity Java.
Verze servletového API | Uvolněno | Specifikace | Plošina | Důležité změny |
---|---|---|---|---|
Jakarta Servlet 5.0.0 M1 | 12. června 2020 | 5.0 | Jakarta EE 9 | API přesunuto z balíčku javax.servlet na jakarta.servlet |
Jakarta Servlet 4.0.3 | 13. srpna 2019 | 4.0 | Jakarta EE 8 | Přejmenováno z ochranné známky „Java“ |
Java Servlet 4.0 | Září 2017 | JSR 369 | Java EE 8 | HTTP / 2 |
Servlet Java 3.1 | Květen 2013 | JSR 340 | Java EE 7 | Neblokující I / O, mechanismus upgradu protokolu HTTP (WebSocket )[14] |
Servlet Java 3.0 | Prosince 2009 | JSR 315 | Java EE 6, Java SE 6 | Možnost připojení, snadný vývoj, asynchronní servlet, zabezpečení, nahrávání souborů |
Servlet Java 2.5 | Září 2005 | JSR 154 | Java EE 5, Java SE 5 | Vyžaduje Java SE 5, podporuje anotace |
Servlet Java 2.4 | Listopad 2003 | JSR 154 | J2EE 1.4, J2SE 1.3 | web.xml používá schéma XML |
Servlet Java 2.3 | Srpna 2001 | JSR 53 | J2EE 1.3, J2SE 1.2 | Přidání Filtr |
Java Servlet 2.2 | Srpna 1999 | JSR 902, JSR 903 | J2EE 1.2, J2SE 1.2 | Stává se součástí J2EE, představeného nezávislých webových aplikací v souborech .war |
Servlet Java 2.1 | Listopadu 1998 | 2.1a | Nespecifikováno | Přidána první oficiální specifikace RequestDispatcher , ServletContext |
Servlet Java 2.0 | Prosinec 1997 | N / A | JDK 1.1 | Část z dubna 1998 Java Servlet Development Kit 2.0[15] |
Servlet Java 1.0 | Prosince 1996 | N / A | Část z června 1997 Java Servlet Development Kit (JSDK) 1.0[9] |
Životní cyklus servletu
Pro životní cyklus servletu jsou ústřední tři metody. Tyto jsou init ()
, servis()
, a zničit()
Jsou implementovány každým servletem a jsou vyvolávány v určitých časech serverem.
- Během inicializační fáze servletu životní cyklus, webový kontejner inicializuje instanci servletu voláním
init ()
metoda, předání objektu implementujícíhojavax.servlet.ServletConfig
rozhraní. Tento konfigurační objekt umožňuje servletu přístup název-hodnota inicializační parametry z webové aplikace. - Po inicializaci může instance servletu obsluhovat požadavky klientů. Každý žádost je obsluhován ve svém samostatném vlákně. Webový kontejner volá
servis()
způsob servletu pro každý požadavek. Theservis()
metoda určuje druh vytvářeného požadavku a odesílá jej do vhodné metody pro zpracování požadavku. Vývojář servletu musí poskytnout implementaci těchto metod. Pokud je zadán požadavek na metodu, která není implementována servletem, je volána metoda nadřazené třídy, což obvykle vede k vrácení chyby žadateli. - Nakonec webový kontejner volá
zničit()
metoda, která servlet vyřadí z provozu. Thezničit()
metoda, jakoinit ()
, je volán pouze jednou v životním cyklu servletu.
Následuje typický uživatelský scénář těchto metod.
- Předpokládejme, že uživatel požaduje návštěvu URL.
- Prohlížeč poté vygeneruje požadavek HTTP pro tuto adresu URL.
- Tento požadavek je poté odeslán na příslušný server.
- Požadavek HTTP je přijat webovým serverem a předán do kontejneru servletu.
- Kontejner mapuje tento požadavek na konkrétní servlet.
- Servlet se dynamicky načte a načte do adresního prostoru kontejneru.
- Kontejner vyvolá
init ()
metoda servletu.- Tato metoda je vyvolána, pouze když je servlet poprvé načten do paměti.
- Servletu je možné předat inicializační parametry, aby se mohl sám konfigurovat.
- Kontejner vyvolá
servis()
metoda servletu.- Tato metoda se nazývá ke zpracování požadavku HTTP.
- Servlet může číst data, která byla poskytnuta v požadavku HTTP.
- Servlet může také formulovat odpověď HTTP pro klienta.
- Servlet zůstává v adresním prostoru kontejneru a je k dispozici ke zpracování veškerých dalších požadavků HTTP přijatých od klientů.
- The
servis()
metoda je volána pro každý požadavek HTTP.
- The
- Kontejner se může v určitém okamžiku rozhodnout uvolnit servlet z jeho paměti.
- Algoritmy, kterými je toto rozhodnutí učiněno, jsou specifické pro každý kontejner.
- Kontejner volá servlet
zničit()
metoda pro vzdání se jakýchkoli zdrojů, jako jsou popisovače souborů, které jsou alokovány pro servlet; důležitá data mohou být uložena do trvalého úložiště. - Paměť přidělenou pro servlet a jeho objekty lze poté uvolnit smetí.
Příklad
Následující příklad servletu vytiskne, kolikrát je jeho servis()
metoda byla volána.
Všimněte si, že HttpServlet
je podtřída GenericServlet
, implementace Servlet
rozhraní.
The servis()
metoda HttpServlet
třída odesílá požadavky metodám doGet ()
, doPost ()
, doPut ()
, doDelete ()
, a tak dále; podle požadavku HTTP. V níže uvedeném příkladu servis()
je přepsán a nerozlišuje, kterou metodu požadavku HTTP obsluhuje.
import java.io.IOException;import javax.servlet.ServletConfig;import javax.servlet.ServletException;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;veřejnost třída Příklad ServletLifeCycle rozšiřuje HttpServlet { soukromé Celé číslo sharedCounter; @ Přepis veřejnost prázdnota inic(finále ServletConfig konfigurace) hodí ServletException { super.inic(konfigurace); getServletContext().log(„volal init ()“); sharedCounter = 0; } @ Přepis chráněný prázdnota servis(finále HttpServletRequest žádost, finále HttpServletResponse Odezva) hodí ServletException, IOException { getServletContext().log(„služba () s názvem“); int localCounter; synchronizované (sharedCounter) { sharedCounter++; localCounter = sharedCounter; } Odezva.getWriter().psát si(„Zvyšování počtu na“ + localCounter); // přístup k místní proměnné } @ Přepis veřejnost prázdnota zničit() { getServletContext().log("zničení () s názvem"); }}
Kontejnerové servery
Specifikace technologie Servlet byla implementována do mnoha produktů. Seznam implementací naleznete na webu webový kontejner strana.
Reference
- ^ „Servlet (Java (TM) EE 7 Specification APIs)“. oracle.com. Citováno 2018-07-25.
- ^ A b „Servlet Essentials - Kapitola 1“. novocode.com. Archivovány od originál dne 18. 12. 2017.
- ^ https://jcp.org/en/jsr/detail?id=369
- ^ Freedman, Matt (26. června 1996). „Zpráva o konferenci JavaOne“. JavaWorld.
- ^ Diwanji, Pavani; Connelly, Dave; Wagle, Prasad (29. května 1996). "Java server a servlety". Servery a serverová rozšíření (PDF). JavaOne 1996. Archivováno (PDF) od originálu dne 2000-08-16. Citováno 2020-02-01.
- ^ Chang, Phil Inje (1. července 1997). "Rozhovor: Tým Java Web Server vám dá hubený". JavaWorld. Citováno 2018-07-25.
- ^ Chang, Phil Inje (1. června 1997). „Webový server Java je dodáván!“. JavaWorld. Citováno 2018-07-25.
- ^ "Historie servletů | community.oracle.com". Weblogs.java.net. 10. 12. 2005. Citováno 2013-06-14.
- ^ A b Hunter, Jason (březen 2000). "Časová osa servletu". Kromě programování Java Servlet. O'Reilly Conference on Java. O'Reilly Media.
- ^ „Webový server Java“. Javasoft. Sun Microsystems. Archivováno od originálu 11. 1. 1998. Citováno 2020-02-01.
- ^ „Webový server Java (tm)“. Sun Microsystems. Archivováno z původního dne 2002-02-06. Citováno 2020-02-01.
- ^ „Pavni Diwanji“. Rodinný online bezpečnostní institut. Citováno 12. listopadu 2016.
- ^ US patent 5928323, Gosling, James A.; Pavni Diwanji a David W. Connelly, „Přístroje a metody pro dynamické generování informací se softwarovými objekty na straně serveru“, publikováno 27. 7. 1999, vydáno 27. 7. 1999, přiděleno Sun Microsystems
- ^ „Co je nového v servletu 3.1? - Java EE 7 jde vpřed (Arun Gupta, Miles to go ...)“. oracle.com. Citováno 22. listopadu 2016.
- ^ Crawford, William; Hunter, Jason (listopad 1998). "Předmluva". Programování servletu Java (1. vyd.). O'Reilly Media. str. ix – x. ISBN 978-1-56592-391-1.
Pokrýváme verzi 2.0 Servlet API, která byla představena jako součást Java Web Server 1.1 v prosinci 1997 a objasněna vydáním Java Servlet Development Kit 2.0 v dubnu 1998.