1. Commençons par le conteneur servlet: le conteneur servlet que tout le monde connaît le plus est Tomcat. Comment servlet Container gère-t-il les servlets?
Jetons un coup d'œil au modèle de conteneur de Tomcat d'abord:
D'après la figure ci-dessus, nous pouvons voir que le conteneur de Tomcat est divisé en quatre niveaux. Le conteneur qui gère vraiment les servlets est le conteneur de contexte, et un contexte correspond à un projet Web
Au niveau du conteneur de Tomcat, le conteneur de contexte est un conteneur qui gère directement l'emballage de classe de wrapper (standardwrapper) du servlet dans le conteneur, de sorte que la façon dont le conteneur de conteneur affectera directement le fonctionnement du servlet.
Ici, je vais expliquer la classe d'emballage du servlet: StandardWrapper. Il y a une question ici, pourquoi le servlet devrait-il être enveloppé dans StandardWrapper au lieu d'être un objet de servlet directement. Étant donné que StandardWrapper fait partie du conteneur Tomcat, il a les caractéristiques du conteneur, et le servlet est une norme de développement Web indépendante et ne doit pas être fortement couplé dans Tomcat.
À l'exception de l'emballage du servlet dans StandardWrapper et de l'ajout au contexte en tant que sous-container, toutes les autres propriétés web.xml sont analysées dans le contexte, donc le conteneur de contexte est le conteneur servlet qui exécute vraiment le servlet. Une application Web correspond à un conteneur de contexte. Les propriétés de configuration du conteneur sont spécifiées par le web.xml de l'application, afin que nous puissions comprendre quel rôle Web.xml joue.
2. Ce qui suit décrit brièvement le projet de travail de Servlet:
Lorsqu'un serveur Web interagit avec le client, le processus de travail du servlet est:
1. Faites une demande au serveur Web sur le client
2. Le serveur Web l'envoie au servlet après avoir reçu la demande
3. Le conteneur servlet génère un objet d'instance pour cela et appelle la méthode correspondante de l'API Servlet pour traiter la demande HTTP client, puis renvoie le résultat de la réponse traité au serveur Web.
4. Le serveur Web renvoie la structure de réponse reçue de l'objet d'instance Servlet au client.
3. Le cycle de vie du servlet:
Comme le montre la figure ci-dessus, le cycle de vie d'un servlet peut être divisé en quatre étapes, à savoir la classe de chargement et l'étape de création, l'étape d'initialisation, l'étape de service et l'étape de destruction de l'instance. Ce qui suit est une description détaillée des tâches de programmation et des précautions pour chaque étape.
1. Créez une instance de servlet:
Par défaut, les instances de servlet sont créées lorsque la première demande arrive et est réutilisée plus tard. Si certains servlets nécessitent des opérations complexes qui doivent être terminées lors du chargement de l'initialisation, telles que l'ouverture des fichiers, l'initialisation des connexions réseau, etc., vous pouvez informer le serveur pour créer une instance du servlet au démarrage. La configuration spécifique est la suivante:
<VerTlet> <Servlet-Name> Timeserservlet </vrlett-name> <servlet-class> com.allanlxf.servlet.basic.timeservlet </vrlett-class> <charge-on-startup> 1 </ load-on-startup> </ serplet>
Créez la structure de classe pertinente de l'objet servlet:
2. Initialisation
Une fois l'instance de servlet créée, le serveur Web appellera automatiquement la méthode init (servletconfig config) pour initialiser le servlet. La configuration du paramètre de méthode contient les informations de configuration du servlet, telles que le paramètre d'initialisation, qui est créé par le serveur.
I. Comment configurer les paramètres d'initialisation du servlet?
Dans la balise de définition du servlet dans web.xml, par exemple:
<Serplet> <Serplet-Name> Timeserservlet </vrlett-name> <servlet-class> com.allanlxf.servlet.basic.timeservlet </vrlet-Class> <Init-Param> <Par AM-NAME> User </ Param-Name> <Amam-Value> Username </ Param-Value> </Init-Param> <Init-Param> <AmArt-Name> Blog </onsam-Name> <AmAram-Value> http: //. . . </ param-Value> </itnit-Param> </Servlet>
Les deux paramètres d'initialisation L'utilisateur et le blog sont configurés avec les valeurs du nom d'utilisateur et http: //. . . , de cette manière, afin de modifier le nom d'utilisateur et l'adresse du blog à l'avenir, vous n'avez pas besoin de modifier le code de servlet, il suffit de modifier le fichier de configuration.
Ii Comment lire les paramètres d'initialisation d'un servlet?
ServletConfig définit la méthode suivante pour lire les informations des paramètres d'initialisation:
String public getInitParameter (nom de chaîne)
Paramètre: le nom du paramètre d'initialisation.
Renvoie: la valeur du paramètre d'initialisation, si elle n'est pas configurée, renvoie NULL.
Nombre de temps d'exécution de la méthode III.Init (ServletConfig)
Cette méthode est exécutée une fois pendant le cycle de vie d'un servlet.
Méthode et thread iv.init (servletconfig)
Cette méthode est exécutée dans un seul environnement fileté, les développeurs n'ont donc pas besoin de prendre en compte les problèmes de sécurité des threads.
V.Init (ServletConfig) Méthode et exception
Pendant l'exécution, cette méthode peut lancer un servletException pour informer le serveur Web que l'instance Servlet n'a pas réussi à initialiser. Une fois le servletException lancé, le serveur Web ne remettra pas la demande du client à l'instance Servlet pour le traitement, mais rapportera les informations d'exception de défaillance d'initialisation au client, qui seront détruites de la mémoire. Si une nouvelle demande est faite, le serveur Web créera une nouvelle instance de servlet et effectuera l'opération d'initialisation de la nouvelle instance.
3. Service
Une fois l'instance de servlet créée et initialisée avec succès, l'instance de servlet peut être utilisée par le serveur pour servir la demande du client et générer une réponse. Pendant l'étape de service, le serveur Web appellera la méthode de l'instance Service (ServLetRequest Request, ServletResponse Response). L'objet de demande et l'objet de réponse sont créés par le serveur et transmis à l'instance servlet. L'objet de demande résume les informations envoyées par le client au serveur et l'objet de réponse résume les informations envoyées par le serveur au client.
I. Responsabilités de la méthode Service ()
La méthode Service () est la méthode principale du servlet. La logique métier du client doit être exécutée dans cette méthode. Le processus de développement d'une méthode de service typique est:
Analyser la demande du client-> Exécuter la logique métier -> Page de réponse de sortie au client
II.Service () Méthode et thread
Afin d'améliorer l'efficacité, la spécification du servlet nécessite qu'une instance de servlet soit en mesure de répondre à plusieurs demandes du client en même temps. C'est-à-dire que la méthode Service () fonctionne dans un environnement multithread, et les développeurs de servlet doivent assurer la sécurité du fil de la méthode.
Méthode et exception III.Service ()
La méthode Service () peut lancer ServletException et ioException pendant l'exécution. Parmi eux, ServletException peut être lancé pendant le processus de traitement des demandes des clients, tels que la ressource demandée n'est pas disponible, la base de données n'est pas disponible, etc. Une fois l'exception lancée, le conteneur doit recycler l'objet de demande et signaler les informations d'exception du client. IOException indique une erreur d'entrée et de sortie. Le programmeur n'a pas à se soucier de l'exception et le signale directement au client par le conteneur.
Programmation Précautions:
1) Lorsque le thread de serveur exécute la méthode init () de l'instance servlet, tous les threads de service client ne peuvent pas exécuter la méthode Service () de l'instance, et aucun thread ne peut exécuter la méthode destrust () de l'instance. Par conséquent, la méthode init () du servlet fonctionne dans un seul environnement de thread, et les développeurs n'ont pas à prendre en compte des problèmes de sécurité du fil.
2) Lorsque le serveur reçoit plusieurs demandes du client, le serveur exécutera la méthode Service () de l'instance Servlet dans un thread de service client séparé pour servir chaque client. À l'heure actuelle, plusieurs threads exécuteront la méthode Service () de la même instance de servlet en même temps, de sorte que les problèmes de sécurité du thread doivent être pris en compte.
3) Veuillez noter que bien que la méthode Service () s'exécute dans un environnement multithread, il n'est pas nécessaire de synchroniser la méthode. Au lieu de cela, cela dépend du type de ressource accessible par cette méthode pendant l'exécution et de la façon dont il accède aux ressources. L'analyse est la suivante:
je. Si la méthode Service () n'accède pas aux variables des membres du servlet ou aux ressources globales telles que les variables statiques, les fichiers, les connexions de base de données, etc., il utilise uniquement les ressources actuelles du thread actuel, telles que les variables temporaires, les demandes et les objets de réponse qui ne pointent pas vers les ressources globales. Cette méthode elle-même est en file et ne nécessite aucun contrôle de synchronisation.
ii Si la méthode Service () accède à la variable membre du servlet, mais que l'opération sur la variable est une opération en lecture seule, la méthode elle-même est file et ne nécessite aucun contrôle de synchronisation.
iii. Si la méthode Service () accède à la variable membre du servlet et que le fonctionnement de la variable est lu et écrit, une instruction de contrôle de synchronisation est généralement requise.
iv. Si la méthode Service () accède à une variable statique globale, s'il peut y avoir d'autres threads dans le système accédant à la variable statique en même temps, s'il y a à la fois des opérations de lecture et d'écriture, une instruction de contrôle de synchronisation est généralement requise.
V
4. Destruction
Lorsque le serveur Web pense que l'instance de servlet n'est pas nécessaire, comme le rechargement de l'application ou l'arrêt du serveur, et le servlet n'a pas été accessible depuis longtemps. Le serveur peut détruire (également appelé désinstaller) l'instance de la mémoire. Le serveur Web doit s'assurer que la méthode de destruction () de l'instance servlet est appelée avant de désinstaller l'instance de servlet, afin de recycler les ressources demandées par le servlet ou d'effectuer d'autres traitements importants.
Le serveur Web doit s'assurer qu'avant d'appeler la méthode Destren (), tous les threads s'exécutant dans la méthode Service () de la sortie de l'instance ou attendez ces threads pendant un certain temps. Une fois la méthode de destruction () exécutée, le serveur Web rejetera toutes les nouvelles demandes pour l'instance de servlet. La méthode destruction () sort et l'instance de servlet peut être collectée à la poubelle.
4. Organigramme de la demande HTTP du client d'analyse du servlet:
1. Le client Web émet une demande HTTP au conteneur servlet;
2. Le conteneur servlet analyse la demande Web HTTP.
3. Le conteneur servlet crée un objet HttpRequest, encapsulant les informations de demande HTTP dans cet objet;
4. Le conteneur servlet crée un objet HttpResponse;
5. Conteneur de servlet (si le servlet accessible n'est pas créé au démarrage du serveur, créez d'abord une instance de servlet et appelez la méthode init () pour initialiser l'objet) appelez la méthode Service () du httpservlet, et transmettez les paramètres de l'objet httprequest et HTTPResponse comme méthodes de service à l'objet HTTPRequest et HTTPResponse comme des méthodes de service à l'objet HTTPRequest et HttpResponse;
6. HttpServlet appelle les méthodes pertinentes de HttpRequest pour obtenir des informations de demande HTTP;
7. HttpServlet appelle les méthodes pertinentes de HttpResponse de générer des données de réponse;
8. Le conteneur servlet passe le résultat de la réponse HTTPServlet au client Web.
L'article ci-dessus est basé sur le principe d'exécution de Servlet et le cycle de vie (analyse complète) est tout le contenu que je partage avec vous. J'espère que cela pourra vous donner une référence et j'espère que vous pourrez soutenir Wulin.com plus.