Cycle de vie JSP : Phases et diagramme expliqués
⚡ Résumé intelligent
Le cycle de vie JSP décrit comment un conteneur traduit une page en un servlet, la compile, charge la classe, crée une instance, l'initialise, traite chaque requête via la méthode de service générée et la détruit enfin.
Qu'est-ce que le cycle de vie JSP ?
Cycle de vie des JSP On définit une servlet comme la traduction d'une page JSP en une servlet, car une page JSP doit être convertie en servlet avant de pouvoir traiter les requêtes de service. Son cycle de vie commence par la création de la JSP et se termine par la destruction de l'instance de servlet générée à partir de celle-ci.
Étant donné que la classe générée est une servlet ordinaire, tout ce que vous savez déjà sur les servlets s'applique.tracCela reste valable. Java C’est le code écrit par le conteneur qui s’exécute réellement ; le fichier JSP n’est que le code source que vous gérez.
Différentes phases du cycle de vie JSP
Lorsque le navigateur demande une page JSP, le moteur JSP vérifie d'abord s'il doit la compiler. Si la page JSP n'a jamais été compilée, ou si elle a été modifiée depuis la dernière compilation, le moteur JSP la compile.
Le processus de compilation d'une page JSP comprend trois étapes :
- Analyse de JSP
- Transformer JSP en servlet
- Compilation de la servlet
Diagramme du cycle de vie JSP
Le cycle de vie JSP est illustré dans le diagramme ci-dessous, qui tracIl s'agit d'une seule page, du fichier source jusqu'à la classe exécutée par le conteneur.
Les étapes suivantes expliquent le cycle de vie de JSP :
- Traduction de la page JSP
- Compilation de la page JSP (compilation de la page JSP en _jsp.java)
- Chargement des classes (_jsp.java est converti en fichier de classe _jsp.class)
- Instanciation (un objet du servlet généré est créé)
- Initialisation (la méthode jspInit() est invoquée par le conteneur)
- Traitement de la requête (la méthode _jspService() est invoquée par le conteneur)
- Détruire (la méthode jspDestroy() est invoquée par le conteneur)
Explication des phases du cycle de vie JSP
Examinons plus en détail chacun des points ci-dessus.
1) Traduction de la page JSP :
A Java Le fichier servlet est généré à partir d'un fichier source JSP. Il s'agit de la première étape du cycle de vie JSP. Lors de la phase de traduction, le conteneur vérifie la syntaxe correcte de la page JSP et des fichiers de balises.
- Le conteneur JSP interprète les directives et actions standard, ainsi que les actions personnalisées faisant référence aux bibliothèques de balises (elles font toutes partie de la page JSP et sont traitées dans la documentation). Éléments JSP tutoriel) utilisé dans cette page JSP.
- Dans la description illustrée ci-dessus, demo.jsp est traduit en demo_jsp.java lors de la première étape.
Prenons l’exemple du fichier « demo.jsp », comme indiqué ci-dessous :
Démo.jsp
<html>
<head>
<title>Demo JSP</title>
</head>
<%
int demvar=0;%>
<body>
Count is:
<% Out.println(demovar++); %>
<body>
</html>
Remarque concernant l'annonce ci-dessus : Il est reproduit exactement tel que publié afin de correspondre à la capture d'écran du servlet généré ci-dessous. Deux fautes d'orthographe qu'il contient ne compileront pas s'ils sont copiés mot pour mot : la variable est déclarée comme demvar mais imprimé comme demovar, et l'objet de sortie implicite est out en minuscules, pas OutVeuillez corriger les deux avant d'exécuter la page vous-même.
Code Explication du fichier Demo.jsp
Code Ligne 1 : balise d'ouverture HTML
Code Ligne 2 : Étiquette d'en-tête
Code Lignes 3 et 4 : Balise titre (par exemple, Demo JSP) et balise de fermeture <head>
Code Lignes 5 et 6 : Balise scriptlet dans laquelle la variable demo est initialisée
Code Lignes 7 à 8 : Dans la balise body, un texte à imprimer dans la sortie (Nombre : )
Code Ligne 9 : Balise scriptlet où l’on tente d’afficher la variable demovar avec sa valeur incrémentée
Code Lignes 10 et 11 : Balises body et HTML fermées
La page JSP de démonstration est convertie en servlet demo_jsp, comme indiqué dans le code ci-dessous.
Code Explication du fichier Demo_jsp.java
Code Ligne 1 : La classe Servlet demo_jsp étend la classe parente HttpServlet
Code Lignes 2 et 3 : Surcharge de la méthode de service JSP, c’est-à-dire _jspService, qui prend comme paramètres les objets HttpServletRequest et HttpServletResponse
Code Ligne 4 : Méthode d'ouverture
Code Ligne 5 : Appel de la méthode getWriter() de l'objet de réponse pour obtenir un PrintWriter objet (imprime une représentation formatée des objets dans un flux de sortie texte)
Code Ligne 6 : Appel de la méthode setContentType de l’objet de réponse pour définir le type de contenu
Code Ligne 7 : Utilisation de la méthode write() de l’impressionWriter objet pour analyser le HTML
Code Ligne 8 : Initialisation de la variable demovar à 0
Code Ligne 9 : Appel de la méthode write() de l’impressionWriter objet pour analyser le texte
Code Ligne 10 : Appel de la méthode print() de l’imprimanteWriter L'objet est d'incrémenter la variable demovar de 0 + 1 = 1. Par conséquent, la sortie sera 1.
Code Ligne 11 : Utilisation de la méthode write() de l’impressionWriter objet pour analyser le HTML
Sortie :
Le navigateur affiche ensuite le compteur, comme le montre la capture d'écran ci-dessous.
- Ici, vous pouvez voir que sur la capture d'écran, la sortie est 1, car la variable demvar est initialisée à 0 puis incrémentée à 0 + 1 = 1
Dans l'exemple ci-dessus,
- Le fichier demo.jsp est une page JSP dans laquelle une variable est initialisée et incrémentée. Cette page JSP est ensuite convertie en servlet (demo_jsp.class), où le moteur JSP charge la page JSP et la convertit en contenu servlet.
- Lors de la conversion, tout le texte du modèle est converti en instructions println() et tous les éléments JSP sont convertis en Java code.
C'est ainsi qu'une simple page JSP est traduite en une classe de servlet.
2) Compilation de la page JSP
- Le généré Java Le fichier servlet est compilé en un Java classe de servlet
- La traduction de Java La conversion de la page source en sa classe d'implémentation peut se produire à tout moment entre le déploiement de la page JSP dans le conteneur et le traitement de la page JSP.
- Dans la description illustrée ci-dessus, demo_jsp.java est compilé en un fichier de classe demo_jsp.class
- Sur Apache Tomcat, les deux artefacts sont écrits dans le répertoire de travail du serveur, dans
work/Catalina/localhost/<app>/org/apache/jsp, qui est le premier endroit à consulter lorsqu'il faut diagnostiquer une erreur de traduction
3) Chargement de classe
- La classe de servlet générée à partir du code source JSP est maintenant chargée dans le conteneur.
4) Instanciation
- Dans cette étape, l'objet, c'est-à-dire l'instance de la classe, est généré.
- Le conteneur gère une ou plusieurs instances de cette classe en réponse aux requêtes et autres événements. Généralement, un conteneur JSP est construit à l'aide d'un conteneur de servlets. Un conteneur JSP est une extension d'un conteneur de servlets, car les deux prennent en charge JSP et les servlets.
- L'interface JspPage, fournie par le conteneur, déclare les méthodes jspInit() et jspDestroy().
- L'interface HttpJspPage gère les requêtes HTTP et contient la méthode de service correspondante. Sa signature dépend du protocole ; c'est pourquoi le conteneur la génère automatiquement au lieu de demander à l'auteur de la page de la déclarer.
5) Initialisation
public void jspInit() { //initializing the code }
- La méthode jspInit() initialise l'instance de servlet générée à partir du JSP et est invoquée par le conteneur dans cette phase.
- Une fois l'instance créée, la méthode d'initialisation est immédiatement appelée.
- Elle n'est appelée qu'une seule fois au cours du cycle de vie d'une JSP, et la méthode d'initialisation est déclarée comme indiqué ci-dessus.
6) Traitement des demandes
void _jspservice(HttpServletRequest request HttpServletResponse response) { //handling all request and responses }
- La méthode _jspService() est invoquée par le conteneur pour toutes les requêtes émises par la page JSP au cours de son cycle de vie.
- Pour cette phase, la page doit passer par toutes les phases précédentes, et ce n'est qu'ensuite que la méthode de service peut être invoquée.
- Il transmet les objets de requête et de réponse
- Cette méthode ne peut pas être surchargée, car le conteneur l'écrit lors de la traduction.
- La méthode est présentée ci-dessus. Elle gère toutes les méthodes HTTP, c'est-à-dire GET, POST, etc.
7) Détruire
public void _jspdestroy() { //all clean up code }
- La méthode jspDestroy() est également appelée par le conteneur
- Cette méthode est appelée lorsque le conteneur décide qu'il n'a plus besoin de l'instance de servlet pour traiter les requêtes.
- Une fois l'appel à la méthode destroy effectué, la servlet est prête pour le ramasse-miettes.
- C'est la fin du cycle de vie.
- Nous pouvons redéfinir la fonction jspDestroy() lors de toute opération de nettoyage, comme la libération des connexions à la base de données ou la fermeture des fichiers ouverts.
Une précision importante à retenir concernant la dénomination : à partir de Jakarta EE 9, ces types vivent dans le jakarta.servlet.jsp paquet plutôt que javax.servlet.jspLes importations plus anciennes doivent donc être mises à jour lorsqu'une application est déplacée vers un serveur actuel.




