Servlet

Un **servlet** es un classe Java que permitte de crear dynamicamente datos intra un servitor HTTP. Iste datos es le plus generalmente presentate in le formato HTML, sed illos pote anque esser in le formato XML o un altere formato destinate al navigator web. Servlets usa le API **Java Servlet** (pacchetto `javax.servlet`).

Le nomine "servlet" deriva del *applet*. Le applets Java es parve programmas scribite in le linguage Java, executante intra le navigator web del cliente.

Un servlet se executa dynamicamente super le servitor web e permitte le extension del functiones de iste ultime, typicamente: accesso a bases de datos, transactiones de commercio electronic (*e-commerce*), etc. Un servlet pote esser automaticamente cargate durante le initio del servitor web o durante le prime requesta del cliente. Post esser cargate, le servlets resta active in le expectation a altere requestas del cliente.

Le API defini le relationes inter un container de servlets e le servlet. Le container recipe le requesta del cliente e selectiona le servlet que debera tractar lo. Le container provide anque tote un insimul de servicios standard pro simplificar le gestion del requestas e del sessiones.

## Cyclo de vita

;1. Initialisar le servlet
Quando un servitor carga un servlet, illo executa le methodo `init` del servlet. Le processo de initialisation debe completar se ante poter manear requestas del clientes, e ante que le servlet sia destruite.

Ben que multe servlets se executa in servitores multifile, le servlets non ha problemas de concurrentia durante su initialisation. Le servitor appella solmente un vice le methodo `init` al creation le instantia del servlet, e illo non lo appellara ancora si illo non retorna a recargar le servlet. Le servitor non pote recargar un servlet sin primemente haber destruite le servlet per le medio de appellar le methodo `destroy`.

;2. Interager con le clientes
Post le initialisation, le servlet pote dar servicio al requestas del clientes. Iste requestas essera attendite per le mesme instantia del servlet. Dunque il es necessari de acceder a variabiles compartite, a causa que illos poterea dar problemas de synchronisation inter requirimentos simultanee.

;3. Destruer le servlet
Le servlets se executa a fin que le servitor lo destrue, per clausura del servitor o per requesta del administrator del systema. Quando un servitor destrue un servlet, illo executa le methodo `destroy` del proprie servlet. Iste methodo solmente se executa un vice e pote esser appellate quando responsas es ancora in tractamento, dunque il es necessari expectar lo. Le servitor non executara le servlet ante haber cargate e initialisate lo ancora.

## Containers de servlets
Il existe plure containers de servlets, inter alteres Apache Tomcat e Jetty. Le servitor JBoss Application Server usa Apache Tomcat e le servitores Oracle WebLogic, IBM WebSphere e Apache Geronimo pote usar Apache Tomcat o Jetty. Sun (nunc Oracle) etiam provide le servitor Glassfish totalmente scribite in Java.

## Exemplo de servlet classic


```java
import javax.servlet.*;
import java.io.*;

public class HelloServlet extends GenericServlet
{
	public void service(HttpServletRequest request, HttpServletResponse response)
	{
		try
		{
			PrintWriter out = response.getWriter();
			out.println("<!DOCTYPE html PUBLIC \"-//W3C//DTD HTML 4.01//EN\">");
			out.println("<title>Hallo, tote le mundo!</title>");
			out.println("<p>Hello world!</p>");
		}
		catch (IOException e)
		{
			e.printStackTrace();
		}
	}
}
```


Rendimento generate post displicamento: 

```html4strict
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<title>Hallo, tote le mundo!</title>
<p>Hello world!</p>
```


## Historia
Le specification original de servlets ha essite create per Sun Microsystems. Comenciante con le version 2.3, le specification ha essite disveloppate secundo le Processo del Communitate Java (*Java Community Process*).

## Ligamines externe
*  Java Servlet Technology Sito official
*  JSR-000053 Java Servlet 2.3 and JavaServer Pages 1.2 Specifications
*  JSR-000154 Java Servlet 2.4 Specification
*  JSR-000315 Java Servlet 3.0 Specification
*  Tutoriel: Les Servlets per Julien Gilli
*  Les bases du développement web MVC en Java
*  Apache Tomcat