Servarta Jakarta - Jakarta Servlet

Jakartský servlet
Původní autoři Pavni Diwanji
Vývojáři Nadace Eclipse
První vydání Prosinec 1996 ; Před 24 lety ( 1996-12 )
Stabilní uvolnění
5.0 / 7. září 2020 ; Před 10 měsíci ( 2020-09-07 )
Úložiště Upravte to na Wikidata
Napsáno Jáva
Plošina Jakarta EE 9
Velikost 2,56 MB
Typ Softwarová komponenta pro Web API
Licence Veřejná licence Eclipse
webová stránka jakarta .ee /specifikace /servlet /5 .0 /
Životnost souboru JSP

Jakarta Servlet (dříve Java Servlet) je Java softwarová komponenta, která rozšiřuje možnosti na serveru . Ačkoli servlety mohou reagovat na mnoho typů požadavků, nejčastěji implementují webové kontejnery pro hostování webových aplikací na webových serverech a kvalifikují se tak jako webové API servletů na straně serveru . Takové webové servlety jsou protějškem Javy k jiným technologiím dynamického webového obsahu, jako jsou PHP a ASP.NET .

Úvod

Servis Jakarta zpracovává nebo ukládá třídu Java v Jakarta EE, která je v souladu s Jakartou Servlet API, standardem pro implementaci tříd Java, které reagují na požadavky. Servlety by v zásadě mohly komunikovat přes jakýkoli protokol klient -server, ale nejčastěji se používají s HTTP . Proto se „servlet“ často používá jako zkratka pro „servlet HTTP“. Tak, softwarový vývojář může používat servletu přidat dynamický obsah na webovém serveru pomocí platformy Java . Generovaný obsah je obvykle HTML , ale mohou to být i jiná data, jako je XML a běžněji JSON. Servlety mohou udržovat stav v proměnných relací napříč mnoha transakcemi serveru pomocí souborů cookie HTTP nebo mapování adresy URL .

Jakarta Servlet API bylo do určité míry nahrazeno dvěma standardními technologiemi Java pro webové služby:

K nasazení a spuštění servletu je třeba použít webový kontejner . Webový kontejner (také známý jako kontejner servletů) je v podstatě součástí webového serveru, který interaguje se 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 hierarchii balíčků Javajavax.servlet , definuje očekávané interakce webového kontejneru a servletu.

A Servletje objekt, který přijímá požadavek a generuje odpověď na základě tohoto požadavku. Základní balíček Servlet definuje objekty Java, které představují požadavky a odpovědi servletů, a také objekty, které odrážejí konfigurační parametry servletu a prostředí provádění. Balíček javax.servlet.httpdefinuje podtřídy specifické pro HTTP generických prvků servletu, včetně objektů pro správu relací, které sledují více požadavků a odpovědí mezi webovým serverem a klientem. Servlety mohou být zabaleny do souboru WAR jako webová aplikace .

Servlety lze automaticky generovat ze serverů Jakarta Server Pages (JSP) pomocí kompilátoru serveru Jakarta Server Pages . Rozdíl mezi servlety a JSP spočívá v tom, že servlety obvykle vkládají HTML do kódu Java, zatímco JSP vkládají kód Java do HTML. I když se přímé použití servletů ke generování HTML (jak je ukázáno v příkladu níže) stalo vzácným, webový framework MVC vyšší úrovně v Jakartě EE ( JSF ) stále výslovně používá technologii servletů pro zpracování požadavků a odpovědí na nízké úrovni prostřednictvím FacesServlet. Poněkud starší použití je používat servlety ve spojení s JSP ve vzoru nazvaném „ Model 2 “, což je příchuť ovladače model – pohled – řadič .

Aktuální verze Servletu je 5.0.

Dějiny

Java Servlet API bylo poprvé veřejně oznámeno na ustavující konferenci JavaOne v květnu 1996. Asi dva měsíce po oznámení na konferenci byla na webu JavaSoft zpřístupněna první veřejná implementace. Jednalo se o první alfa webového serveru Java (JWS; tehdy známý pod kódovým označením Jeeves ), který byl nakonec dodán jako produkt 5. června 1997.

Ve svém blogu na java.net podrobně popisuje historii technologie servletů veterán Sun a vedoucí GlassFish Jim Driscoll. James Gosling poprvé myslel na servlety v počátcích Javy , ale tento koncept se stal produktem až v prosinci 1996, kdy Sun dodával JWS. To bylo před tím, co je nyní, Jakarta EE byla zpracována do specifikace.

Specifikaci Servlet1 vytvořila Pavni Diwanji, zatímco pracovala ve společnosti Sun Microsystems , přičemž verze 1.0 byla dokončena v červnu 1997. Počínaje verzí 2.2 byla specifikace vyvinuta v rámci komunitního procesu Java .

Historie API servletu
Verze API servletu Vydáno Specifikace Plošina Důležité změny
Jakarta Servlet 5.0.0 M1 12. června 2020 5,0 Jakarta EE 9 API bylo přesunuto z balíčku javax.servletdojakarta.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 )
Java Servlet 3.0 Prosinec 2009 JSR 315 Java EE 6, Java SE 6 Připojitelnost, 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 anotaci
Servlet Java 2.4 Listopadu 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í Filter
Servlet Java 2.2 Srpna 1999 JSR 902 , JSR 903 J2EE 1.2, J2SE 1.2 Stává se součástí J2EE, zavedeného nezávislých webových aplikací v souborech .war
Servlet Java 2.1 Listopadu 1998 2.1a Nespecifikováno První oficiální specifikace, dodal RequestDispatcher,ServletContext
Java Servlet 2.0 Prosinec 1997 N/A JDK 1.1 Část dubna 1998 Java Servlet Development Kit 2.0
Java Servlet 1.0 Prosinec 1996 N/A Část června 1997 Java Servlet Development Kit (JSDK) 1.0

Životní cyklus servletu

V životním cyklu servletu jsou klíčové tři metody. Jedná se o init(), service()a destroy(). Jsou implementovány každým servletem a jsou vyvolány v určitých časech serverem.

  • Během fáze inicializace životního cyklu servletu webový kontejner inicializuje instanci servletu voláním init()metody a předáním objektu implementujícího javax.servlet.ServletConfigrozhraní. Tento konfigurační objekt umožňuje servletu přistupovat k parametrům inicializace název-hodnota z webové aplikace.
  • Po inicializaci může instance servletu obsluhovat požadavky klientů. Každý požadavek je obsluhován ve svém vlastním samostatném vlákně. Webový kontejner service()pro každý požadavek volá metodu servletu. service()Metoda určuje druh vyzvání a odešle ji na vhodnou metodou pro zpracování požadavku. Vývojář servletu musí zajistit implementaci těchto metod. Pokud je podá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á destroy()metodu, která vyřazuje servlet z provozu. destroy()Metoda, podobně jako init()se nazývá pouze jednou za životní cyklus servletu.

Následuje typický uživatelský scénář těchto metod.

  1. Předpokládejme, že uživatel požaduje návštěvu adresy URL .
    • Prohlížeč pak pro tuto adresu URL vygeneruje požadavek HTTP.
    • Tato žádost je poté odeslána na příslušný server.
  2. Webový server přijímá požadavek HTTP a předává jej do kontejneru servletů.
    • Kontejner mapuje tento požadavek na konkrétní servlet.
    • Servlet je dynamicky získáván a načítán do adresního prostoru kontejneru.
  3. Kontejner vyvolá init()metodu servletu.
    • Tato metoda je vyvolána pouze při prvním načtení servletu do paměti.
    • Je možné předat inicializační parametry servletu, aby se mohl sám konfigurovat.
  4. Kontejner vyvolá service()metodu servletu.
    • Tato metoda je volána 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.
  5. Servlet zůstává v adresním prostoru kontejneru a je k dispozici ke zpracování všech ostatních požadavků HTTP přijatých od klientů.
    • service()Metoda se nazývá pro každý požadavek HTTP.
  6. Kontejner se v určitém okamžiku může rozhodnout uvolnit servlet z paměti.
    • Algoritmy, podle kterých se toto rozhodnutí provádí, jsou specifické pro každý kontejner.
  7. Kontejner volá metodu servletu, destroy()aby se vzdal všech prostředků, jako jsou popisovače souborů, které jsou přiděleny pro servlet; důležitá data mohou být uložena do trvalého úložiště.
  8. Paměť přidělená pro servlet a jeho objekty pak může být sbírána odpadky.

Příklad

Následující příklad servletu vytiskne, kolikrát byla jeho service()metoda volána.

Všimněte si, že HttpServletje to podtřída GenericServletimplementace Servletrozhraní.

service()Metoda HttpServlettřídy odešle požadavky na metody doGet(), doPost(), doPut(), doDelete(), a tak dále; podle požadavku HTTP. V níže uvedeném příkladu service()je přepsán a nerozlišuje, která metoda požadavku HTTP slouží.

import java.io.IOException;

import jakarta.servlet.ServletConfig;
import jakarta.servlet.ServletException;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;

public class ServletLifeCycleExample extends HttpServlet {
    private Integer sharedCounter;

    @Override
    public void init(final ServletConfig config) throws ServletException {
        super.init(config);
        getServletContext().log("init() called");
        sharedCounter = 0;
    }

    @Override
    protected void service(final HttpServletRequest request, final HttpServletResponse response) throws ServletException, IOException {
        getServletContext().log("service() called");
        int localCounter;
        synchronized (sharedCounter) {
            sharedCounter++;
            localCounter = sharedCounter;
        }
        response.getWriter().write("Incrementing the count to " + localCounter);  // accessing a local variable
    }

    @Override
    public void destroy() {
        getServletContext().log("destroy() called");
    }
}

Kontejnerové servery

Specifikace pro technologii Servlet byla implementována do mnoha produktů. Podívejte se na seznam implementací na stránce webového kontejneru .

Reference

externí odkazy