B. Cycle de vie d'une servlet
Comme n'importe quelle classe Java, une servlet doit être instanciée pour pouvoir
être utilisée. Généralement lorsque vous avez besoin d'une instance de classe, vous
utilisez l'opérateur new pour la créer. Le problème avec une servlet est que l'on ne
sait pas exactement à quel moment on va en avoir besoin. Ce sont en fait les
clients qui décident lorsqu'une instance de servlet est nécessaire en générant une
requête HTTP pour demander son exécution. Le serveur d'application étant le
mieux placé pour détecter cette demande, c'est donc lui qui est responsable de la
création et de la destruction des instances de servlets. Pour ceci il utilise la
stratégie suivante :
Dès la réception d'une requête HTTP, il détermine si celle-ci concerne une servlet.
Si c'est le cas, il vérifie s'il y a déjà une instance de cette servlet en mémoire, il
appelle alors la méthode service de cette instance de servlet. Si aucune instance
de cette servlet n'est disponible le serveur en crée une puis appelle la méthode
init de cette nouvelle instance. Il peut alors ensuite appeler la méthode
service de la servlet.
Avec cette technique, une même instance de servlet va donc traiter les requêtes
HTTP de très nombreux clients. Lorsque le serveur estime qu'il n'a plus besoin de
cette servlet, il détruit automatiquement l'instance correspondante. Cette situation
se produit en général uniquement lors de l'arrêt du serveur ou lorsqu'une nouvelle
version de la servlet est disponible. Avant la suppression de l'instance d'une servlet
la méthode destroy de celle-ci est exécutée.
1. Déclaration de la servlet
Pour que le serveur puisse instancier la servlet, il doit bien sûr être informé de son
existence. Celle-ci doit donc être déclarée dans le descripteur de déploiement de
l'application. La déclaration suivante est à insérer dans le descripteur de déploie-
ment pour chaque servlet de l'application.
<servlet>
<servlet-name>PremiereServlet</servlet-name>
<servlet-class>fr.eni.ri.PremiereServlet</servlet-class>
</servlet>
Chapitre 3
48 Java Enterprise Edition