Servlet (Java)

Servlet je rozhraní Java , jehož implementace rozšiřuje funkčnost serveru . Servlet komunikuje s klienty prostřednictvím principu požadavek-odpověď.

Zatímco servlety mohou obsloužit jakýkoli požadavek, běžně se používají k rozšíření webových serverů . Pro takové aplikace technologie Java Servlet definuje třídy servletů specifické pro HTTP.

Balíčky javax.servleta javax.servlet.httpposkytují rozhraní a třídy pro vytváření servletů.

První specifikace servletu byla vytvořena společností Sun Microsystems (verze 1.0 byla dokončena v červnu 1997 ). Od verze 2.3 byla specifikace servletu vyvíjena pod vedením Java Community Process . Standard JSR 53 definoval specifikaci Servlet 2.3 i JavaServer Page 1.2. JSR 154 obsahuje specifikace Servlet 2.4 a 2.5. Aktuální specifikace k 2. březnu 2021 je Servlet 4.0 (popsaný v JSR-369 ).

Časová osa Servlet API

Časová osa Servlet API
Verze API servletu Uvolnění Plošina Hlavní změny
Server 4.0 září 2017 JavaEE 8 HTTP/2 Server Push
Servlet 3.1 květen 2013  (anglicky) JavaEE7 JavaSE7 Neblokující I/O, podpora nestandardních protokolů přes HTTP
Server 3.0 Prosinec 2009 Archivováno 6. srpna 2011 na Wayback Machine JavaEE6, JavaSE6 Zapojitelnost, snadnost vývoje, asynchronní servlety, bezpečnost, nahrávání souborů
Server 2.5 Září 2005 Archivováno 9. června 2008 na Wayback Machine JavaEE 5, J2SE 5.0 Vyžaduje J2SE 5.0, podpora anotací
Server 2.4 Listopad 2003 Archivováno 9. června 2008 na Wayback Machine J2EE 1.4, J2SE 1.3 web.xml používá schéma XML
Server 2.3 Srpen 2001 Archivováno 16. května 2008 na Wayback Machine J2EE 1.3, J2SE 1.2 VzhledFilter
Server 2.2 Srpen 1999 Archivováno 11. června 2008 na Wayback Machine J2EE 1.2, J2SE 1.2 Stává se součástí J2EE , nabízí nezávislé webové aplikace v souborech .war
Server 2.1 Listopad 1998 Archivováno 11. června 2008 na Wayback Machine nespecifikováno První oficiální specifikace, přidáno RequestDispatcher.ServletContext
Server 2.0 JDK 1.1 Součást sady Java Servlet Development Kit 2.0
Server 1.0 června 1997

Životní cyklus servletu

Životní cyklus servletu se skládá z následujících kroků:

  1. V případě, že v kontejneru není žádný servlet.
    1. Třída servletu je načtena kontejnerem.
    2. Kontejner vytvoří instanci třídy servletu.
    3. Kontejner volá init(). Tato metoda inicializuje servlet a je volána jako první, než může servlet obsluhovat požadavky. Za celý životní cyklus je metoda init()volána pouze jednou.
  2. Obsluha požadavku klienta. Každý požadavek je zpracován ve vlastním vláknu. Kontejner volá metodu service()pro každý požadavek. Tato metoda určuje typ příchozího požadavku a distribuuje jej do metody odpovídající tomuto typu pro zpracování požadavku. Vývojář servletu musí poskytnout implementaci pro tyto metody. Pokud je přijat požadavek, pro který není implementována metoda, je volána metoda nadřazené třídy a obvykle končí chybou vrácenou žadateli.
  3. V případě, že kontejner potřebuje odstranit servlet, zavolá metodu destroy(), která servlet vyřadí z provozu. Stejně jako init()metoda je i tato metoda volána jednou za celý cyklus servletu.

Příklad

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 ; import javax.servlet.http.HttpSession ; public class NewServlet rozšiřuje HttpServlet { @Override protected void doGet ( HttpServletRequest request , HttpServletResponse response ) vyvolá ServletException , IOException { // Parametr řetězce = požadavek . getParameter ( "parametr" ); // Start HTTP session HttpSession session = request . getSession ( true ); zasedání . setAttribute ( "parametr" , parametr ); odpověď . setContentType ( "text/html;charset=UTF-8" ); PrintWriter out = odpověď . getWriter (); vyzkoušet { vyzkoušet . println ( "<html>" ); ven . println ( "<hlava>" ); ven . println ( "<title>Název</title>" ); ven . println ( "</head>" ); ven . println ( "<tělo>" ); ven . println ( "<h1>Příklad servletu" + parametr + "</h1>" ); ven . println ( "</body>" ); ven . println ( "</html>" ); } konečně { ven . zavřít (); } } @Override public String getServletInfo () { return "Příklad servletu)" ; } }

Viz také

Odkazy