La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

S. BEN YAHIA Faculté des Sciences de Tunis, Tunisie Connexion Web et Bases de Données : Technique.

Présentations similaires


Présentation au sujet: "S. BEN YAHIA Faculté des Sciences de Tunis, Tunisie Connexion Web et Bases de Données : Technique."— Transcription de la présentation:

1 S. BEN YAHIA Faculté des Sciences de Tunis, Tunisie Connexion Web et Bases de Données : Technique canevas de fichiers HTML JSP (JAVA Server Page)

2 JSP 2 Sadok Ben Yahia Programme Java s'exécutant côté serveur (au même titre que les CGI et les langages de script côté serveur tels que ASP ou bien PHP) capable gérer des requêtes HTTP et de fournir au client une réponse HTTP dynamique (création de pages web dynamiques).CGIASPPHPrequêtes HTTPréponse HTTP servlet :programme "autonome" stockés dans un fichier.class sur le serveur Java Server Pages : programme source Java embarqué dans une page.html Introduction

3 JSP 3 Sadok Ben Yahia côté client côté serveur.class autonome applet servlet embarqué dans.html JavaScript JSP Servlet et JSP exécutable avec tous les serveurs Web (Apache, IIS,...) auxquels on a ajouté un "moteur" de servlet/ JSP (le plus connu : Tomcat ) JSP compilées automatiquement en servlet par le moteur JSP : Introduction

4 JSP 4 Sadok Ben Yahia JSP : Principe du code Java embarqué dans une page HTML entre les balises extension.jsp pour les pages JSP les fichiers.jsp sont stockés sur le serveur (comme des docs) ils sont désignés par une URL www. lip2. tn/ prog. Jsp le chargement de l'URL provoque l' exécution de la servlet Client Explorer Netscape ….. Serveur IIS Apache... Tom cat JVM Sun Microsoft test1. JSP

5 JSP 5 Sadok Ben Yahia Principe de fonctionnement Table des factorielles <% int i, fact; for ( i= 1, fact= 1 ; i< 4 ; i++, fact*= i ) { out. print( i + "! =" + fact + " " ); } %> résultat = HTML généré via l'objet prédéfini out du code Java

6 JSP 6 Sadok Ben Yahia Principe de fonctionnement ce qui est renvoyé au client Table des factorielles 1! = 1 2! = 2 3! = 6

7 JSP 7 Sadok Ben Yahia JSP : Mécanismes mis en œuvre Plusieurs zones peuvent cohabiter dans une même JSP Lors du premier chargement d'une JSP (ou après modification), le moteur : - rassemble tous les fragments de la JSP dans une classe - la compile - l'instancie Puis, ou lors des chargements suivants, le moteur - exécute le code dans un thread délai d'attente lors de la 1ère invocation dû à la compilation en cas d'erreur de syntaxe dans le code Java de la JSP : le message récupéré dans le navigateur

8 JSP 8 Sadok Ben Yahia La directive La directive La directive génère l'affichage d'une valeur de l'expression expr ! raccourci pour

9 JSP 9 Sadok Ben Yahia Méthodes et variables d'instance Des méthodes et des variables d'instance peuvent être associées à une JSP entre les directives Compteur <%! int cpt = 0; int getCpt() { return cpt++; } %> Variable d'instance - initialisée à l'instanciation de la JSP - persiste entre 2 invocations tant que la JSP ne change pas Méthode d'instance - attachée à l'objet correspondant à la JSP

10 JSP 10 Sadok Ben Yahia JSP variables d'instance Attention !! variable d'instance de la JSP ( persiste ) variable locale à la JSP ( réinitialisée à chaque invocation de la JSP) Exemple # 1ère invocation2ème invocation

11 JSP 11 Sadok Ben Yahia La directive La directive Donne des informations sur la JSP (non obligatoire, valeurs par défaut) : le langage utilisé dans la JSP ( java seule valeur possible pour l'instant) : les "import" nécessaires au code Java de la JSP (ex. ) : true la JSP peut être exécutée par +sieurs clients à la fois (valeur par défaut) false la JSP ne peut être exécutée que par un seul client à la fois : fournit l'URL de la JSP à charger en cas d'erreur (ex. ) true la JSP est une page invoquée en cas d'erreur false la JSP est une page normale (valeur par défaut)

12 JSP 12 Sadok Ben Yahia Les objets implicites Objets pré-déclarés utilisables dans le code Java des JSPs out :le flux de sortie pour générer le code HTML request: la requête qui a provoqué le chargement de la JSP response: la réponse à la requête de chargement de la JSP page: l'instance de servlet associée à la JSP courante ( this ) exception: l'exception générée en cas d'erreur sur une page session :suivi de session pour un même client application : espace de données partagé entre toutes les JSP

13 JSP 13 Sadok Ben Yahia Récupération des données d'un formulaire Méthode String getParameter(String) de l'objet prédéfini request retourne le texte saisi ou null si le nom de paramètre n'existe pas


14 JSP 14 Sadok Ben Yahia Récupération des données d'un formulaire Exemple de résultat Bonjour

15 JSP 15 Sadok Ben Yahia Exemple JSP <% if (request.getParameter("nom")==null && request.getParameter(" ")== null) { %> Information utilisateur Votre nom: Votre <% nom = request.getParameter("nom"); = request.getParameter(" "); %> Vous avez fourni les informations suivantes: Name : Si on accède à process.jsp après avoir entré son URL dans le navigateur Si on accède à process.jsp après avoir appuyé sur Envoyer

16 JSP 16 Sadok Ben Yahia Gestion des erreurs Erreur de syntaxe - dans les directives JSP (ex. : oubli d'une directive %> ) - dans le code Java Erreur d'exécution du code Java (ex. : NullPointerException ) dans tous les cas, erreur récupérée dans le navigateur client 2 possibilités conserver la page par défaut construite par le moteur en concevoir une adaptée aux besoins particuliers de l'application utilisation des directives et

17 JSP 17 Sadok Ben Yahia Exemple de gestion d'erreur Pourvu... !! <% int hasard = (int) ( Math. random() * 5 ); %> Si hasard = 0 page d'erreur par d é faut

18 JSP 18 Sadok Ben Yahia Exemple de gestion d'erreur : définition dune page derreur Pourvu... !!

19 JSP 19 Sadok Ben Yahia Exemple de gestion d'erreur : définition dune page derreur Le 0 est sorti !! Erreur : Si hasard = 0 page d'erreur err. jsp Récupération de l'erreur via l'objet prédéfini exception page d'erreur err. jsp

20 JSP 20 Sadok Ben Yahia Inclusion de JSP JSP principale agrégation des résultats fournis par plusieurs JSP meilleure modularité meilleure réutilisation Directives et

21 JSP 21 Sadok Ben Yahia Inclusion de JSP Résultat JSP principale JSP incluse JSP incluse Pas de Fichier inc. jsp

22 JSP 22 Sadok Ben Yahia Compléments sur l'API Méthodes appelables sur l'objet prédéfini request String getProtocol() : retourne le protocole implanté par le serveur (ex. : HTTP/ 1.1) String getServerName() / String getServerPort() : retourne le nom/ port de la machine serveur String getRemoteAddr() / String getRemoteHost() : retourne l'adresse/ nom de la machine cliente (ayant invoqué la servlet) String getScheme() : retourne le protocole utilisé (ex. : http ou https) par le client

23 JSP 23 Sadok Ben Yahia Suivi de session HTTP protocole non connecté : pour le serveur, 2 requêtes successives d'un même client sont indépendantes Objectif : être capable de "suivre" l'activité du client sur plusieurs pages Notion de session les requêtes provenant d'un utilisateur sont associées à une même session les sessions ne sont pas éternelles, elles expirent au bout d'un délai fixé Objet prédéfini session de type HttpSession initialisable avec les méthodes - session = request. getSession(true) : retourne la session courante pour cet utilisateur ou une nouvelle session - session = request. getSession(false) : retourne la session courante pour cet utilisateur ou null

24 JSP 24 Sadok Ben Yahia Suivi de session Méthodes appelables sur l'objet prédéfini session void setAttribute( String name, Object value ) : ajoute un couple ( name, value ) pour cette session Object getAttribute(String name) : retourne l'objet associé à la clé name ou null void removeAttribute(String name) : enlève le couple de clé name java.util.Enumeration getAttributeNames() : retourne tous les noms d'attributs associés à la session void setMaxIntervalTime(int seconds) : spécifie la durée de vie maximum d'une session long getCreationTime() / long getLastAccessedTime() : retourne la date de création / de dernier accès de la session en ms depuis le 1/ 1/ 1970, 00h00 GMT

25 JSP 25 Sadok Ben Yahia Partage de données entre JSP Notion de contexte d'exécution = ensemble de couples ( name, value) partagées par toutes les JSP instanciées objet prédéfini application Méthodes appelables sur l'objet prédéfini application void setAttribute( String name, Object value ) : ajoute un couple (name, value) dans le contexte Object getAttribute( String name ) : retourne l'objet associé à la clé name ou null void removeAttribute( String name ) : enlève le couple de clé name java. util. Enumeration getAttributeNames(): retourne tous les noms d'attributs associés au contexte

26 JSP 26 Sadok Ben Yahia Ecrire un programme JSP qui se comporte différemment en fonction des paramètres quil récupère depuis lURL dappel du programme. –Le premier appel du programme JSP seffectue en lançant une requête par lintermédiaire dune URL simple, nutilisant aucun paramètre, comme : – Le navigateur affiche en réponse un formulaire demandant à lutilisateur de remplir le formulaire, puis valider son choix en cliquant sur le boutant OK. JSP est structures de la programmation Java (1/13)

27 JSP 27 Sadok Ben Yahia Exemple 1: Programme JSP appelé QuiFaitQuoi_if.jsp : Formulaire avec bouton radio, Manipulation de la structure Java if-else. JSP est structures de la programmation Java (2/13)

28 JSP 28 Sadok Ben Yahia Exemple 1 (suite) : JSP est structures de la programmation Java (3/13) --> <%! String [] lRealisateur = {"Jean-Jaques Beineix","Luc Besson", "Jean-Jaques Arnaud", "Jean-Pierre Jeunet" }; int i; %> <% String parametre = request.getParameter("valeur"); if (parametre == null) { out.println(" Question.... "); out.println(" "); %> Quel est le réalisateur du film La guerre du feu ? Jean-Jacques Beinex Luc Besson Jean-Jacques Arnaud Jean-Pierre Jeunet QuiFaitQuoi_if.jsp

29 JSP 29 Sadok Ben Yahia Exemple 1 (suite) : JSP est structures de la programmation Java (4/13) <% } else { i= Integer.parseInt(parametre); out.println(" Réponse.... "); out.println(" "); out.println("Votre réponse est :"+ lRealisateur[i]+" "); out.println("La bonne réponse est : Jean-Jacques Arnaud"); } %> QuiFaitQuoi_if.jsp (suite)

30 JSP 30 Sadok Ben Yahia Exemple 2: Programme JSP appelé QuiFaitQuoi_switch.jsp : Formulaire avec bouton radio, Manipulation de la structure Java switch. JSP est structures de la programmation Java (5/13)

31 JSP 31 Sadok Ben Yahia Exemple 2 (suite) : JSP est structures de la programmation Java (6/13) --> <%! String lRealisateur [] = {"Jean-Jaques Beineix","Luc Besson", "Jean-Jaques Arnaud", "Jean-Pierre Jeunet" }; int i; %> <% String parametre = request.getParameter("valeur"); if (parametre == null) { out.println(" Question.... "); out.println(" "); %> Quel est le réalisateur du film La guerre du feu ? Jean-Jacques Beinex Luc Besson Jean-Jacques Arnaud Jean-Pierre Jeunet QuiFaitQuoi_switch.jsp

32 JSP 32 Sadok Ben Yahia Exemple 2 (suite) : JSP est structures de la programmation Java (7/13) <% } else { i= Integer.parseInt(parametre); out.println(" Réponse.... "); out.println(" "); switch (i) { case 0 : case 1: case 3 : out.println("vous avez perdu ! "); break; case 2 : out.println("vous avez gagnez ! "); break; } %> QuiFaitQuoi_switch.jsp (suite)

33 JSP 33 Sadok Ben Yahia Exemple 3: Programme JSP appelé QuiFaitQuoi_do_while.jsp : Formulaire avec liste de choix, Manipulation de la structure Java do while. JSP est structures de la programmation Java (8/13) Vous avez perdu

34 JSP 34 Sadok Ben Yahia Exemple 3 (suite) : JSP est structures de la programmation Java (9/13) --> <%! String lRealisateur [] = {"Jean-Jaques Beineix","Luc Besson", "Jean-Jaques Arnaud", "Jean-Pierre Jeunet" }; int i=0; %> <% String parametre = request.getParameter("valeur"); if (parametre == null) { out.println(" Question.... "); out.println(" "); %> Quel est le réalisateur du film La guerre du feu ? <% String chaineR=" \n"; do { chaineR+=" "+lRealisateur[i]+" \n"; i++; } while (i QuiFaitQuoi_do_while.jsp

35 JSP 35 Sadok Ben Yahia Exemple 3 (suite) : JSP est structures de la programmation Java (10/13) <% } else { int j= Integer.parseInt(parametre); out.println(" Réponse.... "); out.println(" "); if(j==2) outprintln("vous avez gagné"); else outprintln("vous avez perdu"); } %> QuiFaitQuoi_switch.jsp (suite)

36 JSP 36 Sadok Ben Yahia Exemple 3: Programme JSP appelé QuiFaitQuoi_fonction.jsp : Formulaire avec 2 listes de choix, Manipulation de fonction Java. JSP est structures de la programmation Java (11/13)

37 JSP 37 Sadok Ben Yahia Exemple 3 (suite) : JSP est structures de la programmation Java (12/13) --> <%! String lRealisateur [] = {"Jean-Jaques Beineix","Luc Besson", "Jean-Jaques Arnaud", "Jean-Pierre Jeunet" }; String lFilm [] = {"Le grand bleu","Le fabuleux destin de...", "La guerre du feu", "37° le matin" }; %> <%! public String fSelect(String[] liste, String nom) { String chaine=" "; int i=0; while(i <% String parametreR = request.getParameter("auteur"); String parametreF = request.getParameter("film"); if (parametreF == null || parametreR == null) { out.println(" Question.... "); out.println(" "); %> QuiFaitQuoi_fonction.jsp

38 JSP 38 Sadok Ben Yahia Exemple 3 (suite) : 5- JSP est structures de la programmation Java (13/13) <% String chaineR=fSelect(lRealisateur,"auteur"); String chaineF=fSelect(lFilm,"film"); %> Quel réalisateur ? Quel film? <% } else { out.println(" Réponse.... "); out.println(" "); int valeurR=Integer.parseInt(parametreR); int valeurF=Integer.parseInt(parametreF); if(valeurR==valeurF) out.println("vous avez gagné"); else out.println("vous avez perdu"); } %> QuiFaitQuoi_fonction.jsp (suite)

39 JSP 39 Sadok Ben Yahia Agrégation de traitements fournis par des JSP : –meilleure modularité, –meilleure réutilisation. Collaboration entre JSP et Servlets : LInterface RequestDispatcher (1/2) Servletjsp1 jsp2 jsp3

40 JSP 40 Sadok Ben Yahia Obtention dun RequestDispatcher : –dans la méthode de traitement de requête de Servlet –Redirection dune requête dans méthode de traitement de requête, demande à un JSP de répondre au client Collaboration entre JSP et Servlets : LInterface RequestDispatcher (2/2) …………….. RequestDispatcher rd; rd = getServeletContext().getRequestDispatcher("/*****.jsp"); if(rd==null) res.sendError(404); …………. rd.forward(req, res);

41 JSP 41 Sadok Ben Yahia Les tags d'actions Les tags d'actions permettent de réaliser des traitements couramment utilisés. Le tag Le tag permet de localiser une instance ou d'instancier un bean pour l'utiliser dans la JSP. L'utilisation d'un bean dans une JSP est très pratique car il peut encapsuler des traitements complexes et être réutilisable par d'autre JSP ou composants

42 JSP 42 Sadok Ben Yahia JavaBean Classe Java –Encapsule des propriétés XXX uniquement accessible au travers de setXXX et getXXX –Constructeur sans argument –Support de la persistance en implémentant linterface Serializable

43 JSP 43 Sadok Ben Yahia Exemple JavaBean package clientele; import java.io.*; public class ClientBean implements Serializable { private String nom; private String ; public ClientBean() { nom = null; = null; } public void setNom(String nom) { this.nom = nom; } public String getNom() { return nom; } public void set (String ) { this. = ; } public String get () { return ; } }

44 JSP 44 Sadok Ben Yahia JavaBeans & JSP Plusieurs portées possibles –application : Créé une fois et partagé par tous les clients –session : Sil nexiste pas encore dans la session courante, créé et placé dans la session client. Réutilisé jusquà ce que la session soit invalidée –request : Utilisable dans les pages de redirection de la requête ( ). Détruit à la fin de la requête. –page : Comme request, mais pas transmis aux pages de redirection. Portée par défaut

45 JSP 45 Sadok Ben Yahia Tags dactions Instanciation dun bean Modification dune propriété Affiche une propriété

46 JSP 46 Sadok Ben Yahia Exemple JSP/JavaBean <% if (request.getParameter("nom")==null && request.getParameter(" ") == null) { %> Information utilisateur Votre nom: Votre Vous avez fourni les informations suivantes: Name :

47 JSP 47 Sadok Ben Yahia Le tag de redirection Le tag permet de rediriger la requête vers une autre URL pointant vers un fichier HTML, JSP ou un servlet. Dès que le moteur de JSP rencontre ce tag, il redirige le requête vers l'URL précisée et ignore le reste de la JSP courante (tout ce qui a été généré par la JSP est perdu). La syntaxe est la suivante : }" /> ou }" > }" /> + Il est possible de passer un ou plusieurs paramètres vers la ressource appelée grâce au tag.

48 JSP 48 Sadok Ben Yahia Page initiale appelée forward.htm Page HTML Page HTML forwardée

49 JSP 49 Sadok Ben Yahia Le tag Ce tag permet d'inclure le contenu généré par une JSP ou une servlet dynamiquement au moment ou la JSP est exécutée. C'est la différence avec la directive include avec laquelle le fichier est inséré dans la JSP avant la génération de la servlet. La syntaxe est la suivante : L'attribut page permet de préciser l'URL relative de l'élément à insérer. L'attribut flush permet d'indiquer si le tampon doit être envoyé au client et vidé. Si la valeur de ce paramètre est true, il n'est pas possible d'utiliser certaines fonctionnalités dans la servlet ou la JSP appelée : il n'est pas possible de modifier l'entete de la réponse (header, cookies) ou renvoyer ou faire suivre vers une autre page.

50 JSP 50 Sadok Ben Yahia Bonjour Il est possible de fournir des paramètres à la servlet ou à la JSP appelée en utilisant le tag.

51 Les bibliothèques de tag personnalisées (custom taglibs)

52 JSP 52 Sadok Ben Yahia Les bibliothèques de tag personnalisées (custom taglibs) Les bibliothèques de tags (taglibs) ou tags personnalisés (custom tags) permettent de définir ses propres tags basés sur XML, de les regrouper dans une bibliothèque et de les réutiliser dans des JSP. C'est une extension de la technologie JSP apparue à partir de la version 1.1 des spécifications des JSP.

53 JSP 53 Sadok Ben Yahia Les tags personnalisées Un tag personnalisé est un élément du langage JSP défini par un développeur pour des besoins particuliers qui ne sont pas traités en standard par les JSP. Elles permettent de définir ses propres tags qui réaliseront des actions pour générer la réponse. Le principal but est de favoriser la séparation des rôles entre le développeur Java et concepteur de page web. L'idée maitresse est de déporter le code Java contenu dans les scriplets de la JSP dans des classes dédiées et de les appeler dans le code source de la JSP en utilisant des tags particuliers.

54 JSP 54 Sadok Ben Yahia Les tags personnalisés sont adaptés pour enlever du code Java inclus dans les JSP est le déporter dans une classe dédiée. Cette classe est physiquement un javabean qui implémente une interface particulière. La principale différence entre un javabean et un tag personnalisé est que ce dernier tient compte de l'environnement dans lequel il s'exécute (notamment la JSP et le contexte de l'application web ) et interagit avec lui. Les tags personnalisées

55 JSP 55 Sadok Ben Yahia Fonctionnalités Les tags personnalisés possèdent des fonctionnalités intéressantes : –ils ont un accès aux objets de la JSP notamment l'objet de type HttpResponse. Ils peuvent donc modifier le contenu de la réponse générée par la JSP – ils peuvent recevoir des paramètres envoyés à partir de la JSP qui les appelle –ils peuvent avoir un corps qu'ils peuvent manipuler. Par extension de cette fonctionnalité, il est possible d'imbriquer un tag personnalisé dans un autre avec un nombre d'imbrication illimité

56 JSP 56 Sadok Ben Yahia Avantages Les avantages des bibliothèques de tags personnalisés sont : –un suppression du code Java dans la JSP remplacé par un tag XML facilement compréhensible ce qui simplifie grandement la JSP – une API facile à mettre en œuvre –une forte et facile réutilisabilité des tags développés – une maintenance des JSP facilitée

57 JSP 57 Sadok Ben Yahia La définition dune biblio de tags La définition d'une bibliothèque de tags comprend plusieurs entités : 1.une classe dit "handler" pour chaque tag qui compose la bibliothèque 2. un fichier de description de la bibliothèque

58 JSP 58 Sadok Ben Yahia Les handlers de tags Chaque tag est associé à une classe qui va contenir les traitements à exécuter lors de l'utilisation du tag. Une telle classe est nommée "handler de tag" (tag handler). Pour permettre leur appel, une telle classe doit obligatoirement implémenter directement ou indirectement l'interface javax.servlet.jsp.tagext.Tag L'interface Tag possède une interface fille BodyTag qui doit être utilisée dans le cas ou le tag peut utiliser le contenu de son corps.

59 JSP 59 Sadok Ben Yahia Les handlers de tags Pour plus de facilité, l'API JSP propose les classes TagSupport et BodyTagSupport qui implémentent respectivement l'interface Tag et BodyTag. Ces deux classes, contenues dans le package javax.servlet.jsp.tagext, proposent des implémentations par défaut des méthodes de l'interface. Ces dernières proposent un traitement standard par défaut pour chacune des méthodes de l'interface qu'ils implémentent. Pour définir un handler de tag, il suffit d'hériter de l'une ou l'autre de ces deux classes. Les méthodes définies dans les interfaces Tag et BodyTag sont appelées, par la servlet issue de la compilation de la JSP, au cours de l'utilisation du tag.

60 JSP 60 Sadok Ben Yahia Le cycle de vie général d'un tag Lors de la rencontre du début du tag, un objet du type du handler est instancié plusieurs propriétés sont initialisées (pageContext, parent,...) en utilisant les setters correspondants si le tag contient des attributs, les setters correspondant sont appelés pour alimenter leur valeur, alors la méthode doStartTag() est appelée si la méthode doStartTag() renvoie la valeur EVAL_BODYINCLUDE alors le contenu du corps du tag est évalué Lors de la rencontre de la fin du tag, alors appel de la méthode doEndTag() si la méthode doEndTag() renvoie la valeur EVAL_PAGE alors l'évaluation de la page se poursuit, si elle renvoie la valeur SKIP_PAGE elle ne se poursuit pas

61 JSP 61 Sadok Ben Yahia Le cycle de vie général d'un tag Un handler de tag possède un objet qui permet d'avoir un accès aux objets implicites de la JSP. Cet objet est du type javax.servlet.jsp.PageContext Comme le code contenu dans la classe du tag ne peut être utilisé que dans le contexte particulier du tag, il peut être intéressant de sortir une partie de ce code dans une ou plusieurs classes dédiées qui peuvent être éventuellement des beans.

62 JSP 62 Sadok Ben Yahia L'interface Tag Cette interface définit les méthodes principales pour la gestion du cycle de vie d'un tag personnalisé qui ne doit pas manipuler le contenu de son corps. Elle définit plusieurs constantes et méthodes: Constante Rôle EVAL_BODY_INCLUDE Continuer avec l'évaluation du corps du tag EVAL_PAGE Continuer l'évaluation de la page SKIP_BODY Empêcher l'évaluation du corps du tag SKIP_PAGE Empêcher l'évaluation du reste de la page Méthode Rôle int doEndTag() Traitements à la rencontre du tag de début int doStartTag() Traitements à la rencontre du tag de fin setPageContext(Context) Sauvegarde du contexte de la page

63 JSP 63 Sadok Ben Yahia La méthode doStartTag() est appelée lors de la rencontre du tag d'ouverture et contient les traitements à effectuer dans ce cas. Elle doit renvoyer un entier prédéfini qui indique comment va se poursuivre le traitement du tag : –EVAL_BODY_INCLUDE : poursuite du traitement avec évaluation du corps du tag –SKIP_BODY : poursuite du traitement sans évaluation du corps du tag La méthode doEndTag() est appelée lors de la rencontre du tag de fermeture et contient les traitements à effectuer dans ce cas. Elle doit renvoyer un entier prédéfini qui indique comment va se poursuivre le traitement de la JSP. –EVAL_PAGE : poursuite du traitement de la JSP – SKIP_PAGE : ne pas poursuivre le traitement du reste de la JSP

64 JSP 64 Sadok Ben Yahia L'accès aux variables implicites de la JSP Les tags ont accès aux variables implicites de la JSP dans laquelle ils s'exécutent via un objet de type PageContext. La variable pageContext est un objet de ce type qui est initialisé juste après l'instanciation du handler. Le classe PageContext est une classe abstraite dont l'implémentation des spécifications doit fournir une adaptation concrète.

65 JSP 65 Sadok Ben Yahia L'accès aux variables implicites de la JSP Cette classe définit plusieurs méthodes : Méthodes Rôles JspWriter getOut() Permet un accès à la variable out de la JSP Exception getException() Permet un accès à la variable exception de la JSP Object getPage() Permet un accès à la variable page de la JSP ServletRequest getRequest() Permet un accès à la variable request de la JSP ServletResponse getResponse() Permet un accès à la variable response de la JSP ServletConfig getServletConfig() Permet un accès à l'instance de la variable de type ServletConfig ServletContext getServletContext() Permet un accès à l'instance de la variable de type ServletContext HttpSession getSession() Permet un accès à la session Object getAttribute(String) Renvoie l'objet associé au nom fourni en paramètre dans la portée de la page setAttribute(String, Object) Permet de placer dans la portée de la page un objet dont le nom est fourni en paramètre

66 JSP 66 Sadok Ben Yahia Les handlers de tags sans corps Pour définir le handler d'un tag personnalisé sans corps, il suffit de définir une classe qui implémente l'interface Tag ou qui hérite de la classe TagSupport. Il faut définir ou redéfinir les méthodes doStartTag() et endStartTag() La méthode doStartTag() est appelée à la rencontre du début du tag. Cette méthode doit contenir le code à exécuter dans ce cas et renvoyer la constante SKIP_BODY puisque le tag ne contient pas de corps

67 JSP 67 Sadok Ben Yahia Les handlers de tags avec corps Le cycle de vie d'un tel tag inclut le traitement du corps si la méthode doStartTag() renvoie la valeur EVAL_BODY_TAG. Dans ce cas, les opérations suivantes sont réalisées : –la méthode setBodyContent() est appelée –le contenu du corps est traité la méthode doAfterBody() est appelée. Si elle renvoie la valeur EVAL_BODY_TAG, le contenu du corps est de nouveau traité

68 JSP 68 Sadok Ben Yahia Les paramètres d'un tag Un tag peut avoir un ou plusieurs paramètres qui seront transmis à la classe via des attributs. Pour chacun des paramètres, il faut définir des getter et des setter en respectant les règles et conventions des Java beans. Il est impératif de définir un champ, un setter et éventuellement un accesseur pour chaque attribut. La JSP utilisera le setter pour fournir à l'objet la valeur de l'attribut. Au moment de la génération de la servlet par le moteur de JSP, celui ci vérifie par introspection la présence d'un setter pour l'attribut concerné

69 JSP 69 Sadok Ben Yahia Définition du fichier de description de la bibliothèque de tags (TLD) Le fichier de description de la bibliothèque de tags (tag library descriptor file) est un fichier au format XML qui décrit une bibliothèque de tags. Les informations qu'il contient concernent la bibliothèque de tags elle même et concerne aussi chacun des tags qui la compose. Ce fichier est utilisé par le conteneur Web lors de la compilation de la JSP pour remplacer le tag par du code Java. Ce fichier doit toujours avoir pour extension.tld. Il doit être placé dans le répertoire webinf du fichier war ou dans un de ces sous répertoires. (cest plus pratique de tous les regrouper dans un répertoire nommé par exemple tags ou tld). Comme tout fichier XML bien formé, le fichier TLD commence par un prologue

70 JSP 70 Sadok Ben Yahia Exemple Le tag racine du document XML est le tag. Ce tag peut contenir plusieurs tags qui définissent les caractéristiques générales de la bibliothèque

71 JSP 71 Sadok Ben Yahia Les attributs de la balise Nom Rôle tlibversion version de la bibliothèque jspversion version des spécifications JSP utilisée shortname nom court la bibliothèque (optionnel) uri URI qui identifie de façon unique la bibliothèque displayname nom de la bibliothèque description : description de la bibliothèque validator (optionnel) listener (optionnel) tag il en faut autant que de tags qui composent la bibliothèque

72 JSP 72 Sadok Ben Yahia Les tags fils de la balise tag Nom Rôle name nom du tag : il doit être unique dans la bibliothèque tagclass nom entièrement qualifié de la classe qui contient le handler du tag teiclass nom qualifié d'une classe fille de la classe javax.servlet.jsp.tagext.TagExtraInfo (optionnel) bodycontent : type du corps du tag. Les valeurs possibles sont : –JSP :( valeur par défaut) le corps du tag contient des tags JSP qui doivent être interprétés – tagdependent : l'interprétation du contenu du corps est faite par le tag – empty : le corps doit obligatoirement être vide displayname nom court du tag smallicon nom relatif par rapport à la bibliothèque d'un fichier gif ou jpeg contenant une icône. (optionnel) description description du tag (optionnel) attribute il en faut autant que d'attribut possédé par le tag (optionnel) example un exemple de l'utilisation du tag (optionnel)

73 JSP 73 Sadok Ben Yahia Pour chaque attribut du tag personnalisé, il faut utiliser un tag. Ce tag décrit un attribut d'un tag et peut contenir les tags suivants : Nom Description name :nom de l'attribut required :booléen qui indique la présence obligatoire de l'attribut Rtexprvalue : booléen qui indique si la page doit évaluer l'expression lors de l'exécution. Il faut donc mettre la valeur true, si la valeur de l'attribut est fournie avec un tag JSP d'expression

74 JSP 74 Sadok Ben Yahia Exemple testtaglib Bibliotheque de test des taglibs testtaglib1 perso.jmd.test.taglib.TestTaglib1 Tag qui affiche bonjour

75 JSP 75 Sadok Ben Yahia Utilisation d'une bibliothèque de tags Pour utiliser une bibliothèque de classe, il y a des actions à réaliser au niveau du code source de la JSP et au niveau de conteneur d'application web pour déployer la bibliothèque de tags. Pour chaque bibliothèque à utiliser dans une JSP, il faut la déclarer en utilisant la directive taglib avant son utilisation. Le plus simple est d'effectuer ces déclarations tout au début du code de la JSP. Cette directive possède deux attributs : –uri : l'URI de la bibliothèque telle que définie dans le fichier de description –prefix : un préfix qui servira d'espace de noms pour les tags de la bibliothèque dans la JSP Exemple :

76 JSP 76 Sadok Ben Yahia L'attribut uri Il permet de donner une identité au fichier de description de la bibliothèque de tags (TLD). La valeur fournie peut être : –directe (par exemple le nom du fichier avec son chemin relatif) –Exemple : –ou indirecte (concordance avec un nom logique défini dans un tag taglib du descripteur de déploiement de l'application web ) –Exemple : Dans ce dernier cas, il faut ajouter pour chaque bibliothèque un tag dans le fichier de description de déploiement de l'application/WEBINF/web.xml Exemple : /maTagLibTest /WEBINF/tld/testtaglib.tld

77 JSP 77 Sadok Ben Yahia L'appel d'un tag se fait en utilisant un tag dont le nom à la forme suivante : prefix:tag (le préfix est celui défini dans la directive taglib). Exemple : un tag sans corps : un tag avec corps... Le corps peut contenir du code HTML, du code JSP ou d'autre tag personnalisé. Le tag peut avoir des attributs si ceux ci ont été définis. La syntaxe pour les utiliser respecte la norme XML (la valeur de cet attribut peut être une donnée dynamiquement évaluée lors de l'exécution) : Exemple : un tag avec un paramètre "/>

78 Connexion aux bases de données Connexion à une base de données Mysql

79 JSP 79 Sadok Ben Yahia 79 Exemple d'un fichier de script # Création d'une table 'Film' CREATE TABLE Film (titre VARCHAR (30), annee INTEGER, nomMES VARCHAR (30), prenomMES VARCHAR (30), anneeNaiss INTEGER ) ;

80 JSP 80 Sadok Ben Yahia Mysql: Mise en oeuvre

81 JSP 81 Sadok Ben Yahia Création de la table Film Nom de la base

82 JSP 82 Sadok Ben Yahia Créer une classe de connexion multi-Use Linterface dun objet ASP package connectBD; import java.sql.*; public class ConnexionBD implements java.io.Serializable {Connection con = null; ResultSet rs = null ; Statement stmt = null ; public ConnexionBD () {} ; // public boolean driver() { try{ Class.forName(" com.mysql.jdbc.Driver "); return true ; } catch(Exception e){ System.out.println("Erreur lors du chargement du pilote :"+ e.getMessage()); return false ; } } 1/5

83 JSP 83 Sadok Ben Yahia Exemple de classe génériques : ConnectionBean Linterface dun objet ASP public boolean OpenConnexion() { try{ String url = " jdbc:mysql://localhost:3306/cinema "; con = DriverManager.getConnection(url,root",root"); return true ; } catch (Exception e) { System.out.println("Echec de l'ouverture de la connexion :"+ e.getMessage()); return false ; } 2/5

84 JSP 84 Sadok Ben Yahia Exemple de classe génériques : ConnectionBean Linterface dun objet ASP public boolean closeConnection() { try{ con.close(); return true ; } catch (Exception e){ System.out.println("Echec de la fermeture de la connexion :"+ e.getMessage()); return false ; } } // public ResultSet selectExec(String sql){ try{ stmt = con.createStatement(); rs = stmt.executeQuery(sql); } catch(Exception e){ System.out.println("Echec de l'exécution de la requête sql :"+e.getMessage()); } return rs ; } 3/5

85 JSP 85 Sadok Ben Yahia Exemple de classe génériques : ConnectionBean Linterface dun objet ASP public int updateExec(String sql) { int i = 0 ; try{ con.setAutoCommit(false); stmt = con.createStatement() ; i = stmt.executeUpdate(sql) ; con.commit(); } catch(Exception e) { System.out.println("Echec de l'exécution de la requête sql :"+e.getMessage()); } return i ; } 4/5

86 JSP 86 Sadok Ben Yahia Exemple de classe générique : ConnectionBean Linterface dun objet ASP public boolean closeResultSet(){ try{ rs.close(); return true ; } catch (Exception e){ System.out.println("Echec de la fermeture de l'objet ResultSet :"+ e.getMessage()); return false ; } } public boolean closeStatement() { try{ stmt.close(); return true ; } catch (Exception e){ System.out.println("Echec de la fermeture de l'objet Statement :"+ e.getMessage()); return false ; } 5/5

87 JSP 87 Sadok Ben Yahia Eclipse-: ajouter la classe de connexion dans un package Ajouter un nouveau package qui contient la classe de connexion

88 JSP 88 Sadok Ben Yahia Il ajouter le driver mysql!!!! Copier le fichier.jar contenant le driver sous le répertoire Web-INF/lib

89 JSP 89 Sadok Ben Yahia mnt: a vous de jouer… première cx avec une JSP <% Cx c = new Cx(); c.driver(); c.OpenConnexion(); ResultSet rs= c.selectExec("select * from film"); while(rs.next()){ out.print(rs.getString(1)+ " "); out.print(rs.getInt(2)+ " "); out.print(rs.getString(3)+ " "); }%>

90 JSP 90 Sadok Ben Yahia 90 Programmation MySQL/jsp : exemple avec formulaire

91 JSP 91 Sadok Ben Yahia 91 En association avec un formulaire Formulaire pour programme JSP Titre : Année début : Année fin : Comment combiner ces critères. ET OU ?

92 JSP 92 Sadok Ben Yahia Récupère les variables transmises films.jsp : Etape 1 - Récupère les variables transmises <% String titre= request.getParameter(titre); String anMin= request.getParameter(anMin); String anMax= request.getParameter(anMax); String comb= request.getParameter(comb); = (" Titre+ titre + anMin = + anMin + anMax= + anMax ); =("Combinaison logique + comb+ ); String requete; if (comb.equals(ET) requete = "SELECT * FROM Film " + "WHERE titre LIKE ++ titre+ + "AND annee BETWEEN + anMin+ and+ anMax"; else requete = "SELECT * FROM Film WHERE titre LIKE++ titre ++ "OR (annee BETWEEN+ anMin + and+ anMax+)";

93 JSP 93 Sadok Ben Yahia Il reste à exécuter la requête films.jsp Etape 2: Il reste à exécuter la requête <% Cx c = new Cx(); c.driver(); c.openConnexion(); ResultSet rs= c.selectExec( requete ); %> Titre Année Nom MES

94 JSP 94 Sadok Ben Yahia 94 Programmation MySQL/JSP : mise à jour dune base

95 JSP 95 Sadok Ben Yahia 95 Mises à jour de la base On utilise un formulaire de saisie, et on déclenche: –Un ordre INSERT pour des insertions –Un ordre UPDATE pour une modification –Un ordre DELETE pour une destruction

96 JSP 96 Sadok Ben Yahia Exemple: mise à jour de la table FilmSimple Titre : Année : Nom : Prénom : Année : Votre choix

97 JSP 97 Sadok Ben Yahia MajFilm.jsp : L'action depend du bouton choisi par l'utilisateur // Test du type de mise à jour effectuée ); if (request.getParameter(inserer)!=null) out.print ("Insertion du film+ request.getParameter(titre)); else if (request.getParameter(modifier)!=null) out.print ("Modification du film+ request.getParameter(titre)) else if request.getParameter(detruire)!=null) out.print(Suppression du film + request.getParameter(titre)); out.print (" ); // Affichage des données du formulaire out.print("Titre :+ request.getParameter(titre)+ annee:+ request.getParameter(annee)+ "; out.print("Mis en scène par+ request.getParameter(prenom) request.getParameter(nom)+, né en+ request.getParameter(anneeNaiss));

98 JSP 98 Sadok Ben Yahia Construction de la requête en fonction de l'action demandée String requete; if (request.getParameter(inserer)!=null) requete = "INSERT INTO Film (titre, annee, " + "prenomMES, nomMES, anneeNaiss) " + "VALUES (.....) "; if (request.getParameter(modifier)!=null) requete = "UPDATE Film SET annee=request.getParameter(annee), + "prenomMES = ++request.getParameter(prenom)+,..... WHERE titre = ++ request.getParameter(titre) +; if (request.getParameter(detruire)!=null) requete = "DELETE FROM Film WHERE titre=+ request.getParameter(titre) +; Cx c = new Cx(); c.driver(); c.openConnexion(); out.print (c.updateExec(requete)+ tuples ont été mis à jour) ; %>

99 Lapplication gestion medecins itinérants Gestion des sessions+ accès à une base de données

100 JSP 100 Sadok Ben Yahia La page Index.html Page dautentification Nom Prenom

101 JSP 101 Sadok Ben Yahia La page authentif.jsp <% Cx c = new Cx(); c.driver(); c.OpenConnexion(); String nom = request.getParameter("nom"); String prenom = request.getParameter("prenom"); if(request.getParameter("Medecin")!=null){ String sql = "select * from medecins where nom='"+nom+"' and prenom='"+prenom+"'"; ResultSet rst=c.selectExec(sql); if(rst.next()){ String id = rst.getString(1); HttpSession session = request.getSession(); session.setAttribute("nom",nom); session.setAttribute("prenom",prenom); session.setAttribute("id",id); response.sendRedirect("AccueilMed.jsp"); }} else{ if(nom.equals("admin")&&prenom.equals("admin")) response.sendRedirect("Admin.jsp"); }

102 JSP 102 Sadok Ben Yahia La page AcceuilMed.jsp page language="java" <% String nom = (String) request.getSession().getAttribute("nom"); String prenom = (String) request.getSession().getAttribute("prenom"); out.println("Bonjour « + nom+" "+prenom+ " vous êtes connecté"); %> Afficher la liste des rendez-vous Affecter un rendez-vous

103 JSP 103 Sadok Ben Yahia La page ListeRv.jsp <% Cx c = new Cx(); c.driver(); c.OpenConnexion(); String nom = (String) request.getSession().getAttribute("nom"); String prenom = (String) request.getSession().getAttribute("prenom"); out.println(nom+" "+prenom); int id = Integer.parseInt((String) request.getSession().getAttribute("id")); String sql = "select c.nom,c.prenom, e.hdebut,e.mdebut,e.hfin,e.mfin from clients c, creneaux e, rv s where s.id_creneaux=e.id and s.id_client=c.id and e.id_medecin='"+id+"'"; ResultSet rst =c.seclectExec(sql); %>

104 JSP 104 Sadok Ben Yahia suite Nom Prenom Heure debut Heure fin <% if(rst!=null) while(rst.next()) { %> <% }%>

105 JSP 105 Sadok Ben Yahia Conclusion Permettent d'étendre le comportement des serveurs Web avec des prog. Java Résumé des fonctionnalités + code embarqué dans un fichier HTML + portabilité, facilité d'écriture ( Java ) + gestion des applications requièrant un suivi entre plusieurs programmes ( persistance des données ) + JSP chargée et instanciée une seule fois + JSP exécutée avec des processus légers ( threads )

106 JSP 106 Sadok Ben Yahia Merci


Télécharger ppt "S. BEN YAHIA Faculté des Sciences de Tunis, Tunisie Connexion Web et Bases de Données : Technique."

Présentations similaires


Annonces Google