Les Servlets et JSP

8,668 views
8,587 views

Published on

Les Servlets
Cycle de vie d'une Servlet
Traitement des données de formulaires
Gestion de l'état avec cookies et sessions
Introduction aux JSP
Les balises JSP personnalisées
Règles de conception

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total views
8,668
On SlideShare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
533
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Les Servlets et JSP

  1. 1. Les Servlets et JSP Korteby Farouk Cours Java Avancée
  2. 2. Les Servlets et JSP <ul><li>Les Servlets </li></ul><ul><li>Cycle de vie d'une Servlet </li></ul><ul><li>Traitement des données de formulaires </li></ul><ul><li>Gestion de l'état avec cookies et sessions </li></ul><ul><li>Introduction aux JSP </li></ul><ul><li>Les balises JSP personnalisées </li></ul><ul><li>Règles de conception </li></ul><ul><li>Résume </li></ul>
  3. 3. Les Servlets Korteby Farouk Cours Java Avancée
  4. 4. Les Servlets : qu'est ce que c'est ? <ul><li>Avec JSP, c'est un des composants logiciels Web de l'architecture J2EE </li></ul><ul><li>C'est une classe Java compilée (.class ) qui s'exécute dans un conteneur de Servlets (moteur), hébergé par le serveur Web (côté serveur) </li></ul><ul><li>Permet d'étendre les fonctionnalités du serveur Web de manière portable et efficace </li></ul>
  5. 5. Les Servlets : qu'est ce que c'est ? <ul><li>Écrit en Java : technologie indépendante de la plate-forme et du serveur </li></ul><ul><li>S'apparente aux technologies traditionnelles CGI (PERL) mais : </li></ul><ul><ul><ul><li>– plus efficaces </li></ul></ul></ul><ul><ul><ul><li>– plus pratiques </li></ul></ul></ul><ul><ul><ul><li>– plus puissantes </li></ul></ul></ul><ul><ul><ul><li>– portables et gratuites </li></ul></ul></ul>
  6. 6. Les Servlets : à quoi ça sert ? <ul><li>Créer des pages dynamiques (HTML/XML) à ‘la volée’ </li></ul><ul><li>Effectuer des tâches de type CGI (traitements applicatifs) côté serveur </li></ul><ul><li>Écrire une application en Java dont l'interface utilisateur (en HTML) se situe dans le Browser, côté client </li></ul>
  7. 7. Les Servlets :comment ça marche ? <ul><li>Le serveur Web associe une ou plusieurs URLs à chaque servlet </li></ul><ul><li>Lorsque ces URLs sont appelées via une requête HTTP de l'utilisateur, côté client, le conteneur de servlet (moteur) déclenche la servlet qui s'exécute côté serveur </li></ul><ul><li>La servlet génère une réponse HTML/XML vers le client en utilisant la logique métier d'EJB ou en interrogeant directement la BD (via API JDBC) </li></ul>
  8. 8. Architecture WEB : principe
  9. 9. Architecture Servlets
  10. 10. API Servlet <ul><li>Les classes et les interfaces pour les Servlets sont définies dans 2 packages : </li></ul><ul><ul><ul><li>– javax.servlet </li></ul></ul></ul><ul><ul><ul><li>package générique indépendant des protocoles </li></ul></ul></ul><ul><ul><ul><li>– javax.servlet.http </li></ul></ul></ul><ul><ul><ul><li>spécifique à HTTP permet la gestion des sessions </li></ul></ul></ul><ul><li>Où les trouver : JSWDK </li></ul><ul><ul><ul><li>– java.sun.com/products/servlets </li></ul></ul></ul>
  11. 11. Les classes de l'API <ul><li>2 classes abstraites : </li></ul><ul><ul><li>– javax.servlet.GenericServlet </li></ul></ul><ul><ul><li>– javax.servlet.http.HttpServlet </li></ul></ul><ul><li>qui implémentent 2 interfaces abstraites : </li></ul><ul><ul><li>– javax.servlet.Servlet </li></ul></ul><ul><ul><li>– javax.servlet.ServletConfig </li></ul></ul>
  12. 12. Les classes de l'API
  13. 13. La classe GenericServlet <ul><li>javax.servlet.GenericServlet </li></ul><ul><ul><li>– définit une servlet indépendante des </li></ul></ul><ul><ul><li>protocoles </li></ul></ul><ul><ul><li>– une classe abstraite qui fournit une </li></ul></ul><ul><ul><li>implémentation de base de l'interface Servlet </li></ul></ul><ul><li>La méthode service() est le principal point </li></ul><ul><li>d'entrée </li></ul><ul><ul><li>– c'est une méthode abstraite qui doit être </li></ul></ul><ul><ul><li>implémentée par une classe dérivée </li></ul></ul>
  14. 14. Structure de base d'une servlet <ul><li>import javax.servlet.*; </li></ul><ul><li>public class first extends GenericServlet { </li></ul><ul><li>public void init ( ServletConfig config) </li></ul><ul><li>throws ServletException {…} </li></ul><ul><li>public void service ( ServletRequest req, </li></ul><ul><li>ServletResponse rep) </li></ul><ul><li>throws ServletException, IOException {…} </li></ul><ul><li>public void destroy () {…} </li></ul><ul><li>} </li></ul>
  15. 15. Communiquer avec le client <ul><li>2 arguments pour service() : </li></ul><ul><li>– javax.servlet.ServletRequest </li></ul><ul><ul><li>• encapsule la requête du client </li></ul></ul><ul><ul><li>• contient le flot d'entrée dans lequel lire les données en provenance du client </li></ul></ul><ul><li>– javax.servlet.ServletResponse </li></ul><ul><ul><li>• contient le flot de sortie pour répondre au client </li></ul></ul>
  16. 16. Développer des HttpServlet <ul><li>javax.servlet.http.HttpServlet </li></ul><ul><li>– dérive de GenericServlet et fournit une implémentation spécifique à HTTP de l'interface Servlet </li></ul>
  17. 17. La méthode service() de HttpServlet <ul><li>HttpServlet surcharge la méthode service() </li></ul><ul><li>– lit la méthode HTTP à partir de la requête </li></ul><ul><li>– transmet la requête à une méthode appropriée, destinée à la traiter Chaque méthode a une méthode &quot;handler« associée, définie dans une méthode HttpServlet:doXXX() </li></ul>
  18. 18. Méthodes de HttpServlet <ul><li>Une servlet est une sous-classe de HttpServlet dans laquelle on surcharge la ou les méthodes doXXX() appropriées : </li></ul><ul><ul><li>– requête GET, HEAD : doGet() </li></ul></ul><ul><ul><li>– requête POST : doPost() </li></ul></ul><ul><ul><li>– … </li></ul></ul><ul><ul><li>public void doXXX (HttpServletRequest req, </li></ul></ul><ul><ul><li>HttpServletResponse rep) </li></ul></ul>
  19. 19. Squelette d’une servlet Http <ul><li>import javax.servlet.*; </li></ul><ul><li>import javax.servlet.http.*; </li></ul><ul><li>public class SimpleServlet extends HttpServlet { </li></ul><ul><li>public void init(ServletConfig c) </li></ul><ul><li>throws ServletException {…} </li></ul><ul><li>public void doGet(HttpServletRequest req, </li></ul><ul><li>HttpServletResponse res) </li></ul><ul><li>throws ServletException, IOException {…} </li></ul><ul><li>public void destroy() {…} </li></ul><ul><li>public String getServletInfo() {…} </li></ul><ul><li>} </li></ul>
  20. 20. Développer des HttpServlet <ul><li>javax.servlet.http.HttpServlet </li></ul><ul><li>– dérive de GenericServlet et fournit une implémentation spécifique à HTTP de l'interface Servlet </li></ul>
  21. 21. Structure de base <ul><li>public class SimpleServlet extends HttpServlet { </li></ul><ul><li>public void doGet(HttpServletRequest req, </li></ul><ul><li>HttpServletResponse res) </li></ul><ul><li>throws ServletException, IOException </li></ul><ul><li>{ </li></ul><ul><li>// Lire la requête du client </li></ul><ul><li>// La traiter </li></ul><ul><li>// Répondre </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  22. 22. Lire la requête du client <ul><li>HttpServletRequest hérite de ServletRequest : </li></ul><ul><ul><li>– encapsule la requête HTTP et fournit des méthodes pour accéder à toutes les informations </li></ul></ul><ul><ul><li>– contient les informations sur l'environnement du serveur </li></ul></ul>
  23. 23. Les méthodes de HttpServletRequest <ul><li>String getMethod() </li></ul><ul><li>– retourne la méthode HTTP </li></ul><ul><li>String getHeader(String name) </li></ul><ul><li>– retourne le paramètre name de l'entête HTTP de la requête </li></ul><ul><li>String getRemoteHost() </li></ul><ul><li>– retourne le nom d'hôte du client </li></ul><ul><li>String getRemoteAddr() </li></ul><ul><li>– retourne l'adresse IP du client </li></ul>
  24. 24. Les méthodes de HttpServletRequest <ul><li>String getParameter(String name) </li></ul><ul><li>– retourne la valeur d'un champ de formulaire HTML </li></ul><ul><li>String getServerName() </li></ul><ul><li>– retourne le nom du serveur </li></ul><ul><li>String getServerPort() </li></ul><ul><li>– le port sur lequel le serveur écoute </li></ul>
  25. 25. Répondre au serveur <ul><li>HttpServletResponse hérite de ServletResponse : </li></ul><ul><li>– utilisé pour construire un message de réponse HTTP renvoyé au navigateur client </li></ul><ul><li>– contient les méthodes nécessaires pour définir : type de contenu, en-tête et code de retour </li></ul><ul><li>– contient un flot de sortie pour envoyer des données (HTML ou autre) au navigateur </li></ul>
  26. 26. Les méthodes de HttpServletResponse <ul><li>void setStatus(int statusCode) </li></ul><ul><li>– définit le code de retour de la réponse </li></ul><ul><li>void setHeader(String name,String value) </li></ul><ul><li>– définit la valeur de l'en-tête name </li></ul><ul><li>void setContentType(String type) </li></ul><ul><li>– définit le type de contenu MIME </li></ul>
  27. 27. Les méthodes de HttpServletResponse <ul><li>PrintWriter getWriter() </li></ul><ul><li>– pour envoyer des données texte au client </li></ul><ul><li>ServletOutputStream getOutputStream() </li></ul><ul><li>– flot pour envoyer des données binaires </li></ul><ul><li>void sendRedirect(String url) </li></ul><ul><li>– redirige le navigateur vers l'URL </li></ul>
  28. 28. Un exemple simple ... <ul><li>package hall; </li></ul><ul><li>import java.io.*; </li></ul><ul><li>import javax.servlet.*; </li></ul><ul><li>import javax.servlet.http.*; </li></ul><ul><li>public class HelloWorld extends HttpServlet { </li></ul><ul><li>public void doGet(HttpServletRequest request, </li></ul><ul><li>HttpServletResponse response) </li></ul><ul><li>throws ServletException, IOException { </li></ul><ul><li>PrintWriter out = response.getWriter(); </li></ul><ul><li>out.println(&quot;Hello World&quot;); </li></ul><ul><li>out.flush(); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  29. 29. Cycle de vie d'une Servlet Korteby Farouk Cours Java Avancée
  30. 30. Cycle de vie d'une Servlet <ul><li>Méthodes du cycle de vie </li></ul><ul><li>La classe javax.servlet.Servlet définit </li></ul><ul><li>les méthodes qui permettent de contrôler le cycle de vie d'une servlet : </li></ul><ul><li>– void init() </li></ul><ul><li>– void service() </li></ul><ul><li>– void destroy() </li></ul><ul><li>Elles sont héritées par la servlet et doivent être redéfinies </li></ul>
  31. 31. Cycle de vie d'une Servlet <ul><li>import javax.servlet.*; </li></ul><ul><li>import javax.servlet.http.*; </li></ul><ul><li>public class SimpleServlet extends HttpServlet { </li></ul><ul><li>public void init(ServletConfig c) </li></ul><ul><li>throws ServletException {…} </li></ul><ul><li>public void doXXX(HttpServletRequest req, </li></ul><ul><li>HttpServletResponse res) </li></ul><ul><li>throws ServletException, IOException {…} </li></ul><ul><li>public void destroy() {…} </li></ul><ul><li>} </li></ul>
  32. 32. Cycle de vie d'une Servlet <ul><li>void init() : </li></ul><ul><li>– une fois créée, la servlet est initialisée avec cette méthode : elle n'est appelée qu'une seule fois par le serveur au chargement initial. </li></ul><ul><li>– Similaire à un constructeur </li></ul><ul><li>– on peut y placer (par exemple) des </li></ul><ul><li>connexions réseaux ou à une BD </li></ul>
  33. 33. Cycle de vie d'une Servlet <ul><li>void service() : </li></ul><ul><li>– appelée automatiquement par le serveur à chaque requête cliente void </li></ul><ul><li>void destroy() : </li></ul><ul><li>– appelée qu'une seule fois quand la servlet est déchargée par le serveur et lorsque le serveur est arrêté. </li></ul><ul><li>– on y place la fermeture de connexions réseaux ou BD (souvent allouées par init() ) </li></ul>
  34. 34. Cycle de vie d'une Servlet
  35. 35. Servlets et concurrence <ul><li>- Une seule servlet gère les requêtes de plusieurs clients Un thread est généré à chaque requête du client </li></ul><ul><li>– conséquences : les attributs de la servlet </li></ul><ul><li>sont partagés, les variables des méthodes sont locales </li></ul><ul><li>Pour des portions de code critique, utiliser synchronized </li></ul>
  36. 36. Traitement des données de formulaires Korteby Farouk Cours Java Avancée
  37. 37. Traitement des données de formulaires <ul><li>Les formulaires HTML: </li></ul><ul><li>Permettent aux utilisateurs de saisir des données dans une interface graphique dans le Navigateur </li></ul><ul><li>Mécanisme intégré pour envoyer des données au serveur WEB </li></ul>
  38. 38. Traitement des données de formulaires <ul><li><FORM> : pour définir un formulaire </li></ul><ul><li><INPUT> : pour définir une interface : </li></ul><ul><li>– text, password, checkbox, radio, </li></ul><ul><li>submit, reset </li></ul><ul><li><TEXTAREA> : zone de texte sur plusieurs lignes </li></ul><ul><li><SELECT> : liste déroulante </li></ul>
  39. 39. Traitement des données de formulaires <ul><li>Envoyer les données du formulaire </li></ul><ul><li>Attributs de la balise <FORM> </li></ul><ul><li>– ACTION : l'URL où envoyer les données </li></ul><ul><li>– METHOD : la méthode HTTP (GET / POST) </li></ul><ul><li>Les données sont envoyées quand l'utilisateur clique sur un bouton de type submit </li></ul>
  40. 40. Traitement des données de formulaires <ul><li>Exemple de formulaire </li></ul><ul><li><FORM </li></ul><ul><li>METHOD=&quot;POST&quot; </li></ul><ul><li>ACTION=&quot;http://host/servlet/demandeServlet&quot; </li></ul><ul><li>> </li></ul><ul><li>Nom : </li></ul><ul><li><INPUT type=&quot;text&quot; name=&quot;Nom&quot; /> </li></ul><ul><li><BR> </li></ul><ul><li><INPUT type=&quot;submit&quot; value=&quot;Envoyer&quot; /> </li></ul><ul><li></FORM> </li></ul>
  41. 41. Traitement des données de formulaires <ul><li>Les méthodes GET et POST </li></ul><ul><li>GET : les champs du formulaire sont ajoutés à l'URL de l'attribut ACTION sous une forme </li></ul><ul><li>nom=valeur </li></ul><ul><li>URL?nom1=val1&nom2=val2&... </li></ul><ul><li>POST : les données sont passées dans le corps </li></ul><ul><li>du message HTTP </li></ul><ul><li>– convient pour l'envoi de données binaires </li></ul>
  42. 42. Traitement des données de formulaires <ul><li>Lire les données dans une servlet La méthode de HttpServletRequest : </li></ul><ul><li>public String getParameter(String name) </li></ul><ul><li>Dans le formulaire : </li></ul><ul><li><INPUT type=&quot;text&quot; name=&quot;nom&quot; /> </li></ul><ul><li>Dans la méthode doXXX() : </li></ul><ul><li>String n = req.getParameter(&quot;nom&quot;) </li></ul>
  43. 43. Traitement des données de formulaires <ul><li>public class ShowParameters extends HttpServlet </li></ul><ul><li>{ </li></ul><ul><li>public void doGet(HttpServletRequest req,...) { </li></ul><ul><li>out.println(req.getParameter(“param1”)); </li></ul><ul><li>Enumeration paramNames = req.getParameterNames(); </li></ul><ul><li>String[] paramValues = req.getParameterValues(paramNames); </li></ul><ul><li>} </li></ul><ul><li>} </li></ul>
  44. 44. Gestion de l'état avec cookies et sessions Korteby Farouk Cours Java Avancée
  45. 45. Gestion de l'état avec cookies et sessions <ul><li>HTTP gère les paires requête/réponse </li></ul><ul><li>– ouverture, requête, réponse, fermeture </li></ul><ul><li>HTTP : protocole sans états </li></ul><ul><li>– aucun historique des différentes requêtes </li></ul><ul><li>n'est conservé </li></ul><ul><li>– les requêtes sont totalement indépendantes </li></ul><ul><li>les unes des autres </li></ul>
  46. 46. Gestion de l'état avec cookies et sessions <ul><li>Une application WEB a besoin de savoir : </li></ul><ul><li>– quel utilisateur a émis la requête courante </li></ul><ul><li>– les requêtes déjà émises par l'utilisateur </li></ul><ul><li>– l'état général de l'application : </li></ul><ul><li>• nombre de visites, nombres de produits vendus, </li></ul><ul><li>– Il faut rajouter à HTTP un mécanisme de </li></ul><ul><li>gestion des états </li></ul>
  47. 47. Gestion de l'état avec cookies et sessions <ul><li>Qu'est ce qu'un cookie ? </li></ul><ul><li>Petit fragment d'information textuelle échangé entre le serveur WEB et le Navigateur </li></ul><ul><li>– collection de paires nom/valeur </li></ul><ul><li>– chargés dans la mémoire du Navigateur </li></ul><ul><li>– les cookies permanents sont aussi sauvegardés dans un fichier texte sur le client </li></ul><ul><li>– Ils font partie de l'en-tête HTTP </li></ul>
  48. 48. Gestion de l'état avec cookies et sessions <ul><li>Qu'est ce qu'un cookie ? </li></ul><ul><li>Crées à l'origine par Netscape </li></ul><ul><li>– maintenant RFC 2109 </li></ul><ul><li>Utilisés couramment pour mémoriser les préférences de l'utilisateur ou même pour l'identifier </li></ul>
  49. 49. Gestion de l'état avec cookies et sessions <ul><li>Anatomie d'un cookie </li></ul><ul><li>Partie Description </li></ul><ul><li>Name Identité du cookie </li></ul><ul><li>Value Valeur du cookie </li></ul><ul><li>Domain Nom du domaine qui l'a défini </li></ul><ul><li>Path Information sur le chemin </li></ul><ul><li>Max Age Temps d'expiration du cookie </li></ul><ul><li>Secure Vrai si cookie transmis avec SSL </li></ul>
  50. 50. Gestion de l'état avec cookies et sessions <ul><li>Cookie et sécurité ? </li></ul><ul><li>Jamais interprété ou exécuté : pas de virus </li></ul><ul><li>Un cookie est limité à 4KB et les navigateurs </li></ul><ul><li>se limitent à 300 cookies (20 par site) : pas de </li></ul><ul><li>surcharge de disque </li></ul><ul><li>Bien pour rendre privées des données non </li></ul><ul><li>sensibles </li></ul><ul><li>– nom, adresse, … mais pas No CB ! </li></ul><ul><li>… mais ne constitue pas un traitement sérieux </li></ul><ul><li>de la sécurité </li></ul>
  51. 51. Gestion de l'état avec cookies et sessions <ul><li>Depuis API 2.1, pris en charge par : </li></ul><ul><li>javax.servlet.http.Cookie </li></ul><ul><li>Cette classe construit des cookies avec des paires nom/valeur : </li></ul><ul><li>public Cookie( String name, String value) </li></ul>
  52. 52. Gestion de l'état avec cookies et sessions <ul><li>Méthodes de Cookie: </li></ul><ul><li>Pour les fixer des attributs supplémentaires </li></ul><ul><li>void setValue(String val) </li></ul><ul><li>définit la valeur du cookie </li></ul><ul><li>void setMaxAge(int expSec) </li></ul><ul><li>l’age de la cookie en nombre de secondes </li></ul><ul><li>par défaut </li></ul><ul><li>– 1 (expire quand on ferme le navigateur) </li></ul><ul><li>0 supprime le cookie </li></ul>
  53. 53. Gestion de l'état avec cookies et sessions <ul><li>Méthodes de Cookie (suite) </li></ul><ul><li>void setPath(String path) </li></ul><ul><li>définit le chemin </li></ul><ul><li>void setSecure(boolean flag) </li></ul><ul><li>true si SSL, false par défaut </li></ul><ul><li>void setDomain(String domaine) </li></ul><ul><li>définit le domaine </li></ul>
  54. 54. Gestion de l'état avec cookies et sessions <ul><li>Envoi des cookies </li></ul><ul><li>Méthode addCookie() de la classe HttpServletResponse </li></ul><ul><li>public void doGet(HttpServletRequest req, </li></ul><ul><li>HttpServletResponse rep) { </li></ul><ul><li>Cookie c = new Cookie (&quot;nom&quot;, &quot;toto&quot;); </li></ul><ul><li>c.setMaxAge(365*24*60*60); // 1 an </li></ul><ul><li>rep.addCookie( c ); </li></ul><ul><li>rep.setContentType(&quot;text/html&quot;); … </li></ul><ul><li>} </li></ul>
  55. 55. Gestion de l'état avec cookies et sessions <ul><li>Lecture des cookies </li></ul><ul><li>Le navigateur envoie automatiquement les cookies qui correspondent à domain et path </li></ul><ul><li>Une servlet peut récupérer les cookies envoyés précédemment au navigateur </li></ul><ul><li>– méthode getCookies() de HttpServletRequest </li></ul>
  56. 56. Gestion de l'état avec cookies et sessions <ul><li>Lecture des cookies </li></ul><ul><li>Cookie [ ] cookies = request.getCookies(); </li></ul><ul><li>String nom = getCookieValue(cookies, &quot;nom&quot;, &quot;non trouvé&quot;); </li></ul><ul><li>... </li></ul><ul><li>public static String getCookieValue( Cookie [] cookies, </li></ul><ul><li>String cookieName, String defaultValue) { </li></ul><ul><li>for(int i=0; i < cookies.length; i++) { </li></ul><ul><li>Cookie cookie = cookies[i]; </li></ul><ul><li>if(cookieName.equals(cookie.getName()) </li></ul><ul><li>return(cookie.getValue()); </li></ul><ul><li>} </li></ul><ul><li>return(defaultValue); </li></ul><ul><li>} </li></ul>
  57. 57. Gestion de l'état avec cookies et sessions <ul><li>Les sessions </li></ul><ul><li>Une session peut se définir : </li></ul><ul><li>– une série d'interactions reliées entre un navigateur et un serveur WEB </li></ul><ul><li>– englobe plusieurs requêtes HTTP sur une période donnée </li></ul><ul><li>– Utilisées pour mémoriser les actions (requêtes </li></ul><ul><li>HTTP) d'un utilisateur unique au cours du temps </li></ul><ul><li>– exple : opérations bancaires </li></ul>
  58. 58. Gestion de l'état avec cookies et sessions <ul><li>Techniques de mémorisation </li></ul><ul><li>Pour échanger les données d'identification de la session dans chaque requête : </li></ul><ul><li>– réécriture d'URL </li></ul><ul><li>– champ de formulaire caché (&quot;hidden&quot;) </li></ul><ul><li>– cookies </li></ul><ul><li>– utilisation des sessions avec les HttpSession </li></ul>
  59. 59. Gestion de l'état avec cookies et sessions <ul><li>Réécriture d'URL Principe : </li></ul><ul><li>– ajouter dans la chaîne de requête de la servlet des informations supplémentaires identifiant la session </li></ul><ul><li><a href=&quot;http://leo.inria.fr/servlet/foo?uid=itey&quot;> </li></ul><ul><li>Ac heter</a> </li></ul><ul><li>– l'ID utilisateur est transmis en même temps que la requête; il est accédé par chaque servlet mentionnée qui récupère les informations persistantes (BD, fichiers) à partir de cet ID </li></ul>
  60. 60. Gestion de l'état avec cookies et sessions <ul><li>Réécriture d'URL </li></ul><ul><li>Limitations : </li></ul><ul><li>– données volumineuses, </li></ul><ul><li>– caractères autorisés, </li></ul><ul><li>– longueur URL, </li></ul><ul><li>– données visibles (sécurité) </li></ul>
  61. 61. Gestion de l'état avec cookies et sessions <ul><li>Champs de formulaires cachés </li></ul><ul><li>Principe : </li></ul><ul><li>– on cache les données de session dans des champs &quot;hidden&quot; : </li></ul><ul><li><INPUT TYPE=&quot;HIDDEN&quot; NAME=&quot;uid“ VALUE=itey&quot;> </li></ul><ul><li>Limitations : </li></ul><ul><li>– idem la &quot;réécriture d'URL&quot; sauf pour la </li></ul><ul><li>sécurité (utilisation de POST) </li></ul>
  62. 62. Gestion de l'état avec cookies et sessions <ul><li>L'interface HttpSession </li></ul><ul><li>Les objets HttpSession mémorisent les données de chaque utilisateur fonctionne comme une table de &quot;hachage&quot; stockée sur le serveur </li></ul><ul><li>A chaque ID de session est associé, via la table de hachage, l'ensemble des informations </li></ul>
  63. 63. Gestion de l'état avec cookies et sessions <ul><li>Identification des sessions </li></ul><ul><li>2 façons possibles d'échanger l'ID de session : </li></ul><ul><li>– par défaut : les cookies (de session : non permanents) </li></ul><ul><li>– ajouter l'ID de session à l'URL (réécriture d'URL) </li></ul><ul><li>L'implémentation est dépendante du moteur de Servlets </li></ul>
  64. 64. Gestion de l'état avec cookies et sessions <ul><li>Obtenir l'objet de session </li></ul><ul><li>2 méthodes de HttpServletRequest : </li></ul><ul><li>– HttpSession getSession() : </li></ul><ul><li>retourne la session courante, si elle n'existe </li></ul><ul><li>pas, elle est créée </li></ul><ul><li>– HttpSession getSession(boolean create) : </li></ul><ul><li>idem sauf que la session n'est créée que si </li></ul><ul><li>create = true, sinon retourne null </li></ul>
  65. 65. Gestion de l'état avec cookies et sessions <ul><li>Mémoriser et extraire les données </li></ul><ul><li>Une fois la session obtenue, on peut mémoriser et extraire les données grâce aux méthodes de HttpSession : </li></ul><ul><li>void putValue(String name, Object Val) </li></ul><ul><li>Object getValue(String name) </li></ul>
  66. 66. Gestion de l'état avec cookies et sessions <ul><li>Mémoriser et extraire les données </li></ul><ul><li>HttpSession session = request.getSession(); </li></ul><ul><li>session.putValue( &quot;table&quot;, newArrayList()); </li></ul><ul><li>ArrayList tab = (ArrayList)session.getValue(&quot;table&quot;); </li></ul>
  67. 67. Gestion de l'état avec cookies et sessions <ul><li>Autres méthodes de HttpSession </li></ul><ul><li>boolean isNew() : </li></ul><ul><li>retourne true si nouvelle session </li></ul><ul><li>void invalidate() : </li></ul><ul><li>invalide la session et supprime les associations nom / valeur </li></ul>
  68. 68. Gestion de l'état avec cookies et sessions <ul><li>Autres méthodes de HttpSession </li></ul><ul><li>Les moteurs de servlets gèrent un timeout de durée de vie des sessions : </li></ul><ul><li>int getMaxInactiveInterval() : </li></ul><ul><li>retourne l'intervalle maximal d'inactivité en </li></ul><ul><li>secondes </li></ul><ul><li>void setMaxInactiveInterval : </li></ul><ul><li>définit l'intervalle maximal d'inactivité en </li></ul><ul><li>secondes </li></ul>
  69. 69. Gestion de l'état avec cookies et sessions <ul><li>Autres méthodes de HttpRequest </li></ul><ul><li>String getRequestedSessionId() : </li></ul><ul><li>retourne l'ID de session </li></ul><ul><li>boolean isRequestedSessionIdFromCookie() </li></ul><ul><li>retourne true si l'ID de session a été passé </li></ul><ul><li>dans un cookie </li></ul><ul><li>boolean isRequestedSessionIdFromURL() </li></ul><ul><li>retourne true si l'ID des session a été passé </li></ul><ul><li>dans l'URL </li></ul>
  70. 70. Gestion de l'état avec cookies et sessions <ul><li>Utiliser HttpSession sans cookies </li></ul><ul><li>L'implémentation par défaut de HttpSession utilise les cookies </li></ul><ul><li>– si les cookies ne sont pas autorisés par le navigateur, la mémorisation des sessions ne fonctionne pas </li></ul><ul><li>Autre solution : la réécriture d'URL </li></ul><ul><li>– ajouter l'ID de session à la fin de l'URL </li></ul><ul><li>– la réécriture d'URL doit être activée sur le serveur </li></ul>
  71. 71. Gestion de l'état avec cookies et sessions <ul><li>Réécriture d'URL </li></ul><ul><li>Méthodes de HttpServletRequest : </li></ul><ul><li>String encodeURL(String url) </li></ul><ul><li>encode l'URL en ajoutant l'ID de session si les </li></ul><ul><li>cookies sont désactivés </li></ul><ul><li>String encodeRedirectURL(String url) </li></ul><ul><li>encode l'URL avant de rediriger le Navigateur </li></ul>
  72. 72. Introduction aux JSP Korteby Farouk Cours Java Avancée
  73. 73. Introduction aux JSP <ul><li>JSP : Java Server Page </li></ul><ul><li>La plupart des applications Web produisent des pages HTML dynamiquement en modifiant uniquement les champs de données et pas la structure de base de la page. </li></ul><ul><li>Les JSP sont la technologie la plus appropriée </li></ul><ul><li>pour ce type de contenu. </li></ul>
  74. 74. Introduction aux JSP <ul><li>Une page JSP contient un modèle de document statique et des balises spécifiques pour inclure du texte ou exécuter une partie de la logique applicative. </li></ul><ul><li>Le contenu statique est servi comme du HTML normal. </li></ul>
  75. 75. Introduction aux JSP <ul><li>Une JSP est un fichier texte ( .jsp ) contenant du </li></ul><ul><li>code HTML et des fragments de code Java </li></ul><ul><li>contenus dans des balises spécifiques, exécutés </li></ul><ul><li>sur le serveur WEB </li></ul><ul><li>Versions 1.0 et maintenant 1.2 </li></ul><ul><li>En fait, le fichier JSP est traduit en servlet qui est </li></ul><ul><li>compilée, puis instanciée lors de son invocation </li></ul><ul><li>via une URL </li></ul>
  76. 76. Introduction aux JSP
  77. 77. Introduction aux JSP <ul><li>Les balises JSP </li></ul><ul><li>3 types : </li></ul><ul><li>– des directives : instructions qui contrôlent le comportement du compilateur de pages </li></ul><ul><li>JSP, et qui sont donc évaluées avant la </li></ul><ul><li>compilation, </li></ul><ul><li>– des éléments de scripts (scriptlets) : blocs </li></ul><ul><li>d’instructions Java inclus dans la page JSP </li></ul><ul><li>entre des délimiteurs <% et %>. </li></ul>
  78. 78. Introduction aux JSP <ul><li>Les balises JSP (suite) </li></ul><ul><li>– des balises personnalisées (custom tags ou </li></ul><ul><li>custom actions): </li></ul><ul><li>elles sont définies par le programmeur et génèrent du contenu dynamique lorsque la page est demandée. </li></ul>
  79. 79. Introduction aux JSP <ul><li>Un exemple simple de JSP </li></ul><ul><li><html><head><title>Un exemple de page JSP</title></head><body> </li></ul><ul><li><!-- définit les informations globales a la page --> </li></ul><ul><li><%@page language=&quot;java&quot; %> </li></ul><ul><li><!-- Déclare la variable c --> </li></ul><ul><li><%! char c = 0; %> </li></ul><ul><li><!-- Scriplet (code java) %> </li></ul><ul><li><% for(int i = 0; i < 26; i++){ </li></ul><ul><li>for(int j = 0; j < 26; j++){ </li></ul><ul><li>c = (char)(0x41 + (26 - i + j)%26); </li></ul><ul><li>%> </li></ul><ul><li><%= c %> </li></ul><ul><li><% } %> </li></ul><ul><li><br> </li></ul><ul><li><% } %> </li></ul><ul><li></body></html> </li></ul>
  80. 80. Introduction aux JSP
  81. 81. Introduction aux JSP <ul><li>Les scriptlets : <% … %> </li></ul><ul><li>Contient du code JAVA </li></ul><ul><li>– tout code JAVA valide </li></ul><ul><li>– Objet out pour produire de la sortie HTML, </li></ul><ul><li>objets request et response </li></ul><ul><li>Se transforme dans la méthode jspService() de la servlet: </li></ul><ul><li>– les variables sont locales à la méthode </li></ul><ul><li>– les blocs de code s'insèrent dans la servlet </li></ul>
  82. 82. Introduction aux JSP <ul><li>Les scriptlets : exemple </li></ul><ul><li><% </li></ul><ul><li>String[ ] noms = {&quot;titi&quot;, &quot;toto&quot;}; </li></ul><ul><li>for(int i = 0; i < noms.length; i++){ </li></ul><ul><li>out.println(noms[i]); </li></ul><ul><li>} </li></ul><ul><li>%> </li></ul>
  83. 83. Introduction aux JSP <ul><li>Les expressions : <%= … %> </li></ul><ul><li>Pour évaluer une expression ou un objet Java et renvoyer sa valeur : </li></ul><ul><li>– retourne une version String de l'expression </li></ul><ul><li>– raccourci pour <% out.println(…); %> </li></ul><ul><li>Se transforme en out.println(…) dans la méthode jspService(…) de la servlet </li></ul>
  84. 84. Introduction aux JSP <ul><li><% </li></ul><ul><li>String[ ] noms = {&quot;titi&quot;, &quot;toto&quot;}; </li></ul><ul><li>for(int i = 0; i < noms.length; i++){ </li></ul><ul><li>%> </li></ul><ul><li>Le nom <%= i %> ième nom est </li></ul><ul><li><%= noms[i] %> </li></ul><ul><li><% </li></ul><ul><li>} </li></ul><ul><li>%> </li></ul>
  85. 85. Introduction aux JSP <ul><li>Les déclarations : <%! … %> </li></ul><ul><li>Pour déclarer des méthodes à l'échelle de la page (méthodes de la servlet générée) </li></ul><ul><li>– les méthodes ne sont exécutées que si elles sont appelées explicitement </li></ul><ul><li>– on peut aussi déclarer des attributs </li></ul><ul><li>Se transforme en déclarations de champs et méthodes au niveau de la servlet </li></ul>
  86. 86. Introduction aux JSP <ul><li><%! </li></ul><ul><li>private int accessCount = 0; </li></ul><ul><li>private int incrementCount() { </li></ul><ul><li>return accessCount++; </li></ul><ul><li>} </li></ul><ul><li>%> </li></ul><ul><li>… </li></ul><ul><li><H2>Nombre et liste des articles</H2> </li></ul><ul><li>Nombre d'articles : <%= incrementCount() %> </li></ul>
  87. 87. Introduction aux JSP <ul><li>Directives </li></ul><ul><li><%@ directive attribut1=&quot;valeur&quot; </li></ul><ul><li>attribut2=&quot;valeur&quot;... %> </li></ul><ul><li>2 directives possibles (jsp1.1) : </li></ul><ul><li>– page : informations relatives à la page </li></ul><ul><li>– include : fichiers à inclure littéralement </li></ul>
  88. 88. Introduction aux JSP <ul><li>Valeurs possibles : </li></ul><ul><li>– <%@ page language=&quot;java&quot; </li></ul><ul><li>– <%@ page import=&quot;java.util.*, java.net.*&quot; %> </li></ul><ul><li>– <%@ page contentType=&quot;text/plain&quot; %> </li></ul><ul><li>– <%@ page session=&quot;true|false &quot; %> </li></ul><ul><li>– <%@ page errorPage=&quot;pathToErrorPage&quot; %> </li></ul><ul><li>– <%@ page isErrorPage=&quot;true|false&quot; %> </li></ul><ul><li>– <%@ page … </li></ul>
  89. 89. Introduction aux JSP <ul><li>La directive : <%@include … %> </li></ul><ul><li>Valeurs possibles : </li></ul><ul><li>– <%@ include file=&quot;chemin relatif du fichier&quot; %> </li></ul><ul><li>– pour se référer au home dir du serveur Web : </li></ul><ul><li><%@ include file=&quot;/toto.html&quot; %>Interprété littéralement, le fichier peut être </li></ul><ul><li>– HTML, scripting elements, directives, </li></ul><ul><li>actions, ... </li></ul><ul><li>L'insertion se fait au moment de la traduction </li></ul><ul><li>de la page... </li></ul>
  90. 90. Introduction aux JSP <ul><li>Variables prédéfinies </li></ul><ul><li>Ou &quot;objets implicites&quot;, ils sont accessibles dans </li></ul><ul><li>les balises JSP : </li></ul><ul><li>– request : le HttpServletRequest </li></ul><ul><li>– response : le HttpServletResponse </li></ul><ul><li>– session : le HttpSession </li></ul><ul><li>– out : flot de sortie (idem response.getWriter()) </li></ul><ul><li>– application : le ServletContext (idem </li></ul><ul><li>getServletConfig().getContext() ) </li></ul><ul><li>– config, pageContext, page... : peu utiles </li></ul>
  91. 91. Introduction aux JSP <ul><li>Cookies et Sessions fonctionnent de la même </li></ul><ul><li>façon que dans l'API Servlet Cookie : </li></ul><ul><li><% </li></ul><ul><li>Cookie c = new Cookie(&quot;Sport&quot;, &quot;Foot&quot;); </li></ul><ul><li>response.addCookie(c); </li></ul><ul><li>%> </li></ul>
  92. 92. Introduction aux JSP <ul><li>Gestion des sessions avec les JSP Sessions : </li></ul><ul><li>– toutes les pages JSP disposent </li></ul><ul><li>automatiquement d'un objet session </li></ul><ul><li><% </li></ul><ul><li>String val = (String)session.getValue(&quot;Sport&quot;); </li></ul><ul><li>%> </li></ul>
  93. 93. Balises JSP personnalisées Korteby Farouk Cours Java Avancée
  94. 94. Balises JSP personnalisées <ul><li>La technologie JSP permet au programmeur de </li></ul><ul><li>définir leurs propres bibliothèques de balises; ce </li></ul><ul><li>type de balises est remplacé par du contenu </li></ul><ul><li>dynamique lorsque la page est envoyée au client. </li></ul><ul><li>Le contenu dynamique est crée par un gestionnaire de balises, que le programmeur crée et distribue dans un fichier archive de Bibliothèque de balises. </li></ul>
  95. 95. Balises JSP personnalisées <ul><li>Le programmeur définit la syntaxe pour chaque balise et implémente le comportement à effectuer pour chaque balise dans la classe de gestion des balises (tag handler class). </li></ul><ul><li>Les auteurs de pages peuvent ensuite importer et </li></ul><ul><li>utiliser les balises définies dans les bibliothèques </li></ul><ul><li>de balises comme s'ils utilisaient des balises </li></ul><ul><li>traditionnelles. </li></ul>
  96. 96. Balises JSP personnalisées <ul><li>Les balises personnalisées : </li></ul><ul><li>– sont réutilisables </li></ul><ul><li>– permettent de définir des services de haut niveau et sont portables </li></ul><ul><li>– facilitent la maintenance d'une application </li></ul><ul><ul><li>pas de répétition du code de pages en pages </li></ul></ul><ul><ul><li>Modification du code en un seul endroit </li></ul></ul>
  97. 97. Balises JSP personnalisées <ul><li>– facilitent la lecture et la manipulation des pages </li></ul><ul><li>plus simples à lire que des bouts de scripts </li></ul><ul><li>– fournissent un moyen simple pour utiliser la logique métier </li></ul><ul><li>– permettent une séparation claire entre présentation des données et logique métier </li></ul><ul><ul><li>maintenance plus simple </li></ul></ul><ul><ul><li>montre plus clairement l'utilité de chaque composant </li></ul></ul><ul><ul><li>permet aux programmeurs et auteurs de pages de travailler plus indépendamment </li></ul></ul>
  98. 98. Balises JSP personnalisées <ul><li>Les bibliothèques de balises standards sont des jeux de balises qui fournissent un jeu de fonctionnalités basiques pour les pages JSP : </li></ul><ul><li>– inclusion de ressources Web, chaînage de requête (request forwarding), </li></ul><ul><li>– logique conditionnelle, </li></ul><ul><li>– itérations sur des collections d'objets, </li></ul><ul><li>– transformations XSLT, </li></ul><ul><li>– internationalisation, </li></ul><ul><li>– gestion des informations d'état, </li></ul><ul><li>– formulaires HTML. </li></ul>
  99. 99. Balises JSP personnalisées <ul><li>Certaines sociétés ont produit leurs propres </li></ul><ul><li>bibliothèques de balises, profondément intégrées </li></ul><ul><li>dans leurs outils de développement et J2EE. </li></ul><ul><li>D'autres organisations produisent des </li></ul><ul><li>bibliothèques de balises génériques pour les </li></ul><ul><li>applications J2EE. </li></ul><ul><li>Exemple : Apache Taglibs (bibliothèque Open </li></ul><ul><li>source de balises personnalisées). </li></ul>
  100. 100. Balises JSP personnalisées <ul><li>Les librairies standards fournissent souvent la plupart des fonctionnalités requises pour le développement de pages JSP et sont testées et optimisées par la communauté des développeurs. </li></ul><ul><li>Utiliser une librairie de balises standards de haute qualité permet ainsi de gagner un précieux temps en développement. </li></ul>
  101. 101. Règles de conception Korteby Farouk Cours Java Avancée
  102. 102. Règles de conception <ul><li>Quand utiliser des servlets ? </li></ul><ul><li>Elles sont la plupart du temps utilisées pour : </li></ul><ul><li>– implémenter la logique de l'application </li></ul><ul><li>– générer des données binaires </li></ul><ul><li>– implémenter des services </li></ul><ul><li>Les servlets ne sont pas habituellement des </li></ul><ul><li>composants visuels, à l'exception de certaines qui génèrent du contenu binaire. </li></ul><ul><li>Elles sont surtout utilisées comme un service </li></ul><ul><li>d'accès aux informations de l'application. </li></ul>
  103. 103. Règles de conception <ul><li>Une servlet peut ainsi rendre n'importe quel </li></ul><ul><li>service (application de modèles, sécurité, </li></ul><ul><li>personnalisation, contrôle de l'application) et </li></ul><ul><li>ensuite choisir un composant de présentation </li></ul><ul><li>(souvent une page JSP) pour lui transmettre la </li></ul><ul><li>requête et s'occuper de sa présentation. </li></ul><ul><li>Comme elle peut être assimilée à un service, un </li></ul><ul><li>filtre de servlets peut être assimilé à une </li></ul><ul><li>extension ou une personnalisation du service </li></ul><ul><li>fourni par la servlet. </li></ul>
  104. 104. Règles de conception <ul><li>Les servlets sont la technologie de prédilection </li></ul><ul><li>pour implémenter un contrôleur sur le tiers Web, qui déterminera comment traiter une requête et choisira la prochaine vue à afficher. </li></ul><ul><li>Un contrôleur active les opérations d'une </li></ul><ul><li>application et prend des décisions, qui sont </li></ul><ul><li>essentiellement des tâches procédurales bien </li></ul><ul><li>adaptées à l'intégration dans le code d'une </li></ul><ul><li>servlet. </li></ul>
  105. 105. Règles de conception <ul><li>Les pages JSP ne doivent pas être utilisées comme contrôleur car si l'on mélange les balises et le code du programme, elles deviennent difficiles à lire et à maintenir, particulièrement pour les concepteurs Web, qui ne sont pas des programmeurs. </li></ul>
  106. 106. Règles de conception <ul><li>Les pages JSP sont habituellement utilisées pour </li></ul><ul><li>créer du contenu structuré ou des données </li></ul><ul><li>textuelles non-structurées. </li></ul><ul><li>Elles sont particulièrement adaptées lorsque la </li></ul><ul><li>valeur des données change entre les requêtes </li></ul><ul><li>mais que leur structuration ne change pas (ou </li></ul><ul><li>peu). </li></ul>
  107. 107. Règles de conception <ul><li>Utiliser les JSP pour la présentation des données </li></ul><ul><li>Les vues pour visualiser les données d'une </li></ul><ul><li>application d'entreprise sont traditionnellement en HTML, XHTML et DHTML. </li></ul><ul><li>Les pages JSP sont utilisées lorsque le contenu est </li></ul><ul><li>partiellement statique, avec quelques éléments </li></ul><ul><li>remplis dynamiquement à l'exécution. </li></ul>
  108. 108. Règles de conception <ul><li>Utiliser les JSP pour la </li></ul><ul><li>présentation des données (suite) </li></ul><ul><li>Une page JSP contient une partie fixe appelée </li></ul><ul><li>&quot;template data&quot; (à ne pas confondre avec les </li></ul><ul><li>mécanismes de modèles décrits par la suite). </li></ul><ul><li>Les balises personnalisées ou les éléments de </li></ul><ul><li>script peuvent être placés à divers endroits des </li></ul><ul><li>données statiques et sont substitués à l'exécution </li></ul><ul><li>par du contenu dynamique. </li></ul>
  109. 109. Règles de conception <ul><li>Utiliser les JSP pour la </li></ul><ul><li>présentation des données (suite) </li></ul><ul><li>Les pages JSP ne peuvent pas produire de contenu binaire et ne sont pas très adaptées à la </li></ul><ul><li>production de contenu à grande variabilité ou à la direction de requêtes, on préférera utiliser des servlets dans ce cas. </li></ul><ul><li>Les pages JSP peuvent accéder facilement à la </li></ul><ul><li>logique métier d'une application, en incluant des </li></ul><ul><li>beans par exemple. </li></ul>
  110. 110. Règles de conception <ul><li>Le patron de conception M-V-C </li></ul><ul><li>Le patron de conception (Design pattern) </li></ul><ul><li>Modèle-Vue-Contrôleur est recommandé car il </li></ul><ul><li>permet de créer des applications réutilisables, et </li></ul><ul><li>d’ajouter de nouveaux types de clients, processus </li></ul><ul><li>et vues facilement. </li></ul><ul><li>Le modèle de conception le plus simple a un seul </li></ul><ul><li>contrôleur qui reçoit les requêtes des navigateurs, les distribue dans l’application et affiche les résultats. </li></ul>
  111. 111. Règles de conception <ul><li>Le modèle MVC avec Servlet et JSP </li></ul><ul><li>Utilisation conjointe des servlets et JSP : </li></ul><ul><li>– JSP fournit la vue </li></ul><ul><li>– les servlets contrôlent et dispatchent </li></ul><ul><li>– les composants servent à accéder aux données du modèle </li></ul>
  112. 112. Résumé Korteby Farouk Cours Java Avancée
  113. 113. Résumé <ul><li>Résumé (1/4) </li></ul><ul><li>Le serveur Web d’une application J2EE rend </li></ul><ul><li>disponible les applications sur le Web </li></ul><ul><li>Les pages JSP et servlets sont des composants </li></ul><ul><li>Web qui succèdent aux anciennes technologies </li></ul><ul><li>côté serveur telles que les CGIs et qui assurent la </li></ul><ul><li>portabilité. </li></ul>
  114. 114. Résumé <ul><li>Résumé (2/4) </li></ul><ul><li>Le conteneur Web fournit des services de haut </li></ul><ul><li>niveau aux composants Web en matière de : </li></ul><ul><li>– transactions, </li></ul><ul><li>– accès aux données, </li></ul><ul><li>– gestion des états, </li></ul><ul><li>– sécurité et distribution. </li></ul>
  115. 115. Résumé <ul><li>Résumé (3/4) </li></ul><ul><li>Le serveur Web d’une application est une couche </li></ul><ul><li>de service neutre, habituellement conçu sur le </li></ul><ul><li>modèle MVC, qui simplifie la création </li></ul><ul><li>d’applications Web interactives. </li></ul><ul><li>Les servlets sont principalement utilisées pour </li></ul><ul><li>générer des données binaires et contrôler </li></ul><ul><li>l’application (modèle Servlet Dispatcher) </li></ul><ul><li>Les pages JSP sont principalement utilisées pour </li></ul><ul><li>créer du contenu textuel et des références à des </li></ul><ul><li>données externes. </li></ul>
  116. 116. Résumé <ul><li>Résumé (4/4) </li></ul><ul><li>Pour les JSP, l’utilisation de bibliothèques de balises personnalisées améliore la qualité du code source et facilite la maintenance des applications J2EE. </li></ul>
  117. 117. Ateliers Korteby Farouk Cours Java Avancée
  118. 118. Ateliers <ul><li>l'indispensable JDK de SUN : Il contient un compilateur, un interpréteur, les classes de base, et d'autres outils. </li></ul><ul><li>Un Éditeur java : NetBeans IDE 5.0 </li></ul><ul><li>Des Neurones frenchs qui tournent </li></ul>
  119. 119. Ateliers <ul><li>Exemple 1: une simple Servlet </li></ul><ul><li>public class GreetingServlet </li></ul><ul><li>extends HttpServlet {} </li></ul>
  120. 120. Ateliers
  121. 121. Ateliers
  122. 122. Ateliers
  123. 123. Ateliers
  124. 124. Ateliers
  125. 125. Ateliers <ul><li><form action=&quot;GreetingServlet&quot; method=&quot;POST&quot;> </li></ul><ul><li>First Name:  </li></ul><ul><li><input type=&quot;text&quot; name=&quot;firstName&quot; size=&quot;20&quot;> </li></ul><ul><li><br /> </li></ul><ul><li>Surname:  </li></ul><ul><li><input type=&quot;text&quot; name=&quot;surname&quot; size=&quot;20&quot;> </li></ul><ul><li><br /><br /> </li></ul><ul><li><input type=&quot;submit&quot; value=&quot;Submit&quot;> </li></ul><ul><li></form> </li></ul>
  126. 126. Ateliers
  127. 127. Ateliers
  128. 128. Ateliers
  129. 129. Ateliers
  130. 130. Ateliers
  131. 131. Ateliers
  132. 132. Ateliers <ul><li>protected void  doPost(HttpServletRequest request, HttpServletResponse response) throws  ServletException, IOException {   </li></ul><ul><li>String firstName = request.getParameter(&quot;firstName&quot;).toString();          </li></ul><ul><li>System.out.println(&quot;firstName = &quot; + firstName); </li></ul><ul><li>         processRequest(request, response);     </li></ul><ul><li>} </li></ul>
  133. 133. Ateliers
  134. 134. Ateliers
  135. 135. Ateliers
  136. 136. Ateliers <ul><li>Dans processRequest(…) </li></ul><ul><li>response.setContentType(&quot;text/html;charset=UTF-8&quot;); </li></ul><ul><li>PrintWriter out = response.getWriter(); </li></ul><ul><li>String firstName = request.getParameter(&quot;firstName&quot;).toString(); </li></ul><ul><li>String surname = request.getParameter(&quot;surname&quot;).toString(); </li></ul><ul><li>out.println(&quot;<h1>Servlet GreetingServlet at &quot; +  </li></ul><ul><li>request.getContextPath () + &quot;</h1>&quot;); </li></ul><ul><li>out.println(&quot;<p>Welcome &quot; + firstName + &quot; &quot; +  </li></ul><ul><li>surname + &quot;</p>&quot;); </li></ul><ul><li>out.close(); </li></ul>
  137. 137. Ateliers <ul><li>Exemple 2: une simple Page JSP </li></ul><ul><li><%@ page language=&quot;Java&quot; import=&quot;java.util.*&quot; %> </li></ul><ul><li><H1 Align=&quot;center&quot;>Time is : </li></ul><ul><li><%= new Date() %></H1> </li></ul><ul><li><% for(int i=1; i<=6; i++) { %> </li></ul><ul><li><H<%= i %> align=&quot;center&quot;>Heading <%= i %> </H<%= i %>> </li></ul><ul><li><% } %> </li></ul>
  138. 138. Ateliers <ul><li>Exemple 3: Get avec une Page JSP </li></ul><ul><li>Index.html </li></ul><ul><li><form method=&quot;GET&quot; action=&quot;index.jsp&quot;> </li></ul><ul><li>Enter Social Security Number: </li></ul><ul><li><input type=&quot;text&quot; name=&quot;ssn&quot;/> </li></ul><ul><li>Enter Bonus Multiplier: <input type=&quot;text&quot; name=&quot;multiplier&quot;/> </li></ul><ul><li><input type=&quot;submit&quot; value=&quot;Submit&quot;/> </li></ul><ul><li><input type=&quot;reset&quot;/> </li></ul><ul><li></form> </li></ul>
  139. 139. Ateliers <ul><li>Index.jsp </li></ul><ul><li><%! String strMult, ssn; %> </li></ul><ul><li><%! Integer integerMult; %> </li></ul><ul><li><%! int multiplier=0; %> </li></ul><ul><li><%! double bonus; %> </li></ul><ul><li><%! double inputBonus; %> </li></ul><ul><li><%! public double calculateBonus(int multiplier, double bonus) { </li></ul><ul><li>double calculatedBonus = (multiplier * bonus); </li></ul><ul><li>return calculatedBonus; </li></ul><ul><li>} </li></ul><ul><li>%> </li></ul>
  140. 140. Ateliers <ul><li>Index.jsp </li></ul><ul><li><% </li></ul><ul><li>strMult = request.getParameter(&quot;multiplier&quot;); </li></ul><ul><li>ssn = request.getParameter(&quot;ssn&quot;); </li></ul><ul><li>integerMult = new Integer(strMult); </li></ul><ul><li>multiplier = integerMult.intValue(); </li></ul><ul><li>inputBonus = 100.00; </li></ul><ul><li>bonus = this.calculateBonus(multiplier, inputBonus); </li></ul><ul><li>%> </li></ul><ul><li><P>Social Security Number : <%= ssn %> <P> </li></ul><ul><li><P>Multiplier : <%= multiplier %> <P> </li></ul><ul><li><P>Bonus Amount retrieved: <%= bonus %> <P> </li></ul>
  141. 141. Ateliers
  142. 142. Merci de votre Attention By Korteby Farouk Cours Java Avancée -Servlets & JSP-
  143. 143. Pour informations Complémentaires vous pouvez consultez: http://java.developpez.com/cours/servlets/ Tutorial J2EE : les Servlets http:// java.sun.com /docs/books/tutorial/ le site officiel de SUN By Korteby Farouk Cours Java Avancée -Applets-

×