Java Servlets
Java servlet je program napsaný v programovacím jazyce Java, který běží na webovém nebo aplikačním serveru. Tvoří vrstvu mezi HTTP požadavkem od webového klienta a databází nebo aplikací na jiném serveru. Servlety jsou Java protějšek jiných technologií pro tvorbu dynamického webového obsah jako jsou PHP nebo ASP.NET.
Úvod
Základní použití servletů:
- Zpracování dat z HTML formulářů.
- Získávání dat z databáze.
- Řešení bezstavového problému protokolu HTTP.
- Vytváření dynamického obsahu webu.
Java Servlety často slouží ke stejnému účelu jako programy realizované pomocí Common Gateway Interface (CGI). Ale Servlety nabízejí několik výhod ve srovnání s CGI:
- Výkon je výrazně vyšší.
- Servlety se pouští v adresním prostoru webového serveru. Není tedy nutné vytvářet samostatný proces pro zpracování každého požadavku klienta.
- Servlety jsou nezávislé na platformě, protože jsou psány v Javě.
- Plná funkčnost knihoven jazyka Java je servletům k dispozici. Je možné komunikovat s applety, databází nebo jiným virtuálním strojem pomocí RMI.
Technicky vzato je servlet třída z Java EE, která je v souladu se Java Servlet API. To je standard pro implementaci Java tříd, které reagují na HTTP požadavky a najdeme jej v balíčcích javax.servlet a javax.servlet.http. Servlety by v zásadě mohli komunikovat přes libovolný protokol typu klient-server, ale nejčastěji jsou používány s protokolem HTTP. Běžně generovaný dynamický obsah je HTML, ale může se jednat i o jiné jazyky například XML. Servlety mohou udržovat stav relace pomocí HTTP cookies nebo přepisováním URL.
Pro použití servletů je potřeba mít webový server, který se také někdy označuje jako servlet kontejner. Nejčastěji se servlety zabalí do WAR archívu a provede se jejich nasazení (deploy) na server. Mezi webové servery patří například Apache Tomcat. Webový server v sobě obsahují i aplikační servery jako GlassFish, JBoss nebo WebLogic.
Historie verzí
Životní cyklus servletu
Pro životního cyklu servletu jsou zásadní 3 metody. Jsou to metody init(), service() a destroy(). Jsou implementovány každým servletem a jsou vždy volány v určitý okamžik jeho životního cyklu. The following is a typical user scenario of these methods.
- Assume that a user requests to visit a URL.
- The browser then generates an HTTP request for this URL.
- This request is then sent to the appropriate server.
- The HTTP request is received by the web server and forwarded to the servlet container.
- The container maps this request to a particular servlet.
- The servlet is dynamically retrieved and loaded into the address space of the container.
- The container invokes the
init()
method of the servlet.- This method is invoked only when the servlet is first loaded into memory.
- It is possible to pass initialization parameters to the servlet so that it may configure itself.
- The container invokes the
service()
method of the servlet.- This method is called to process the HTTP request.
- The servlet may read data that has been provided in the HTTP request.
- The servlet may also formulate an HTTP response for the client.
- The servlet remains in the container's address space and is available to process any other HTTP requests received from clients.
- The
service()
method is called for each HTTP request.
- The
- The container may, at some point, decide to unload the servlet from its memory.
- The algorithms by which this decision is made are specific to each container.
- The container calls the servlet's
destroy()
method to relinquish any resources such as file handles that are allocated for the servlet; important data may be saved to a persistent store. - The memory allocated for the servlet and its objects can then be garbage collected.
Využití v dnešních aplikacích
Ačkoli je možné pomocí servletů generovat HTML, tak se to kvůli přehlednosti a členení kódu nedělá. Dříve se v MVC návrhu používala pro zobrazovací vrstvu technologie Java Server Pages (JSP), ale dnes spíše převažuje novější technologie Java Server Faces (JSF). Nad samotnými servlety jsou pak vytvořeny frameworky, které se v dnešní době takřka výhradně používají. Jsou jimi Enterpise Java Beans (EJB) nebo třeba také Spring.