Le conteneur Web
Nous avons vu au chapitre précédent que les servlets sont des composants Web qui permettent de répondre à des requêtes utilisateurs. Ces servlets sont packagées dans une application Web qui est elle-même déployée dans un serveur d'application Java EE. Cependant, nous n'avons pas eu à écrire de lignes de code telles que :
MaServlet servlet = new MaServlet();
C'est-à-dire que nous n'avons pas eu à instancier nos servlets et pourtant, elles ont bien été créées et utilisées pour générer les réponses dynamiques.
Un serveur Java EE fournit un conteneur Web (parfois appelé conteneur de servlets). Un conteneur a la charge d'instancier, d'initialiser et de détruire les servlets d'une application. C'est également le conteneur qui fournit une instance de HttpServletRequest et de HttpServletResponse pour chaque requête.
Nous allons voir en détail la gestion du cycle de vie des servlets par le conteneur Web et les conséquences que cela a sur la façon de développer une application Web.
Cycle de vie des servlets
Le conteneur Web gère le cycle de vie des servlets : la création, l'initialisation et la destruction. À chacune de ces étapes, une instance de servlet est informée par un appel à une méthode déclarée dans l'interface Servlet et qui peut être surchargée pour chaque servlet.
public void init(ServletConfig config) throws ServletException {
// appelée au moment de l'initialisation de la servlet
}
public void destroy() {
// appelée avant la suppression de la servlet du conteneur
}
De plus la servlet sera prévenue de sa création par un appel à son constructeur. Cela a une conséquence importante pour l'implémentation d'une servlet : une servlet doit obligatoirement avoir un constructeur sans paramètre.
Lors de l'appel à la méthode init(ServletConfig)
, le conteneur passe en paramètre
une instance de ServletConfig
qui permet, entre-autres, à la servlet de récupérer des paramètres d'initialisation. Notez que la méthode init(ServletConfig)
autorise l'implémentation à jeter une ServletException
. Si cela se produit, le conteneur considère que la servlet n'a
pas pu s'initialiser correctement et elle ne sera pas déployée dans le conteneur : elle ne sera donc pas accessible !