Enst Bretagne 1 04/02/08 Gestion d'une session lors d'une commande dans un maga

Enst Bretagne 1 04/02/08 Gestion d'une session lors d'une commande dans un magasin 1 Objectifs : Une application sur le WEB se présente comme une succession de pages, en principe il n'y a aucun lien entre toutes ces pages, le serveur ne connaît le client que le temps d'une requête, or dans diverses applications (comptabilité commerce électronique, gestion de comptes bancaires, etc.) il est nécessaire de factoriser un certain nombre de données propres à chaque client entre ces différentes pages. Ce TP, par l'utilisation des cookies et des sessions http et d'accès à une base de données va montrer les différentes possibilités. 2 Installation d’éclipse  Cette installation est déjà faite sur les machines virtuelles Eclipse est un environnement de programmation, orienté Java, qui peut s’adapter par des plugins à différents contextes et langages, ici nous allons l’adapter à la langue française et à tomcat. 1) Extraire les fichiers de eclipse-jee-europa-fall2-win32.zip dans c :/jsp. Créez un répertoire " travail" sous C:, c'est ce répertoire que vous donnerez au lancement d'éclipse comme "Workspace". Lancer eclipse par la commane eclipse.exe sous le répertoire eclipse. qui a été créé. Vous pouvez observer qu’il ne connaît pas tomcat, pas de menu " tomcat". Fermer le.  Le plugin tomcat 4) Extraire les fichiers de tomcatPluginV321.zipdans c :/jsp/eclipse/plugins Relancez eclipse, vous devez voir un menu tomcat qui permet de lancer le serveur et de l’arrêter. Quelques initiations sous eclipse 1) sous le menu "Window" allez sous "preference". Dans "prefer ence", ouvrez "java" et sélectionnez "installed JREs". Vérifiez que la JRE choisie est celle que vous avez installée, sinon rajoutez votre JRE. 2) sous le menu "Window" allez sous "preference". Dans "preference", ouvrez "tomcat" et sous tomcat mettre la version "6.x", mettre (avec browse) le répertoire où se trouve votre tomcat, ENST Bretagne Département Informatique TP Servlet Utilisation des cookies, d'une session, accès à une base de données et utilisation de filtres Enseignement Département Informatique Enst Bretagne 2 04/02/08 en principe "C:\jsp\tomcat6.0". Vérifiez que pour les contextes, vous avez bien un fichier par contexte et que ce fichier se trouve : "C:\jsp \Tomcat 6.0\conf\Catalina\localhost". Ceci veut dire qu'Eclipse mettra dans ce répertoire un fichier de contexte pour chaque application WEB que vous créerez. Par la suite, vous pourrez regarder ce fichier. 3) sous le menu "Window" allez sous "preference". Dans "preference", ouvrez "tomcat" et choisissez "Paramètrage de la JVM", vérifier que la JRE est la bonne, dans le dernier cadre "Boot Classpath" rajouter rt.jar que vous trouvez sous le répertoire lib de la machine virtuelle java. 3 Test d'une application Nous allons voir comment créer une application web et la servlet suivante avec éclipse. Ce fichier se trouve dans les données communes. 1) sous le menu "File" allez sous "new" et choisissez "Project" . Dans " Project ", ouvrez "java" et choisissez "Projet Tomcat" puis "next". Donnez un nom à votre projet par exemple "monprojet" et "Finish". Eclipse crée une application web, vous pouvez regarder le contexte qu'il a mis dans le fichier "monprojet.xml" sous C:\jsp \Tomcat 6.0\conf\Catalina\localhost vous voyez qu'il y a un attribut reloadable="true", qui veut dire que tomcat doit recharger votre servlet si elle est modifiée. Lancer tomcat par l'icône tomcat qui apparaît sous eclipse, sous un navigateur web, regardez si votre application apparaît dans le manager de tomcat. 2) sélectionnez votre projet sous eclipse et faite "new " et choisissez " class", donnez lui un nom (Majuscule en premier caractère), par exemple "Maservlet" et la superclass javax.servlet.http.HttpServlet et "Finish". 3) Ouvrir cette classe et faire un copier- coller avec la classe suivante, bien sûr changer lui son nom par "Maservlet" si vous avez gardé ce nom.. public class SimpleServlet extends HttpServlet { public void doGet (HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out; String title = "Simple Servlet Output"; response.setContentType("text/html"); out = response.getWriter(); out.println("<HTML><HEAD><TITLE>"); out.println(title); out.println("</TITLE></HEAD><BODY>"); out.println("<H1>" + title + "</H1>"); out.println("<P>This is output from SimpleServlet."); out.println("</BODY></HTML>"); out.close(); } } 4) Acceptez les "import" qu'éclipse vous propose pour corriger les erreurs. 5) Enregistrez votre servlet 6) Si dans le fichier "web.xml" du répertoire "tomcat6.0/conf" vous avez retiré les commentaires autour de "Invoker", vous pouver lancer cette servlet dans un navigateur par l'adresse http://localhost:8080/monpremier/servlet/Maservlet. Enseignement Département Informatique Enst Bretagne 3 04/02/08 7) modifiez la servlet , enregistrez la et relancez la. La modification doit se voir (reloadable="true"). 4 Travail demandé sur les servlets  Le fichier web.xml, les fichiers Java se trouvent dans les données communes 4.1 Partie 1 : servlet : InscriptionClient .class alias : servlet/sinscrire Un client pourra passer une commande que lorsqu'il possédera un cookie avec son nom et un cookie avec son mot de passe. Cas 1 : Au premier appel de la servlet InscriptionClient, il ne possède pas de cookies, et il n'y a pas de paramètres nom et motdepasse. La servlet lui envoie donc un formulaire pour lui demander de s'inscrire avec son nom et un mot de passe, ce formulaire rappelle la servlet avec les paramètres "nom" et "motdepasse". Cas 2 : Au deuxième appel de la servlet InscriptionClient il ne possède pas toujours de cookies mais les paramètres nom et motdepasse sont présents , les cookies correspondant sont donc créés et un autre rappel est fait à cette même servlet et ceci sans paramètre (un seul cookie peut suffire, son nom le nom passé en paramètre, sa valeur le mot de passe). Cas 3 : Au troisième appel, les cookies sont présents, mais il n'y a pas les paramètres (nom et mot de passe), la servlet lui envoie donc un formulaire pour qu'il s'identifie, ce formulaire rappelle la servlet avec le nom et le mot de passe. Cas 4 : Au quatrième appel de la servlet, si les informations des cookies sont identiques à celles des paramètres (nom et motdepasse), le client peut accéder à la page de la servlet "achat". package mesCommandes; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class InscriptionClient extends HttpServlet { protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String nomRecu=null, motPasseRecu=null; String nomCookie=null, motPasseCookie=null; // initialisation cookies et paramètres response.setContentType("text/html"); PrintWriter out = response.getWriter(); if (nomCookie==null && nomRecu==null){ // Cas 1 : cas où il n'y a ni de cookies ni de parametres out.println("<html>"); out.println("<body>"); out.println("<head>"); out.println("<title> inscription d'un client </title>"); out.println("</head>"); out.println("<body bgcolor='white' >"); out.println( nomRecu +" | "+ motPasseRecu +" | "+ nomCookie +" | "+ motPasseCookie ); out.println("<h3>" + "Bonjour, vous devez vous inscrire " + "</h3>"); out.println("<h3>" + "Attention mettre nom et le mot de passe avec plus de 3 caracteres" + "</h3>"); Enseignement Département Informatique Enst Bretagne 4 04/02/08 out.print(" <form action='sinscrire' method='GET' > "); out.println("nom"); out.println("<input type='text' size='20' name='nom' >"); out.println("<br>"); out.println("mot de passe"); out.println("<input type='password' size='20' name='motdepasse'> <br>"); out.println("<input type='submit' value='inscription'>"); out.println("</form>"); out.println("</body>"); out.println("</html>"); } else if (nomCookie==null && nomRecu!=null){ // Cas 2 : cas où il n'y a pas de cookies mais les paramètres nom et mot de passes sont présents : } else if (identique(nomRecu,nomCookie) && identique(motPasseRecu,motPasseCookie)) { // Cas 4 : cas où le nom et le mot passe sont correctes, appel à la servlet achat } else { // Cas 3 : les cookies sont présents demande de s'identifier } } public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { doGet(request, response); } boolean identique (String recu, String cookie) { return ((recu != null) && (recu.length() >3) && (cookie != null) && (recu.equals(cookie) )); } } 4.2 Partie 2 : Gestion d'une commande Les servlets de gestion de la commande de disques sont les suivantes : • AfficherLesDisques.class alias servlet/achat • CommanderUnDisque.class alias servlet/commande Au départ, l'accès à ces classes sera libre, par la suite, nous les ferons précéder par un filtre qui renverra à l'inscription si les cookies ne sont pas présents. • AfficherLesDisques.class, cette servlet propose, une liste de disques où le client peut choisir celui qu’il va acheter, elle fournit pour chaque disque son titre et son prix, ainsi que la proposition de l’ajouter dans son panier d’achat (session). o La liste des disques et leur prix, pourraient être recherchés dans une base de données, pour l’instant, nous allons tout simplement utiliser une classe Stock. Cette classe contient une méthode affiche qui met dans un tableau HTML la liste des disques, leur prix, et un lien sur la servlet CommanderUnDisque avec comme paramètre le code du disque choisi. Au lieu de rechercher cette liste dans une base de données, elle est prise dans un tableau de disques créé dans cette classe. o Par la suite il sera possible de remplacer ce tableau par un accès à une base de données mais ce travail ne vous est pas demandé. package mesCommandes; Enseignement Département Informatique Enst Bretagne 5 04/02/08 import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class AfficherLesDisques extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { Stock uneVente = new Stock(); String nom = null; Cookie[] cookies = request.getCookies(); nom = Identification.chercheNom(cookies); response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<body>"); out.println("<head>"); out.println("<title> Commande de disques </title>"); out.println("</head>"); out.println("<body bgcolor=\"white\">"); out.println("<h3>" + "Bonjour " uploads/Industriel/ tp-servlet-2010.pdf

  • 25
  • 0
  • 0
Afficher les détails des licences
Licence et utilisation
Gratuit pour un usage personnel Attribution requise
Partager