Comment le conteneur de servlets gère-t-il le cycle de vie du servlet ? Quelles méthodes sont appelées et à quels moments ?
sobes.tech IA
Réponse de l'IA
Le conteneur gère le cycle de vie du servlet à travers un ensemble de méthodes : init, service, destroy.
-
Chargement de la classe du servlet : Lorsque le conteneur reçoit la première requête vers le servlet ou lors du démarrage de l'application (si configuré).
-
Création d'une instance du servlet : Le conteneur crée une seule instance de la classe du servlet pour toute l'application.
-
Appel à
init(): Le conteneur appelle la méthodeinit(ServletConfig config)une seule fois après la création de l'instance. Dans cette méthode, l'initialisation peut être effectuée, des ressources chargées et la configuration du servlet obtenue. La méthode ne doit pas être rappelée tant que le servlet n'est pas détruit et recréé.// java public void init(ServletConfig config) throws ServletException { // Initialisation du servlet this.config = config; // Récupération des paramètres d'initialisation String param = config.getInitParameter("someParam"); } -
Appel à
service(): Pour chaque requête entrante, le conteneur appelle la méthodeservice(ServletRequest request, ServletResponse response). Cette méthode traite la requête et génère la réponse. Elle délègue généralement le traitement à des méthodes HTTP spécifiques (doGet,doPost, etc.) dans les sous-classes deHttpServlet. La méthodeserviceest multithread, le conteneur peut l'appeler simultanément pour plusieurs requêtes.// java public void service(ServletRequest request, ServletResponse response) throws ServletException, IOException { // Vérification du type de requête et appel de la méthode appropriée if (request instanceof HttpServletRequest && response instanceof HttpServletResponse) { // Délégation à HttpServlet super.service(request, response); } else { // Traitement d'autres types de requêtes throw new ServletException("Seules les requêtes HTTP sont supportées"); } } // Exemple de méthode doXXX dans HttpServlet protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Traitement de la requête GET response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<h1>Bonjour</h1>"); } -
Appel à
destroy(): Le conteneur appelle la méthodedestroy()une seule fois avant de détruire l'instance du servlet. Cela se produit lors de l'arrêt de l'application ou lors de la suppression du servlet du conteneur. Dans cette méthode, les ressources sont libérées (par exemple, fermeture des connexions à la base de données ou fichiers). Après l'appel àdestroy, le conteneur peut effectuer la collecte de garbage pour l'instance du servlet.// java public void destroy() { // Libération des ressources // Par exemple, fermeture des connexions }
Le cycle de vie peut être représenté sous forme de tableau :
| Méthode | Appelée | Objectif |
|---|---|---|
init() |
Une fois après la création de l'instance du servlet | Initialisation, chargement des ressources |
service() |
Pour chaque requête entrante | Traitement de la requête, génération de la réponse |
destroy() |
Une fois avant la destruction de l'instance du servlet | Libération des ressources, fin du travail |
Le conteneur garantit que init sera appelé avant service, et que destroy sera appelé après le dernier appel à service. Les méthodes service peuvent être appelées en parallèle.