prog:java:servlets
Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédente | |||
prog:java:servlets [2014/05/14 02:28] – sgariepy | prog:java:servlets [Date inconnue] (Version actuelle) – supprimée - modification externe (Date inconnue) 127.0.0.1 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
- | ====== Servlets ====== | ||
- | |||
- | Pour développer des applications web, la technologie java fournit deux types de composants : les servlets et les pages [[prog: | ||
- | |||
- | Une servlet est un programme [[prog: | ||
- | |||
- | 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:// | ||
- | |||
- | Une application web est un ensemble de composants de deux types. | ||
- | |||
- | {{ : | ||
- | |||
- | 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. | ||
- | |||
- | L' | ||
- | |||
- | | ||
- | |||
- | ===== Conteneur web ===== | ||
- | Le conteneur web, ou conteneur de servlet, ou moteur de servlet. | ||
- | |||
- | ====== Implémetation 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. | ||
- | |||
- | Il y a cinq méthodes dans une servlet. | ||
- | |||
- | Avant de mettre fin à la servlet, la méthode '' | ||
- | |||
- | Il y a aussi les méthodes '' | ||
- | |||
- | |||
- | ===== Méthode service() ===== | ||
- | |||
- | Cette méthode est faite à la base pour traiter une requête. | ||
- | |||
- | L' | ||
- | |||
- | Normalement, | ||
- | |||
- | ===== Interfaces ===== | ||
- | |||
- | J2EE, ou simplement JEE, fournit plusieurs interfaces et classes. | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | |||
- | |||
- | {{ : | ||
- | |||
- | En [[web: | ||
- | < | ||
- | export CLASSPATH="/ | ||
- | </ | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ====== Développement d'une servlet ====== | ||
- | |||
- | |||
- | En réalité, la classe '' | ||
- | |||
- | ^ Méthodes spécifiques à la classe '' | ||
- | | '' | ||
- | | '' | ||
- | | '' | ||
- | | '' | ||
- | | '' | ||
- | | '' | ||
- | | '' | ||
- | | '' | ||
- | | '' | ||
- | | '' | ||
- | |||
- | |||
- | La méthode publique '' | ||
- | |||
- | Notre classe '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | |||
- | Il n'y a pas de raison de surdéfinir la méthode '' | ||
- | |||
- | Ainsi, la classe de la servlet '' | ||
- | |||
- | <code java|Fichier TestServlet.java> | ||
- | import javax.servlet.http.*; | ||
- | import javax.servlet.*; | ||
- | import java.io.*; | ||
- | |||
- | public class TestServlet extends HttpServlet { | ||
- | |||
- | public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, | ||
- | PrintWriter out = response.getWriter(); | ||
- | out.println(" | ||
- | } | ||
- | } | ||
- | </ | ||
- | |||
- | Remarquons que la méthode '' | ||
- | |||
- | {{: | ||
- | \\ | ||
- | On peut même personnaliser le message en y incluant le nom du client. | ||
- | |||
- | <code html|Fichier bienvenue.html> | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | <form action=" | ||
- | Nom : <input type=" | ||
- | <input type=" | ||
- | </ | ||
- | </ | ||
- | </ | ||
- | </ | ||
- | {{: | ||
- | |||
- | En cliquant sur le bouton **OK**, les données du formulaire sont envoyées à la servlet '' | ||
- | <code java> | ||
- | String nom = request.getParameter(" | ||
- | </ | ||
- | |||
- | Une fois récupéré, | ||
- | <code java> | ||
- | out.println(" | ||
- | </ | ||
- | |||
- | IMAGE //Figure 4. Le message envoyé par la servlet TestServlet est personnalisé en y incluant le nom de l' | ||
- | |||
- | La servlet '' | ||
- | * En soumettant un formulaire avec la méthode '' | ||
- | * En invoquant la servlet en saisissant son URL dans la barre d' | ||
- | <code html> | ||
- | <a href="/ | ||
- | </ | ||
- | |||
- | Si on invoque la servlet '' | ||
- | <code html> | ||
- | <form action="/ | ||
- | </ | ||
- | la servlet ne répond plus correctement (Figure 5). En effet, cette fois-ci c'est la méthode '' | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | IMAGE //Figure 5. La servlet ne répond pas à une requête '' | ||
- | |||
- | Si on veut que la servlet réponde de la même manière, qu' | ||
- | |||
- | <code java> | ||
- | public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, | ||
- | traiter(request, | ||
- | } | ||
- | |||
- | public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, | ||
- | traiter(request, | ||
- | } | ||
- | |||
- | public void traiter(HttpServletRequest request, HttpServletResponse response) throws ServletException, | ||
- | PrintWriter out = response.getWriter(); | ||
- | String nom request.getParameter(" | ||
- | out.println(" | ||
- | } | ||
- | </ | ||
- | |||
- | |||
- | ====== Déploiement d'une servlet ====== | ||
- | |||
- | |||
- | Développer une servlet, ce n'est pas tout. Une fois le code de la servlet écrit et compilé, la servlet doit être déployée au sein d'un conteneur web. Nous allons utiliser le conteneur // | ||
- | |||
- | Le processus de déploiement de servlets et, de façon générale, d' | ||
- | |||
- | L' | ||
- | |||
- | Par conséquent, | ||
- | |||
- | ===== Structure d'une application web ===== | ||
- | |||
- | Dans les spécifications J2EE, une application web doit être dans un et un seul dossier. | ||
- | |||
- | Dans //Tomcat//, le dossier de l' | ||
- | - un dossier public : c'est le dossier racine de l' | ||
- | - Le fichier '' | ||
- | - Le dossier de classes '' | ||
- | - Le dossier de bibliothèques '' | ||
- | |||
- | Le dossier '' | ||
- | |||
- | |||
- | IMAGE //Figure 6. Structure des répertoires d'une application web sous J2EE.// | ||
- | |||
- | ===== 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. | ||
- | |||
- | La DTD (//Document Type Definition// | ||
- | |||
- | 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 (// | ||
- | * Définition des servlets/ | ||
- | * Mappings pour JSP/ | ||
- | * Types MIME : une application web peut contenir différents types de contenu. | ||
- | * Sécurité : gère le contrôle d' | ||
- | * On peut aussi personnaliser des éléments tels que : les pages d' | ||
- | |||
- | Pour déployer la servlet '' | ||
- | |||
- | <code xml> | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | et éventuellement un mapping pour cette servlet: | ||
- | <code xml> | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | |||
- | Ce mapping permet de se référer à la servlet par l'URL, en supposant que le dossier racine de l' | ||
- | |||
- | Voici le contenu minimal du descripteur de déploiement (fichier '' | ||
- | |||
- | <code xml|Fichier minimal web.xml> | ||
- | <?xml version-" | ||
- | < | ||
- | |||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | </ | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ====== La configuration des servlets ====== | ||
- | |||
- | En plus de son nom, il est possible d' | ||
- | |||
- | <code xml> | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | < | ||
- | < | ||
- | < | ||
- | </ | ||
- | </ | ||
- | </ | ||
- | |||
- | Le principal avantage de cette façon de faire est qu'on peut ensuite modifier les valeurs des paramètres sans avoir à recompiler la servlet. | ||
- | |||
- | La configuration d'une servlet est représentée par un objet de type '' | ||
- | |||
- | Lors du lancement de la servlet, le conteneur construit un objet de type '' | ||
- | <code java> | ||
- | public void init(ServletConfig x) { | ||
- | super.init(x); | ||
- | ... | ||
- | } | ||
- | </ | ||
- | |||
- | Dans le code de la servlet, on peut récupérer une référence à cet objet en utilisant la méthode '' | ||
- | <code java> | ||
- | ServletConfig sc = getServletConfig(); | ||
- | </ | ||
- | |||
- | Ensuite, on peut accéder aux informations de configuration en utilisant cet objet. | ||
- | <code java> | ||
- | String adrWebmestre = sc.getInitParameter(" | ||
- | String uriBD = sc.getInitParameter(" | ||
- | String nomServlet = sc.getServletName(); | ||
- | </ | ||
- | |||
- | On peut aussi récupérer la liste de tous les noms des paramètres initiaux : | ||
- | <code java> | ||
- | Enumeration listeParam = sc.getInitParameterNames(); | ||
- | </ | ||
- | |||
- | Enfin, on peut obtenir une référence à l' | ||
- | <code java> | ||
- | ServletContext contexte = sc.getServletContext(); | ||
- | </ | ||
- | |||
- | Cet objet représente l' | ||
- | |||
- | |||
- | |||
- | |||
- | |||
- | ====== Le contexte des servlets ====== | ||
- | |||
- | Chaque servlet s' | ||
- | <code java> | ||
- | ServletConfig sc = getServletConfig(); | ||
- | ServletContext contexte = sc.getServletContext(); | ||
- | </ | ||
- | |||
- | Il n'y a qu'un seul objet '' | ||
- | |||
- | L' | ||
- | - '' | ||
- | - '' | ||
- | - '' | ||
- | - '' | ||
- | |||
- | Ils permettent de gérer des données que les servlets se partagent. | ||
- | |||
- | <code java> | ||
- | contexte.setAttribute(" | ||
- | Object x = contexte.getAttribute(" | ||
- | Enumeration liste = contexte.getAttributeNames(); | ||
- | contexte.removeAttribute(" | ||
- | </ | ||
- | |||
- | Les autres méthodes sont : | ||
- | * '' | ||
- | * '' | ||
- | * '' | ||
- | |||
- | |||
- | ====== La gestion des sessions ====== | ||
- | |||
- | On peut faire persister les données d'un utilisateur d'une page à une autre pour la durée d'une session. | ||
- | |||
- | <code java> | ||
- | javax.servlet.http.HttpSession session = request.getSession(true); | ||
- | session.putValue(" | ||
- | </ | ||
- | |||
- | Si on transmet la valeur '' | ||
- | <code java> | ||
- | session.putValue(" | ||
- | </ | ||
- | |||
- | On peut récupérer une valeur stockée dans l' | ||
- | <code java> | ||
- | x = session.getValue(" | ||
- | |||
- | java.awt.Color cp = new java.awt.Color(0.75, | ||
- | session.putValue(" | ||
- | |||
- | //Pour récupérer cette valeur : | ||
- | |||
- | java.awt.Color coul; | ||
- | coul = (java.awt.Color) session.getValue(" | ||
- | </ | ||
- | |||
- | |||
- | ====== Collaboration entre servlets ====== | ||
- | |||
- | Il existe des situations où une servlet ne peut pas répondre seule à une requête. | ||
- | * Redirection ('' | ||
- | * Inclusion ('' | ||
- | |||
- | Ces deux types de collaboration sont réalisés grâce à l' | ||
- | <code java> | ||
- | public void forward(ServletRequest r, ServietResponse s) throws ServletException, | ||
- | public void include(ServletRequest r, ServietResponse s) throws ServletException, | ||
- | </ | ||
- | |||
- | Remarquons d' | ||
- | |||
- | La méthode '' | ||
- | |||
- | Dans tous les cas, il faut d' | ||
- | |||
- | - La méthode '' | ||
- | - La méthode '' | ||
- | - La méthode '' | ||
- | |||
- | |||
- | |||
- | ====== Ressources ====== | ||
- | * http:// | ||
- | |||
- | |||
- | |||
prog/java/servlets.1400027324.txt.gz · Dernière modification : 2022/02/02 00:43 (modification externe)