Outils pour utilisateurs

Outils du site


developpement:java:servlets

Différences

Ci-dessous, les différences entre deux révisions de la page.

Lien vers cette vue comparative

Prochaine révision
Révision précédente
developpement:java:servlets [2015/08/01 01:42] – modification externe 127.0.0.1developpement:java:servlets [2023/10/03 23:14] (Version actuelle) sgariepy
Ligne 1: Ligne 1:
 ====== Servlets ====== ====== Servlets ======
  
-Pour développer des applications web, la technologie java fournit deux types de composants : les servlets et les pages [[prog:java:jsp|JSP]].  Le composant fondamental est le servlet parce que une page JSP est prise par le conteneur web et sera compilée pour donner un servlet.+Pour développer des applications web, la technologie java fournit deux types de composants : les servlets et les pages [[developpement:java:jsp|JSP]].  Le composant fondamental est le servlet parce que une page JSP est prise par le conteneur web et sera compilée pour donner un servlet.
  
-Une servlet est un programme [[prog:java:toc|Java]] s'exécutant au sein d'un serveur et répondant à des requêtes de clients.  La servlet est déployée dans un conteneur.  Le conteneur fournit un environnement d'exécution à la servlet et gère son cycle de vie.  Dans pratiquement tous les cas, on est dans le contexte du réseau Internet ou d'un réseau intranet et les requêtes des clients sont des requêtes HTTP.  Le conteneur est alors un conteneur web et la servlet fait partie d'une application web.  << Conteneur web >> est la nouvelle appellation de << moteur de servlet >>.+Une servlet est un programme [[developpement:java:introduction|Java]] s'exécutant au sein d'un serveur et répondant à des requêtes de clients.  La servlet est déployée dans un conteneur.  Le conteneur fournit un environnement d'exécution à la servlet et gère son cycle de vie.  Dans pratiquement tous les cas, on est dans le contexte du réseau Internet ou d'un réseau intranet et les requêtes des clients sont des requêtes HTTP.  Le conteneur est alors un conteneur web et la servlet fait partie d'une application web.  << Conteneur web >> est la nouvelle appellation de << moteur de servlet >>.
  
 Le conteneur web doit respecter les spécifications des servlets((Les spécifications des servlets sont publiées sur le site de Sun Microsystems consacré à Java : http://java.sun.com/products/servlet/)).  On ne déploie pas de servlet, on déploie une application web et la plus simple des application web est composé d'une servlet.  La servlet fait forcément partie d'une application web et l'application web fait partie d'un conteneur.  Un conteneur web est une application réseau qui respecte les spécifications de la norme JEE et ce processus est standardisé, c'est-à-dire que si votre servlet et application web fonctionne sur un conteneur web, ce dernier fonctionnera sur tous les autres conteneurs web. Le conteneur web doit respecter les spécifications des servlets((Les spécifications des servlets sont publiées sur le site de Sun Microsystems consacré à Java : http://java.sun.com/products/servlet/)).  On ne déploie pas de servlet, on déploie une application web et la plus simple des application web est composé d'une servlet.  La servlet fait forcément partie d'une application web et l'application web fait partie d'un conteneur.  Un conteneur web est une application réseau qui respecte les spécifications de la norme JEE et ce processus est standardisé, c'est-à-dire que si votre servlet et application web fonctionne sur un conteneur web, ce dernier fonctionnera sur tous les autres conteneurs web.
  
-Une application web est un ensemble de composants de deux types.  Il peut y avoir plusieurs servlet et plusieurs pages [[prog:java:jsp|JSP]] dans une application, ainsi qu'un [[#descripteur_de_deploiement|fichier de configuration]] et ces composants sont déployés dans un conteneur web.  Le conteneur fourni un environnement d'exécution, c'est-à-dire essentiellement une machine virtuelle et il gère aussi le cycle de vie de l'application.+Une application web est un ensemble de composants de deux types.  Il peut y avoir plusieurs servlet et plusieurs pages [[developpement:java:jsp|JSP]] dans une application, ainsi qu'un [[#descripteur_de_deploiement|fichier de configuration]] et ces composants sont déployés dans un conteneur web.  Le conteneur fourni un environnement d'exécution, c'est-à-dire essentiellement une machine virtuelle et il gère aussi le cycle de vie de l'application.
  
-{{  :prog:java:3tiers_conteneurweb.jpeg  |}}+{{  :developpement:java:3tiers_conteneurweb.jpeg  |}}
  
 Afin que le conteneur puisse gérer correctement le fonctionnement et le cycle de vie d'une servlet, il faut que celle-ci respecte un certain nombre de règles.  Le contrat entre le conteneur web et tes servlets se présente sous forme de l'interface ''Servlet'' du package ''javax.servlet'' : toute servlet doit être instance d'une classe qui implémente cette interface. Afin que le conteneur puisse gérer correctement le fonctionnement et le cycle de vie d'une servlet, il faut que celle-ci respecte un certain nombre de règles.  Le contrat entre le conteneur web et tes servlets se présente sous forme de l'interface ''Servlet'' du package ''javax.servlet'' : toute servlet doit être instance d'une classe qui implémente cette interface.
Ligne 15: Ligne 15:
 L'interface Servlet contient les cinq méthodes décrites dans te tableau 1.  On y trouve, en particulier, une méthode d'initialisation de la servlet, une méthode pour fournir un service aux clients et une méthode de libération de ressources lors de la destruction de la servlet L'interface Servlet contient les cinq méthodes décrites dans te tableau 1.  On y trouve, en particulier, une méthode d'initialisation de la servlet, une méthode pour fournir un service aux clients et une méthode de libération de ressources lors de la destruction de la servlet
  
-  +===== Conteneur web =====
  
-===== Conteneur web ===== 
 Le conteneur web, ou conteneur de servlet, ou moteur de servlet.  Le plus populaire est Tomcat d'Apache ([[web:tomcat:installation|installation sur Mac OS X]]), mais beaucoup d'autres existent comme Jetty, JBoss, BEA WebLogic Server, etc. Le conteneur web, ou conteneur de servlet, ou moteur de servlet.  Le plus populaire est Tomcat d'Apache ([[web:tomcat:installation|installation sur Mac OS X]]), mais beaucoup d'autres existent comme Jetty, JBoss, BEA WebLogic Server, etc.
  
-====== Implémetation d'une servlet ====== +====== Implémentation d'une servlet ======
  
 Afin que le conteneur puisse gérer correctement le fonctionnement et le cycle de vie d'une servlet, il faut qu'il applique un certain nombre de règles, donc qu'il y ait un contrat entre le conteneur et la servlet.  Ce contrat se présente comme une interface du package ''javax.Servlet'', qui est ''Servlet'' Donc, tous les servlet doivent implémenter cet interface. Afin que le conteneur puisse gérer correctement le fonctionnement et le cycle de vie d'une servlet, il faut qu'il applique un certain nombre de règles, donc qu'il y ait un contrat entre le conteneur et la servlet.  Ce contrat se présente comme une interface du package ''javax.Servlet'', qui est ''Servlet'' Donc, tous les servlet doivent implémenter cet interface.
Ligne 30: Ligne 28:
  
 Il y a aussi les méthodes ''getServletConfig()'' et ''getServletInfo()'' La méthode principale est ''service(ServletRequest request, ServletResponse response)''. Il y a aussi les méthodes ''getServletConfig()'' et ''getServletInfo()'' La méthode principale est ''service(ServletRequest request, ServletResponse response)''.
- 
  
 ===== Méthode service() ===== ===== Méthode service() =====
Ligne 48: Ligne 45:
  
  
-{{  :prog:java:javax_servlet.jpeg  |}}+{{  :developpement:java:javax_servlet.jpeg  |}}
  
 En [[web:tomcat:installation|installant Tomcat]], on peut trouver les classes nécessaires à la compilation.  En conséquence, on peut exporter le ''CLASSPATH'' pour que les classes Java puissent être compilées de partout : En [[web:tomcat:installation|installant Tomcat]], on peut trouver les classes nécessaires à la compilation.  En conséquence, on peut exporter le ''CLASSPATH'' pour que les classes Java puissent être compilées de partout :
Ligne 104: Ligne 101:
 </code> </code>
  
-Remarquons que la méthode ''doGet()'' reçoit un paramètre de type ''HttpServletRequest'' qui représente la requête HTTP qui a invoquée la servlet et un paramètre de type ''HttpServletResponse'' qui représente la réponse de la servlet.  Dans l'exemple de la servlet ''TestServlet'', la méthode ''doGet()'' utilise la méthode ''getWriter()'' de ce deuxième paramètre pour obtenir un flux de sortie de type ''PrintWriter'' Ce flux est dirigé vers le client et permet de lui envoyer des réponses textuelles (au format [[web:html|HTML]] ou [[prog:general:xml|XML]]).+Remarquons que la méthode ''doGet()'' reçoit un paramètre de type ''HttpServletRequest'' qui représente la requête HTTP qui a invoquée la servlet et un paramètre de type ''HttpServletResponse'' qui représente la réponse de la servlet.  Dans l'exemple de la servlet ''TestServlet'', la méthode ''doGet()'' utilise la méthode ''getWriter()'' de ce deuxième paramètre pour obtenir un flux de sortie de type ''PrintWriter'' Ce flux est dirigé vers le client et permet de lui envoyer des réponses textuelles (au format [[web:html5:toc|HTML]] ou [[developpement:general:xml|XML]]).
  
 {{:web:tomcat:testservlet.jpg|Figure 2. La servlet TestServlet envoie un message de bienvenue à l'utilisateur.}} {{:web:tomcat:testservlet.jpg|Figure 2. La servlet TestServlet envoie un message de bienvenue à l'utilisateur.}}
Ligne 123: Ligne 120:
 </html> </html>
 </code> </code>
-{{:prog:java:test_bienvenue.jpg|figure 3. Formulaire HTML où le client peut saisir son nom.}}+ 
 +{{:developpement:java:test_bienvenue.jpg|figure 3. Formulaire HTML où le client peut saisir son nom.}}
  
 En cliquant sur le bouton **OK**, les données du formulaire sont envoyées à la servlet ''TestServlet'' Cette dernière va pouvoir récupérer le nom contenu dans le champ ''name'' Elle va pour cela utiliser la méthode ''getParameter()'' de l'argument ''request'' de la méthode ''doGet()'' Ce paramètre représente la requête du client et encapsule toutes les informations sur cette requête : En cliquant sur le bouton **OK**, les données du formulaire sont envoyées à la servlet ''TestServlet'' Cette dernière va pouvoir récupérer le nom contenu dans le champ ''name'' Elle va pour cela utiliser la méthode ''getParameter()'' de l'argument ''request'' de la méthode ''doGet()'' Ce paramètre représente la requête du client et encapsule toutes les informations sur cette requête :
Ligne 203: Ligne 201:
 ===== Descripteur de déploiement ===== ===== Descripteur de déploiement =====
  
-Les descripteurs de déploiement font partie intégrante des applications web J2EE.  Ils permettent de gérer la configuration des applications web après leur déploiement.  Pour les conteneurs web, un descripteur de déploiement est un fichier [[prog:general:xml|XML]] de nom ''web.xml'' stocké dans le dossier ''WEB-INF'', sous-dossier du dossier principal de l'application.+Les descripteurs de déploiement font partie intégrante des applications web J2EE.  Ils permettent de gérer la configuration des applications web après leur déploiement.  Pour les conteneurs web, un descripteur de déploiement est un fichier [[developpement:general:xml|XML]] de nom ''web.xml'' stocké dans le dossier ''WEB-INF'', sous-dossier du dossier principal de l'application.
  
 La DTD (//Document Type Definition//) pour le descripteur de déploiement est fournie par la spécification des servlets((Par exemple, pour la version 2.3 des spécifications des servlets, la DTD se trouve à: http://java.sun.com/dtd/web-app_2_3.dtd)). La DTD (//Document Type Definition//) pour le descripteur de déploiement est fournie par la spécification des servlets((Par exemple, pour la version 2.3 des spécifications des servlets, la DTD se trouve à: http://java.sun.com/dtd/web-app_2_3.dtd)).
Ligne 209: Ligne 207:
 Le descripteur de déploiement joue plusieurs rôles : Le descripteur de déploiement joue plusieurs rôles :
   * Initialisation des paramètres pour servlets et applications : ça permet de minimiser les initialisations dans le code (//hardcodées//).  Par exemple, si une servlet nécessite des accès à une base de données, le meilleur endroit pour placer les détails sur cette base de données (URL de la base de donnée et chaîne de pilote) est le descripteur de déploiement.  On pourra ainsi changer la configuration de la base de données sans avoir à recompiler la servlet.   * Initialisation des paramètres pour servlets et applications : ça permet de minimiser les initialisations dans le code (//hardcodées//).  Par exemple, si une servlet nécessite des accès à une base de données, le meilleur endroit pour placer les détails sur cette base de données (URL de la base de donnée et chaîne de pilote) est le descripteur de déploiement.  On pourra ainsi changer la configuration de la base de données sans avoir à recompiler la servlet.
-  * Définition des servlets/JSP : chaque page [[prog:java:jsp|JSP]] ou servlet doit être définie dans le descripteur de déploiement.  Pour une servlet, cette définition inclut le nom, la classe et une éventuelle description. +  * Définition des servlets/JSP : chaque page [[developpement:java:jsp|JSP]] ou servlet doit être définie dans le descripteur de déploiement.  Pour une servlet, cette définition inclut le nom, la classe et une éventuelle description. 
-  * Mappings pour JSP/servlets : le conteneur web utilise ces informations pour << mapper >> les requêtes vers les pages [[prog:java:jsp|JSP]] et servlets.+  * Mappings pour JSP/servlets : le conteneur web utilise ces informations pour << mapper >> les requêtes vers les pages [[developpement:java:jsp|JSP]] et servlets.
   * Types MIME : une application web peut contenir différents types de contenu.  Pour chacun d'eux, on spécifie le type MIME correspondant dans le descripteur de déploiement.   * Types MIME : une application web peut contenir différents types de contenu.  Pour chacun d'eux, on spécifie le type MIME correspondant dans le descripteur de déploiement.
   * Sécurité : gère le contrôle d'accès à l'application.  Il permet, en particulier, d'indiquer quelle page de //login// utiliser si l'application nécessite que l'utilisateur se connecte.   * Sécurité : gère le contrôle d'accès à l'application.  Il permet, en particulier, d'indiquer quelle page de //login// utiliser si l'application nécessite que l'utilisateur se connecte.
Ligne 377: Ligne 375:
  
 Il existe des situations où une servlet ne peut pas répondre seule à une requête.  Deux situations peuvent se présenter : Il existe des situations où une servlet ne peut pas répondre seule à une requête.  Deux situations peuvent se présenter :
-  * Redirection (''forward'') -> La servlet effectue une partie du traitement et la transmet à une autre ressource.  Elle peut par exemple traiter une partie de la requête puis la transférer à une autre servlet pour la compléter.  Elle peut aussi s'occuper de la logique d'affaire puis transmettre la requête à une page [[prog:java:jsp|JSP]] qui va s'occuper de la présentation de la réponse au client.+  * Redirection (''forward'') -> La servlet effectue une partie du traitement et la transmet à une autre ressource.  Elle peut par exemple traiter une partie de la requête puis la transférer à une autre servlet pour la compléter.  Elle peut aussi s'occuper de la logique d'affaire puis transmettre la requête à une page [[developpement:java:jsp|JSP]] qui va s'occuper de la présentation de la réponse au client.
   * Inclusion (''include'') -> la servlet peut inclure le traitement effectué par une autre ressource dans son propre traitement.   * Inclusion (''include'') -> la servlet peut inclure le traitement effectué par une autre ressource dans son propre traitement.
  
developpement/java/servlets.1438386138.txt.gz · Dernière modification : 2022/02/02 00:43 (modification externe)