C05 Programmation Web Servlets

download C05 Programmation Web Servlets

of 35

Transcript of C05 Programmation Web Servlets

  • 8/16/2019 C05 Programmation Web Servlets

    1/35

    SERVLETS

    Part4-1

    Définition d’un Servlet

    Un des composants de l’architecture Java EE s’exécutant ducoté serveur générant dynamiquement des pages web. Traite des requêtes HTTP et fournit aux clients des réponses

    HTTP.

    Comparable à :  CGI (« Common Gateway Interface »), 

    Langages de script coté serveur PHP, ASP… 

    Un Servlet s’exécute dans un « conteneur de Servlet ») permettant d’établir le lien entre le Servlet, la machinevirtuelle java et le serveur Web.

    Ex : Glassfish, Tomcat, Weblogic, … 

    ISIC/S3Prof. Asmaa El Hannani 302

  • 8/16/2019 C05 Programmation Web Servlets

    2/35

    Utilité des servlets

    Créer des pages dynamiques (HTML/XML) «à la volée». 

    Effectuer des traitements applicatifs coté serveur Web et bénéficier de leur puissance de calcul et de l’accès aux basesde données. 

    Écrire une application Web en Java dont l’interface utilisateurest dans le client :

    navigateur, applet,

    téléphone portable…

    ISIC/S3Prof. Asmaa El Hannani 303

     Avantages des servlets

    Portabilité  Technologie indépendante de la plate-forme et du serveur.

    Puissance

    Disponibilité des API de Java.  Manipulation d’images, connectivité aux bases de données (JDBC)… 

    Efficacité  Utilisent des threads (processus légers) plutôt que des processus système 

    Sûreté  Typage fort de Java et gestion des erreurs par exceptions.

    Fonctionnement dans une machine virtuelle.

    Faible coût   Nombreux serveurs gratuits.

    ISIC/S3Prof. Asmaa El Hannani 304

  • 8/16/2019 C05 Programmation Web Servlets

    3/35

    Les technologies

    ISIC/S3Prof. Asmaa El Hannani 305

    Servlet: Fonctionnement

    Le serveur Web associe une ou plusieurs URLs à chaqueservlet

    Un servlet lit les données envoyées par un client (requêteHTTP)

    données explicites (formulaire) 

    données implicites (Request Header)

    Le conteneur de servlet déclenche le servlet qui s’exécute côtéserveur

    Le servlet génère et envoie la réponse au client  données explicites (HTML/XML) 

    données implicites (Response Header, Status Code)  

    ISIC/S3Prof. Asmaa El Hannani 306

  • 8/16/2019 C05 Programmation Web Servlets

    4/35

    Servlet: Fonctionnement

    ISIC/S3Prof. Asmaa El Hannani 307

    L'API Servlet

  • 8/16/2019 C05 Programmation Web Servlets

    5/35

    Servlet: Modèle de programmation

    Un servlet est un objet qui peut être manipulé par le conteneurvia l’interface javax.servlet.Servlet suivante:

    Tout servlet (que vous écrivez) doit implémenter cette interface  soit directement,

    soit en  dérivant  d’une classe implémentant déjà cette interfacecomme (GenericServlet ou HttpServlet ) 

    ISIC/S3Prof. Asmaa El Hannani 309

    L’API Servlet

    L'API Servlet fournit deux classes qui proposent déjà uneimplémentation: 

    GenericServlet  : pour la conception de Servlets indépendantesdu protocole

    HttpServlet  : pour la conception de Servlets spécifiques au protocole HTTP

    ISIC/S3Prof. Asmaa El Hannani 310

  • 8/16/2019 C05 Programmation Web Servlets

    6/35

    L’API Servlet

    Your Servlet

    ISIC/S3Prof. Asmaa El Hannani 311

    La classe GenericServlet

     javax.servlet.GenericServlet

    définit un servlet indépendant des protocoles réseaux 

    est une classe abstraite qui fournit une implémentation de base

    de l’interface Servlet

    Méthodes  init()

    service()

    destroy()

    service() est le principal point d’entrée c’est une méthodeabstraite qui doit être implémentée par la classe dérivée 

    Déjà implémentées 

    ISIC/S3Prof. Asmaa El Hannani 312

  • 8/16/2019 C05 Programmation Web Servlets

    7/35

    La classe HttpServlet

     javax.servlet.http.HttpServlet

    hérite de GenericServlet et fournit une implémentation spécifiqueà HTTP de l’interface Servlet

    2 méthodes remplacent service() de la classe mère : doGet() : pour les requêtes Http de type GET 

    doPost() : pour les requêtes Http de type POST 

    Votre servlet doit obligatoirement contenir l’une ou l’autre de

    ces 2 méthodes redéfinie, choisie selon le mode d’envoi duformulaire HTML qui l'exécute. 

    service() de HttpServlet  appelle automatiquement la bonne

    méthode (doGet ou doPost) en fonction du type des requêteshttp.

    ISIC/S3Prof. Asmaa El Hannani 313

    Exemple 

    ISIC/S3Prof. Asmaa El Hannani 314

  • 8/16/2019 C05 Programmation Web Servlets

    8/35

    Cycle de vie d’un servlet

    Cycle de vie d’un servlet

    n’existe pas 

    initialisé Traitement de 1 à N requêtes,chacune dans un thread séparé 

    service()

    Instanciation puis initialisation

    constructeur

    init()

    Destruction (shutdown du serveur, …) 

    destroy()

    ISIC/S3Prof. Asmaa El Hannani 316

  • 8/16/2019 C05 Programmation Web Servlets

    9/35

    Cycle de vie d’un servlet: Initialisation

    Initialisation: init()

    une fois crée, le servlet est initialisé avec cette méthode 

    elle n’est appelée qu’une seule fois par le serveur

    on peut y placer

    les connexions réseaux 

    les connexions BD

    la récupération des paramètres d’initialisation  la récupération des paramètres de contexte de

    l’application 

    ISIC/S3Prof. Asmaa El Hannani 317

    Cycle de vie d’un servlet: Traitement

    Traitement: service()

    Lors de la réception d’une requête, le conteneur crée: un objet ServletRequest (la requête), et

    un objet ServletResponse (la réponse)

    Le conteneur appelle ensuite la méthode service() avec cesdeux objets en paramètres pour permettre au servlet derépondre à la requête du client. 

    service() de HttpServlet appelle automatiquement la bonne

    méthode (doGet ou doPost) en fonction du type des requêteshttp.

    ISIC/S3Prof. Asmaa El Hannani 318

  • 8/16/2019 C05 Programmation Web Servlets

    10/35

    10 

    Cycle de vie d’un servlet: Destruction

    Destruction: destroy ()

    destruction du servlet

    appelée qu’une seule fois quand le servlet est déchargé parle serveur, ou quand le serveur est arrêté 

    on y place la fermeture des connexions réseaux, BD 

    ISIC/S3Prof. Asmaa El Hannani 319

    Premier servlet

  • 8/16/2019 C05 Programmation Web Servlets

    11/35

    11 

    Un premier servlet: HelloServlet

    API à importerServlet de type

    HttpServlet

    Redéfinitionde doGet

    Résultat 

    ISIC/S3Prof. Asmaa El Hannani 322

    Un premier servlet

    Toute servlet doit au moins importer trois packages :

     java.io pour la gestion des flux et

    deux packages de l'API servlet ;

     javax.servlet.*

     javax.servlet.http.*

    Il faut déclarer une nouvelle classe qui hérite de HttpServlet.

    Il faut redéfinir la méthode doGet() ou doPost pour y insérerle code qui va envoyer dans un flux le code HTML de la page

    générée. 

    ISIC/S3Prof. Asmaa El Hannani 323

  • 8/16/2019 C05 Programmation Web Servlets

    12/35

    12 

    Structure de base d’un servlet http

    ISIC/S3Prof. Asmaa El Hannani 324

    Optionnelle

    Optionnelle

    Obligatoire

    Structure des méthodes doGet/doPost

    Détail des méthodes doGet() et doPost()

    ISIC/S3Prof. Asmaa El Hannani 325

  • 8/16/2019 C05 Programmation Web Servlets

    13/35

    13 

    Lire la requête et répondre

    Requêtes et Réponses HTTP

    ISIC/S3Prof. Asmaa El Hannani 327

  • 8/16/2019 C05 Programmation Web Servlets

    14/35

    14 

    Lire la requête du client

    HttpServletRequest hérite de ServletRequest encapsule la requête HTTP et fournit des méthodes pour accéder

    à toutes les informations 

    contient les informations sur l’environnement du serveur  

    Méthodes de HttpServletRequest String getMethod()

    retourne la méthode HTTP 

    String getHeader(String name)

    retourne le paramètre name de l’entête HTTP de la requête 

    String getRemoteHost()

    retourne le nom d’hôte du client 

    String getRemoteAddr()

    retourne l’adresse IP du client 

    ISIC/S3Prof. Asmaa El Hannani 328

    Lire la requête du client (2)

    Méthodes de HttpServletRequest (suite) String getParameter(String name)

    retourne la valeur d’un champ de formulaire 

    Enumeration getParameterNames()

    retourne tous les noms des paramètres 

    String getServerName()

    retourne le nom du serveur

    String getServerPort()

    retourne le port sur lequel le serveur écoute 

    ISIC/S3Prof. Asmaa El Hannani 329

  • 8/16/2019 C05 Programmation Web Servlets

    15/35

    15 

    Lire la requête du client

    Exemple : AffichInfo

    ISIC/S3Prof. Asmaa El Hannani 330

    Lire la requête du client

    Exemple : AffichInfo 

    Exemple

     http://localhost/exemples/servlets/TraceServlet/tutu?toto=titi

     getMethod() → GET  

     getPathInfo() → /tutu  

     getQueryString() → toto=titi  

     getRequestURI() → /exemples/ servlets/TraceServlet/tutu

     getServletPath() → / servlets/TraceServlet

     getContextPath() → /exemples  

    ISIC/S3Prof. Asmaa El Hannani 331

  • 8/16/2019 C05 Programmation Web Servlets

    16/35

    16 

    Répondre au serveur

    HttpServletResponse hérite de ServletResponse utilisé pour construire un message de réponse HTTP renvoyé au

    client

    contient les méthodes nécessaires pour définir: le type decontenu, l’entête, et le code de retour  

    contient un flux de sortie pour envoyer des données (HTML ouXML ou autre) au client

    Méthodes de HttpServletResponse void setStatus( int statusCode  )

    définit le code de retour de la réponse 

    void setHeader( String name, String value  )

    définit la valeur de l’entête name

    ISIC/S3Prof. Asmaa El Hannani 332

    Répondre au serveur (2)

    Méthodes (suite)  void setContentType( String type  )

    définit le type MIME du contenu 

    PrintWriter getWriter()

     pour envoyer des données texte au client 

    ServletOutputStream getoutputStream()

    flux pour envoyer des données binaires 

    void sendRedirect( String url  )

    redirige le client vers l’URL 

    On peut

    renvoyer du HTML

    rediriger vers une page donnée 

     faire une action (upload/download,…) ISIC/S3Prof. Asmaa El Hannani 333

  • 8/16/2019 C05 Programmation Web Servlets

    17/35

    17 

    setContentType

    ISIC/S3Prof. Asmaa El Hannani 334

    Renvoie d’une feuille Excel 

    Exemple : ExcelServlet

    ISIC/S3Prof. Asmaa El Hannani 335

  • 8/16/2019 C05 Programmation Web Servlets

    18/35

    18 

     Traitement des données

     Traitement des données

    Un formulaire HTML

     permet de saisir les données 

    mécanisme pour envoyer les données au serveur Web 

    Rappel: les balises   ⟨FORM⟩: pour définir un formulaire 

      ⟨INPUT⟩: pour définir un élément d’interface  text,

     password,

    checkbox,

    radio,

    submit, reset

      ⟨TEXTAREA⟩: zone de texte sur plusieurs lignes

      ⟨SELECT⟩: liste déroulante ISIC/S3Prof. Asmaa El Hannani 337

  • 8/16/2019 C05 Programmation Web Servlets

    19/35

    19 

     Traitement des données (2)

    Attributs de

    action: URL où envoyer les données 

    method: méthode à utiliser pour l’envoi (GET/POST) 

    Les données sont envoyées lorsque l’on clique sur un boutonde type submit

    ISIC/S3Prof. Asmaa El Hannani 338

    Nom:


     Traitement des données (3)

    Les méthodes GET et POST GET

    les champs du formulaire sont ajoutés à l’URL de l’attribut ACTION 

    forme nom=valeur

    URL?nom1=val1&nom2=val2&… 

    POST

    les données sont passées dans le corps du message HTTP 

    envoi de données confidentielles ou binaires par exemple 

    ISIC/S3Prof. Asmaa El Hannani 339

  • 8/16/2019 C05 Programmation Web Servlets

    20/35

    20 

     Traitement des données (4)

    Les paramètres d'une requête sont accessibles dans l'objet(HttpServletRequest) request

    request.getParameter("paramname")

    Il est possible de récupérer tous les noms des paramètres   request.getParameterNames()

    Exemple de lecture des paramètres 

    dans le formulaire 

    dans la méthode doXXX()

    String n = request.getParameter (“nom”); 

    ISIC/S3Prof. Asmaa El Hannani 340

    Données passées dans l’URL

    Exemple : AffichParam

    ISIC/S3Prof. Asmaa El Hannani 341

  • 8/16/2019 C05 Programmation Web Servlets

    21/35

    21 

    Données passées dans l’URL

    Exemple : AffichParam 

    ISIC/S3Prof. Asmaa El Hannani 342

     Traitement des données d’un formulaire 

    Exemple : AffichForm 

    Chemin relatif

    vers le servlet

    ISIC/S3Prof. Asmaa El Hannani 343

  • 8/16/2019 C05 Programmation Web Servlets

    22/35

    22 

     Traitement des données d’un formulaire 

    Exemple : AffichForm 

    ISIC/S3Prof. Asmaa El Hannani 344

     Traitement des données d’un formulaire 

    Exemple : AffichForm 

    ISIC/S3Prof. Asmaa El Hannani 345

  • 8/16/2019 C05 Programmation Web Servlets

    23/35

    23 

     Traitement des données d’un formulaire 

    Exemple : AffichForm 

    ISIC/S3Prof. Asmaa El Hannani 346

    État d’un servlet

  • 8/16/2019 C05 Programmation Web Servlets

    24/35

    24 

    HTTP: protocole sans états

    HTTP gère les paires requête/réponse  ouverture

    requête 

    réponse 

    fermeture

    HTTP: protocole sans états 

    aucun historique des différentes requêtes n’est conservé  les requêtes sont totalement indépendantes les unes des autres 

    ISIC/S3Prof. Asmaa El Hannani 348

    La gestion des états

    Une application Web a besoin de savoir

    quel utilisateur a émis la requête 

    les requêtes déjà émises par cet utilisateur  

    l’état général actuel de l’application  nombre de visites, nombre de produits vendus, consultés,… 

    Il faut rajouter à HTTP un mécanisme de gestion des états  

    ISIC/S3Prof. Asmaa El Hannani 349

  • 8/16/2019 C05 Programmation Web Servlets

    25/35

    25 

     Techniques de mémorisation

    Différentes techniques pour échanger les donnéesd’identification de la session dans chaque requête: 

    cookies

    réécriture d’URL 

    champ de formulaire caché (“hidden ”)  

    utilisation des sessions grâce à HttpSession

    ISIC/S3Prof. Asmaa El Hannani 350

    Les cookies

  • 8/16/2019 C05 Programmation Web Servlets

    26/35

    26 

    Qu’est-ce qu’un cookie ? 

    Fragment d’information textuelle échangé entre le client et leserveur Web

    collection de paires nom/valeur

    chargés dans la mémoire du client 

    un cookie permanent est sauvegardé dans un fichier texte sur leclient

     partie de l’entête HTTP 

    Utilisé pour mémoriser les préférences de l’utilisateur, oumême l’identifier. 

    Désactivable 

    ISIC/S3Prof. Asmaa El Hannani 353

     Anatomie

    ISIC/S3Prof. Asmaa El Hannani 354

  • 8/16/2019 C05 Programmation Web Servlets

    27/35

  • 8/16/2019 C05 Programmation Web Servlets

    28/35

    28 

    Méthodes supplémentaires

    void setPath(String path)

    définit le chemin 

    void setSecure(boolean flag)

    true si SSL, false par défaut 

    void setDomain(String domain)

    définit le domaine 

    ISIC/S3Prof. Asmaa El Hannani 357

    Envoi de cookie

    Méthode addCookie() de la classe HttpServletResponse

     public void doGet(HttpServletRequest req,

    HttpServletResponse rep) {

    Cookie c = new Cookie(“nom”, “toto”); 

    c.setMaxAge(365*24*3600); !// 1an

    rep.addCookie(c);

    rep.setContentType(“text/html”); 

    ...

    }

    ISIC/S3Prof. Asmaa El Hannani 358

  • 8/16/2019 C05 Programmation Web Servlets

    29/35

    29 

    Lecture de cookie

    Le navigateur envoie automatiquement les cookies

    correspondant à domain et path

    Un servlet  peut récupérer les cookies envoyés précédemmentau navigateur

    méthode getCookies() de HttpServletRequest

    public Cookie[] getCookies()

    ISIC/S3Prof. Asmaa El Hannani 359

    Lecture de cookie (2)

    Pour rechercher un cookie particulier, il faut parcourir le

    tableau et rechercher le cookie à partir de son nom grâce à laméthode getName() de l'objet Cookie.

    ...

    Cookie[] cookies = request.getCookies();

    String valeur = "";

    for(int i=0;i

  • 8/16/2019 C05 Programmation Web Servlets

    30/35

    30 

    Réécriture d’URL et Champs de formulaires cachés

    Réécriture d’URL 

    Principe

    ajouter dans la chaîne de requête du servlet des informations permettantd’identifier la session 

    http://host/path/file?sessionid=1234&uid=”elhannani”  il est accédé par chaque servlet mentionné qui récupère les informations

     persistantes (SGBD, fichiers) à partir de cet ID 

    Avantage

    fonctionne même si les cookies sont désactivés 

    Inconvénients  encodage des URLs (données visibles, caractères autorisés, longueur) 

    toutes les pages sont dynamiquement générées 

     pas de bookmarks possibles

    ISIC/S3Prof. Asmaa El Hannani 362

  • 8/16/2019 C05 Programmation Web Servlets

    31/35

    31 

    Champs de formulaires cachés

    Principe

    On cache les données de session dans les champs “hidden ”  

    Avantage

    fonctionne même si les cookies sont désactivés 

    Inconvénients   beaucoup de travail

    toutes les pages doivent être le résultat de soumission deformulaires

  • 8/16/2019 C05 Programmation Web Servlets

    32/35

    32 

    Les sessions

    Définition d’une session  une série d’interactions liées entre un client et un serveur Web 

    englobe plusieurs requêtes HTTP sur une période donnée 

    Utilisées pour mémoriser les actions (requêtes HTTP) d’unutilisateur unique au cours du temps

    exemple: opérations bancaires, caddie,… 

    ISIC/S3Prof. Asmaa El Hannani 365

    L’interface HttpSession

    Les objets HttpSession  mémorisent les données de chaqueutilisateur.

    Fonctionnement similaire à une table de hachage stockée sur leserveur.

    A chaque ID de session est associé, via la table de hachage,l’ensemble des informations de la session. 

    Les objets session résident sur le serveur, et c’est l’objetrequest qui maintient les informations

    Les sessions sont automatiquement associées au client via lescookies ou la réécriture d’URL. 

    ISIC/S3Prof. Asmaa El Hannani 366

  • 8/16/2019 C05 Programmation Web Servlets

    33/35

    33 

    Comportement de base des sessions

    Accès à l’objet session  appel à  request.getSession  pour recevoir un objet HttpSession 

    (table de hachage associée à l’utilisateur) 

    Extraire les informations associées à une session  appel à getAttribute sur l’objet HttpSession, récupérer la valeur,

    vérifier si le résultat est nul 

    Mémoriser les informations de la session 

    utiliser setAttribute avec une clé et une valeur   Supprimer les données de la session 

    removeAttribute supprime une valeur

    invalidate pour annuler une session

    logout pour déloguer  le client de l’application Web 

    ISIC/S3Prof. Asmaa El Hannani 367

    Obtenir l’objet session 

    Deux méthodes de HttpServletRequest HttpSession getSession()

    retourne la session courante, si elle n’existe pas, elle est créée 

    HttpSession getSession(boolean create)

    idem sauf que la session n’est créée que si create=true, sinonretournenull

    ISIC/S3Prof. Asmaa El Hannani 368

  • 8/16/2019 C05 Programmation Web Servlets

    34/35

    34 

    Mémoriser et extraire les données

    Une fois la session obtenue, on peut mémoriser et extraire lesdonnées grâce aux méthodes de HttpSession.

    void setAttribute(String name, Object val)

    Object getAttribute(String name)

    ISIC/S3Prof. Asmaa El Hannani 369

    Mémoriser et extraire les données

    Exemple: HttpSessionServlet

    Exemple

    ISIC/S3Prof. Asmaa El Hannani 370

  • 8/16/2019 C05 Programmation Web Servlets

    35/35

    Méthodes de HttpServletRequest

    isRequestedSessionIdValid()

    vrai si l’ID de la session est valide dans le contexte courant 

    isRequestedSessionIdFromCookie()

    vrai si l’ID de la session provient d’un cookie 

    isRequestedSessionIdFromURL()

    vrai si l’ID de la session provient d’un URL 

     getRequestedSessionId()

    retourne l’ID de la session 

    ISIC/S3Prof. Asmaa El Hannani 371

    Méthodes de HttpSession

    isNew()

    vrai si nouvelle session

    invalidate() invalide la session et supprime les associations nom/valeur

     getMaxInactiveInterval()

    retourne l’intervalle maximal d’inactivité en secondes 

    setMaxInactiveInterval()

    définit l’intervalle maximal d’inactivité en secondes 

     getId

    retourne l’identifiant de la session 

    ISIC/S3Prof. Asmaa El Hannani 372