49
Programmation d’Application Web Programmation d’Application Web Tarak CHAARI Application Web en Java ISECS 1 Programmation d’Application Web Programmation d’Application Web avec Java avec Java Tarak CHAARI Tarak CHAARI [email protected] [email protected] © Université de Sfax, 2009 © Université de Sfax, 2009-2010 2010 Version adaptée du cours de Mr Walid MAHDI (ISIMS)

Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

  • Upload
    others

  • View
    18

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Programmation d’Application Web Programmation d’Application Web

Tarak CHAARI Application Web en Java ISECS 1

Programmation d’Application Web Programmation d’Application Web avec Javaavec Java

Tarak CHAARITarak CHAARI

[email protected]@isecs.rnu.tn

© Université de Sfax, 2009© Université de Sfax, 2009--20102010Version adaptée du cours de Mr Walid MAHDI (ISIMS)

Page 2: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

ChapitreChapitre

11

ChapitreChapitre

11

Tarak CHAARI Application Web en Java ISECS 2

11

ServletsServlets javajava( Le dessous cachés du JSP)( Le dessous cachés du JSP)

11

ServletsServlets javajava( Le dessous cachés du JSP)( Le dessous cachés du JSP)

Page 3: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Servlet : Server-side applet

Une Servelt est un composant Web du coté serveur Web :

Qui permet d’étendre les possibilités d’un serveur Web.

Possibilité de générer du contenu dynamique en réponse à desrequêtes clients.

11-- Qu’est ce qu’une Servlet ?Qu’est ce qu’une Servlet ? (1/6)(1/6)2. Servlets Java

2. Servlets Java

Tarak CHAARI Application Web en Java ISECS 3

requêtes clients.

Un peu comme les scriptsCGI (Common Gateway Interface).

C’est une classe Java exécutée sur un serveur multi-threadé(comme un serveur Web)

Elle est compilée sous forme de byte-code,

Elle est exécutée par une machine virtuelle Java (JVM).

Elle est mise en œuvre est gérée par un conteneur Web (Tomcatpar exemple).

2. Servlets Java

2. Servlets Java

Page 4: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Applets :

Interface graphique utilisateur,

Nécessite un browser adéquat,

Traitements sur le client (Client lourd),

Limites de services dues aux problèmes de sécurité.

22-- Servlet vs. AppletServlet vs. Applet (1/2)(1/2)2. Servlets Java

2. Servlets Java

Tarak CHAARI Application Web en Java ISECS 4

Servlets

pas d’interface graphique utilisateur (Langage HTML),

pas de limitations de sécurité :

possibilité d’établissement de connexions avec d ’autres machines quele serveur (utilisation comme pont JDBC-ODBC),

possibilité d’appels systèmes (JDBC)

manipulation de ressources locales du serveur

2. Servlets Java

2. Servlets Java

Page 5: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Avantage Servlet:

inhérents à Java :

JSDK ou JDK1.2 gratuit et portable

par rapport aux Applets :

2. Servlets Java

2. Servlets Java

22-- Servlet vs. AppletServlet vs. Applet (2/2)(2/2)

Tarak CHAARI Application Web en Java ISECS 5

plus facile à développer,

meilleures performances,

client léger ,

Inconvénient Servlet :

interface graphique utilisateur limitée à HTML.

2. Servlets Java

2. Servlets Java

Page 6: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Principe CGI :

Un processus par requête est lancé sur le serveur.

Avantages CGI :

Gratuit, pris en charge par tous les serveurs Web actuels,

2. Servlets Java

2. Servlets Java

33-- Servlet vs. CGIServlet vs. CGI (1/2)(1/2)

Tarak CHAARI Application Web en Java ISECS 6

Gratuit, pris en charge par tous les serveurs Web actuels,Peut être écrit dans n'importe quel langage (C, perl).

Inconvénients CGI :

Manque d évolutivité (plusieurs processus créés),

Serveur très sollicité si plusieurs requêtes en mêmemoment,

Assez lent et parfois difficile à développer.

2. Servlets Java

2. Servlets Java

Page 7: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Les Servlets sont portables, plus efficaces, plus pratiqueset plus puissantes :

indépendance des OS, c’est du Java !,

indépendance des serveurs web (Apache, Microsoft IIS, WebStar, etc.),

efficacité (connexion multi-threads avec les utilisateurs, un seulchargement, permanence en mémoire),

33-- Servlet vs. CGIServlet vs. CGI (2/2)(2/2)2. Servlets Java

2. Servlets Java

Tarak CHAARI Application Web en Java ISECS 7

efficacité (connexion multi-threads avec les utilisateurs, un seulchargement, permanence en mémoire),

super API ( Application Programming Interface) pour gérer lesformulaires HTML,

dialogue possible avec des applets situées sur le client (utilisation d ’un

protocole à objets distribués RMI),

gestion des sessions,

faible coût : kit de développement des Servlets gratuit (Apache/Tomcatreste la solution la plus efficace... 100% gratuite).

2. Servlets Java

2. Servlets Java

Page 8: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

L’API Servlet fournit un certainnombre de classes et d’interfacespermettant :

le développement des Servlets,

leur déploiement,

2. Servlets Java

2. Servlets Java import javax.servlet.*

import javax.servlet.http.*

public class ……………{

MapremièreServlet.java

44-- L’API ServletL’API Servlet (1/5)(1/5)

Tarak CHAARI Application Web en Java ISECS 8

et leur mise en œuvre au sein duconteneur Web.

L’API Servlet est contenueprincipalement dans deux packages:

javax.servlet

javax.servlet.http

2. Servlets Java

2. Servlets Java

public class ……………{

……………..

……………….

……………….

}

Page 9: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Le package javax.servlet :

Contient les classes pour un support des Servlets génériques etindépendant du protocole.

Le package javax.servlet.http :

2. Servlets Java

2. Servlets Java

44-- L’API ServletL’API Servlet (2/5)(2/5)

Tarak CHAARI Application Web en Java ISECS 9

Le package javax.servlet.http :

Contient des extensions des classes du package javax.servlet.

Ces extensions consistent à ajouter des fonctionnalités spécifiquesau protocole HTTP.

Le nom du package le plus haut « javax » au lieu du « java »plus familier, indique que l’API Servlet est une extensionstandard.

2. Servlets Java

2. Servlets Java

Page 10: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

2. Servlets Java

2. Servlets Java

44-- L’API ServletL’API Servlet (3/5)(3/5)

Servlet interface

Chaque Servlet utilisateur doit implémenter l’interfacejavax.servlet.Servlet soit directement soit par l’extension de la classespéciale javax.servlet.GenericServlet ou javax.servlet.http.HttpServlet .

javax.servlet.Servlet

Tarak CHAARI Application Web en Java ISECS 10

2. Servlets Java

2. Servlets Java

Servlet

GenericServlet

HttpServlet

MapremiereServlet

interface

classe abstraite

classe abstraite

classe définie par l ’utilisateur

Spé

cific

atio

n

Gén

éral

isat

ionjavax.servlet.GenericServlet

javax.servlet.HttpServlet

Page 11: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

44-- L’API ServletL’API Servlet (4/5)(4/5)

L’interface javax.servlet.Servlet possède lesméthodes :

init( ) :

pour initialiser la Servlet.

Service ( ) :

2. Servlets Java

2. Servlets Java

Tarak CHAARI Application Web en Java ISECS 11

Service ( ) :

pour recevoir et répondre aux requêtes des clients.

destroy()

détruire la servlet et ses ressources.

Ces 3 méthodes sont tous héritées donc par uneServlet utilisateur.

2. Servlets Java

2. Servlets Java

Page 12: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Une Servlet utilisateur peut implémenter l’interfacejavax.servlet.Servlet directement

2. Servlets Java

2. Servlets Java

44-- L’API ServletL’API Servlet (5/5)(5/5)

public class MapremiereServlet implements Servlet { ….

Tarak CHAARI Application Web en Java ISECS 12

Une Servlet utilisateur indépendante du protocole devait êtreune sous classe de GenericServlet

Une Servlet Http devait être une sous classe de HttpServlet.

2. Servlets Java

2. Servlets Java

public class MapremiereServlet extends GenericServlet { ….

public class MapremiereServlet extends HttpServlet {….

Page 13: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Une Servlet suit un modèle de programmation requête-service-réponse.

A la place d’une méthode main( ), elle possède une méthodeservice( ) qui sera invoquée automatiquement à chaque fois que laServlet reçoit une requête par le serveur.

2. Servlets Java

2. Servlets Java

55-- Modèle de programmationsModèle de programmations (1/4)(1/4)

Tarak CHAARI Application Web en Java ISECS 13

La méthode service(objet1, objet2 ) accepte deux paramètres etpermet de recevoir et de répondre aux requêtes des clients :

Un objet1: javax.servlet.ServletRequest

contient les informations nécessaires pour une communication duclient vers le serveur (Requête).

Un objet2: javax.servlet.ServletResponse

contient les informations nécessaires pour une communication duserveur vers le client (Réponse).

2. Servlets Java

2. Servlets Java

Page 14: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

2. Servlets Java

2. Servlets Java

55-- Modèle de programmationsModèle de programmations (2/4)(2/4)

Requête

Modèle de programmation requête -service -réponse pour une Servlet Générique

Tarak CHAARI Application Web en Java ISECS 14

Une Servlet générique doit surcharger sa méthode

service(ServletRequest obj1, ServletResponse obj2).

2. Servlets Java

2. Servlets Java

ServeurRequête

RéponseService(…, …)

Page 15: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Une Servlet Http ne surcharge pas la méthode service().

Cette méthode service() de la classe mère est remplacéeavantageusement par 2 méthodes ayant la même signature :

doGet() : pour traiter des requêtes Http de type GETdoPost() : pour traiter des requêtes Http de type POST

2. Servlets Java

2. Servlets Java

55-- Modèle de programmationsModèle de programmations (3/4)(3/4)

Tarak CHAARI Application Web en Java ISECS 15

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

Une Servlet Http doit obligatoirement contenir l’une oul’autre de ces 2 méthodes.

La méthode service() de HttpServlet n’est pas surchargéemais elle prend en charge l’appel automatique de la bonneméthode doXXX() en fonction du type de requêtes.

2. Servlets Java

2. Servlets Java

Page 16: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

2. Servlets Java

2. Servlets Java

55-- Modèle de programmationsModèle de programmations (4/4)(4/4)

Requête GET

Modèle de programmation requête -service -réponse pour une Servlet Http

Tarak CHAARI Application Web en Java ISECS 16

2. Servlets Java

2. Servlets Java

Serveur

Web

Requête GET

RéponsedoGet( )

doPost( )Réponse S

ervi

ce(…

, …)

Requête POST

Notre objectif

Page 17: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

2. Servlets Java

2. Servlets Java

666--- Cycle de vie d’une Servlet HTTPCycle de vie d’une Servlet HTTPCycle de vie d’une Servlet HTTP

Initialisationinvocation de la méthode init()

Initialisation invocation de la méthode init()

La classe Java de la Le conteneur Web crée

Instanciation et chargementInstanciation et chargement

Le conteneur Web Le conteneur Web

exécute l’instance de la L’instance de la Servlet

reste en mémoire jusqu’à

Tarak CHAARI Application Web en Java ISECS 17

2. Servlets Java

2. Servlets Java

Classe de Servlet

En serviceinvocation de la

méthode service()

Requêtes clients

Arrêt du serveur

Destructioninvocation de la

méthode destory()

puis finalize()

Classe de Servlet

En serviceinvocation de la

méthodeservice()Destruction

invocation de la méthodedestory()

puis finalize()

La classe Java de la Servlet est déployée au sein de conteneur Web

Le conteneur Web crée une instance de la

classe de Servlet et la charge en mémoire.

Le conteneur Web initialise la Servlet en

utilisant éventuellement le fichier web.xml.

L’initialisation se fait une seul fois.

exécute l’instance de la Servlet dans un contexte

multitâche. Chaque thread invoque la

méthode service() qui s’occupe d’exécuter la méthode doGet() ou

doPost().

reste en mémoire jusqu’à l’arrêt du serveur. La

méthode destory() est ainsi invoquée indiquant que la

Servlet n’est plus en service et l’instance de la Servlet est supprimée par

le garbage collector.

Page 18: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class Hello extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponse res)

2. Servlets Java

2. Servlets Java

77-- Modèles d’implémentation d’une Modèles d’implémentation d’une Servlet HttpServlet Http (1/3)(1/3)

Hello.java

Tarak CHAARI Application Web en Java ISECS 18

public void doGet(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException {

res.setContentType("text/html");

PrintWriter out = res.getWriter();

out.println("<HTML>");

out.println("<HEAD> <TITLE>Hello</TITLE> </HEAD>" );

out.println("<BODY>");

out.println("<H1>Hello </H1>" );

out.println("<BODY> </HTML>");}

}

2. Servlets Java

2. Servlets Java

Page 19: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Sans les imports nécessaires le compilateur javac ne

peut pas compiler la classe Hello.java.

L’exception ServletException est définie dans le paquetagejavax.servlet.*;

2. Servlets Java

2. Servlets Java

77-- Modèles d’implémentation d’une Modèles d’implémentation d’une Servlet HttpServlet Http (2/3)(2/3)

Tarak CHAARI Application Web en Java ISECS 19

L’exception IOException est définie dans le paquetage javax.io;

Les objets HttpServletRequest, HttpServletResponse utiliséscomme paramètres des méthodes doGet() ou doPost sont définiesdans le paquetage javax.servlet.http.*;

ServletException, IOException sont des déclaration

d’exceptions levées mais non traitées.

2. Servlets Java

2. Servlets Java

Page 20: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

L’instruction res.setContentType("text/html") initialise

l’objet res qui est de type HttpServletResponse comme

étant une réponse de type « texte/html », le type MIME

standard pour le contenu de pages HTML.

Exemples de types MIM image/gif, image/jpeg, text/html,

2. Servlets Java

2. Servlets Java

77-- Modèles d’implémentation d’une Modèles d’implémentation d’une Servlet HttpServlet Http (3/3)(3/3)

Tarak CHAARI Application Web en Java ISECS 20

Exemples de types MIM image/gif, image/jpeg, text/html,text/plain, text/*, */*.

L’objet PrintWriter permet à une Servlet Http de

construire la page HTML destinée à l’utilisateur.

L’instruction « printWriter out = res.getWriter() » permet deretrouver un flux de sortie « out » (un printWriter) à traversl’objet res pour envoyer le message « Hello » au client.

2. Servlets Java

2. Servlets Java

Page 21: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Invoquer une Servlet c’est utiliser tout d’abord un conteneurWeb (exp : JSWDK) pour sa mise en œuvre.

Déployer la Servlet au sein d’un serveur Web (supportantl’exécution des servlets).

[Optionnel selon le container web] Déclarer l’ajout de la Servlet

2. Servlets Java

2. Servlets Java

88-- Invocation d’une Invocation d’une ServletServlet à partir d’un à partir d’un navigateur Webnavigateur Web (1/7)(1/7)

Tarak CHAARI Application Web en Java ISECS 21

[Optionnel selon le container web] Déclarer l’ajout de la Servletdans le conteneur Web.

Copier le code compilé de la Servlet dans le répertoired’hébergement de la servlet (exp: webpages\WEB-INF\servlets)

Deux possibilités d’invocation d’une Servlet :

invocation de la méthode doGet(…),invocation de la méthode doPost(..).

2. Servlets Java

2. Servlets Java

Page 22: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

1ère Invocation de la méthode doGet(…) :

Saisie de l’URL de la Servlet dans la barre d’adresse dunavigateur.

http://<hôte>:<port>/servlet/<servlet>

2. Servlets Java

2. Servlets Java

88-- Invocation d’une Invocation d’une ServletServlet à partir d’un à partir d’un navigateur Webnavigateur Web (2/7)(2/7)

Tarak CHAARI Application Web en Java ISECS 22

http://localhost:8080/servlet/Hello

2. Servlets Java

2. Servlets Java

Page 23: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

2ième Invocation de la méthode doGet(…):

Clique sur un lien hypertexte qui pointe sur l’URL de laServlet.

2. Servlets Java

2. Servlets Java

88-- Invocation d’une Invocation d’une ServletServlet à partir d’un à partir d’un navigateur Webnavigateur Web (3/7)(3/7)

<HTML>

Index.html

Tarak CHAARI Application Web en Java ISECS 23

2. Servlets Java

2. Servlets Java

Cliquer pour tester la Servlet Hello

<HTML><HEAD>

<TITLE> Test de la servlet Heloo par clic sur lien </TITLE>

</HEAD><BODY><P><A href="/servlet/Hello" >Cliquer pour tester la Servlet Hello</A></P>

</BODY></HTML>

Page 24: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Invocation de la méthode doPost(…) :

La méthode doPost() d’une Servlet est invoquéeprincipalement lors de l’envoie des données saisies dans unformulaire HTML (par un clic sur un bouton de type

2. Servlets Java

2. Servlets Java

88-- Invocation d’une Invocation d’une ServletServlet à partir d’un à partir d’un navigateur Webnavigateur Web (4/7)(4/7)

Tarak CHAARI Application Web en Java ISECS 24

formulaire HTML (par un clic sur un bouton de typesubmit).

Exemple de méthode doPost() qui retourne une chaîne decaractères concaténée avec les valeurs des paramètrestransmis par le client.

2. Servlets Java

2. Servlets Java

Page 25: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Invocation de la méthode doPost(…) :

2. Servlets Java

2. Servlets Java

88-- Invocation d’une Invocation d’une ServletServlet à partir d’un à partir d’un navigateur Webnavigateur Web (5/7)(5/7)

<HTML><HEAD>

<TITLE> Test de la servlet Hello </TITLE></HEAD>

Index.html Test de la Servlet Hello

Tarak CHAARI Application Web en Java ISECS 25

2. Servlets Java

2. Servlets Java

<BODY><FORM action = "/servlet/Hello" method ="post"><P>Prenom : <INPUT type ="text" name="prenom"><BR>

Nom : <INPUT type ="text" name="nom"><BR>

<INPUT type ="submit" value="Valider"></P>

</FORM> </BODY></HTML>

http://localhost:8080/index.htm

Page 26: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Invocation de la méthode doPost(…) :

2. Servlets Java

2. Servlets Java

88-- Invocation d’une Invocation d’une ServletServlet à partir d’un à partir d’un navigateur Webnavigateur Web (6/7)(6/7)

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class Hello extends HttpServlet{

Hello.java

Tarak CHAARI Application Web en Java ISECS 26

2. Servlets Java

2. Servlets Java

public void doPost(HttpServletRequest req, HttpServletResponse res)throws ServletException, IOException {

String prenom = req.getParametre("prenom");

String nom = req.getParametre("nom");

res.setContentType ("text/html");PrintWriter out = res.getWriter() ;

out.println ("<HTML><BODY>");out.println ("<H1>Bonjour" +prenom+" "+ nom+"."+ "</H1>" );out.println ("</HTML><BODY> ");}

}

Page 27: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Invocation de la méthode doPost(…) :

2. Servlets Java

2. Servlets Java

88-- Invocation d’une Invocation d’une ServletServlet à partir d’un à partir d’un navigateur Webnavigateur Web (7/7)(7/7)

Hello

Tarak CHAARI Application Web en Java ISECS 27

2. Servlets Java

2. Servlets Java

http://localhost:8080/servlet/Hello

Page 28: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

De la même manière que pour chaque Servlet d’une applicationWeb, il est possible de déclarer des paramètres globaux(informations de configuration) pour toute l’application Web.

Ces paramètres peuvent être utiles pour déclarer desinformations susceptible d’être utilisées par plusieurs Servlets

2. Servlets Java

2. Servlets Java

99-- Paramètres de l’application WebParamètres de l’application Web (1/9)(1/9)

Tarak CHAARI Application Web en Java ISECS 28

informations susceptible d’être utilisées par plusieurs Servletsde l’application Web:

Nom et e-mail de l’administrateur, qui peuvent être utilisés pourgénérer une page d’erreur à un client.

Nom d’hôte ou adresse IP de machines distantes, qui peuventêtre utiles pour l’accès à des ressources distantes

Nom de la base de données, nom du pilote JDBC à utiliser, nomd’utilisateur et mot de passe pour établir la connexion,

Etc,

2. Servlets Java

2. Servlets Java

Page 29: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Les informations de configuration d’une application Web sontreprésentées par un objet de type javax.servlet.ServletContext.

Chaque Servlet d’une même application Web a donc accès à cesinformations.

2. Servlets Java

2. Servlets Java

99-- Paramètres de l’application WebParamètres de l’application Web (2/9)(2/9)

Tarak CHAARI Application Web en Java ISECS 29

L’objet javax.servlet.ServletContext propose des méthodespermettant de travailler principalement avec deux catégoriesde données :

Créer, lire et supprimer des attributs de façon logicielle,permettant le partage de ressources entre les Servlets d’unemême application Web.

2. Servlets Java

2. Servlets Java

Page 30: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Méthodes de l’interface javax.servlet.ServletContext dédiées àla récupération des paramètres globaux d’initialisation:

public String getInitParameter(String nom) :

Récupérer une chaîne de caractères contenant la valeur

2. Servlets Java

2. Servlets Java

1313-- Paramètres de l’application WebParamètres de l’application Web (4/9)(4/9)

Tarak CHAARI Application Web en Java ISECS 30

Récupérer une chaîne de caractères contenant la valeurd’un paramètre nommé nom ou la valeur null si leparamètre n’existe pas.

public java.util.Enumeration getInitParameterNames():

Récupérer sous la forme d’un objet de typejava.util.Enumeration l’ensemble des noms des paramètresdéclarés pour la Servlet.

2. Servlets Java

2. Servlets Java

Page 31: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Exemple de manipulation :

2. Servlets Java

2. Servlets Java

1313-- Paramètres de l’application WebParamètres de l’application Web (6/9)(6/9)

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

public class ErreurServlet extends HttpServlet{

public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

ErreurServlet.java

Tarak CHAARI Application Web en Java ISECS 31

2. Servlets Java

2. Servlets Java

public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

ServletContext application =getServletContext() ;String nom= application .getInitParameter ("nomAdmin");String email= application .getInitParameter (" emailAdmin");

res.setContentType(" text/html");PrintWriter out = res.getWriter() ;

out.println ("<HTML><BODY>");out.println ("<H1>Erreur de l’application</H1>" );out.println ("<BR><H4>Veuillez contacter <B>" + nom + "</B>" );out.println ("<A href =\"mailto:"+ email + "\" >"+email+"</A>" );out.println ("<H4></BODY></HTML> "); }}

Page 32: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Méthodes de l’interface javax.servlet.ServletContext dédiées àla gestion logicielle des attributs du contexte d’application:

public String setAttribute(String nom, Object objet) :

Créer un attribut dans le contexte de l’application Web. Si le nom del’attribut existe déjà, la valeur existante est remplacée par la nouvelle.

public Object getAttribute(String nom) :

2. Servlets Java

2. Servlets Java

1313-- Paramètres de l’application WebParamètres de l’application Web (8/9)(8/9)

Tarak CHAARI Application Web en Java ISECS 32

public Object getAttribute(String nom) :

Récupérer la valeur d’un attribut dont le nom est passé en paramètre, oula valeur null si l’attribut n’existe pas.

public java.util.Enumeration getAttributeNames():

Récupérer sous la forme d’un objet de type java.util.Enumeration le nomde tous les attributs stockées dans l’application Web.

public void removeAttribute(String nom):

Supprimer un attribut du contexte de l’application Web, dont le nom estpassé en paramètre.

2. Servlets Java

2. Servlets Java

Page 33: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Exemple de manipulation :

2. Servlets Java

2. Servlets Java

1313-- Paramètres de l’application WebParamètres de l’application Web (9/9)(9/9)

……..

Employé emp1 = new Employé (" Walid ", "MAHDI ");Employé emp2 = new Employé ("toto ", "titi ");Employé emp3 = new Employé (" tata ", "tatou ");………

javax.servlet.ServletContext contextApp = getServletContext() ;

contextApp.setAttribute (" Employé1 ", emp1);

Tarak CHAARI Application Web en Java ISECS 33

2. Servlets Java

2. Servlets Java

contextApp.setAttribute (" Employé1 ", emp1);contextApp.setAttribute (" Employé2 ", emp2);contextApp.setAttribute (" Employé3 ", emp3);……

javax.servlet.ServletContext contextApp = getServletContext() ;Java.util.Enumeration nomAttributs = contextApp.getAttributeNames ( );

while ( nomAttributs.hasMoreElements() ) {String nom = (String) nomAttributs.nextElement() ;Employé e = (Employé) contextApp .getAttribute( nom );……….

contextApp .removeAttribute( nom );……

Page 34: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Méthodes de Récupération d’informations sur l’URL de larequête

public String getScheme( ) :

Retourne le nom du protocole utilisé par le client pour émettre sarequête. Par exemple : http, ftp, etc.

2. Servlets Java

2. Servlets Java1414-- Interfaces ServletRequest et Interfaces ServletRequest et

HttpServletRequestHttpServletRequest (1/7)(1/7)

Tarak CHAARI Application Web en Java ISECS 34

public String getContextPath( ) :

Retourne sous la forme d’une chaîne de caractères commençantpar un /, la portion de l’URL de la requête correspondant au nomdu contexte de l’application Web . Par exemple : /MaWebApp.

public String getMethod():

Retourne le nom de la méthode HTTP(GET, POST, etc) utilisée parle client pour émettre sa requête.

2. Servlets Java

2. Servlets Java

Page 35: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Méthodes de récupération d’informations sur l’URL de larequête (suite)

public String getRequestURL( ) :

Retourne l’URL que le client a utilisée pour émettre sa requête.L’URL retournée contient le nom du protocole, le nom du serveur,

2. Servlets Java

2. Servlets Java1414-- Interfaces ServletRequest et Interfaces ServletRequest et

HttpServletRequestHttpServletRequest (2/7)(2/7)

Tarak CHAARI Application Web en Java ISECS 35

L’URL retournée contient le nom du protocole, le nom du serveur,le numéro de port et le chemin d’invocation de la ressource web,mais pas les paramètres de la chaîne de requête. Par exemple :http://localhost:8080/servlet/Hello.

public String getServletPath( ) :

Retourne la partie de l’URL qui invoque la Servlet/JSP, composéedu chemin et du nom ou de l’alias de la Servlet/JSP. Par exemple :/servlet/Hello.

2. Servlets Java

2. Servlets Java

Page 36: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Méthodes de récupération d’informations sur le client

public String getRemoteAddr( ) :

Retourne l’adresse IP du client qui a émis la requête. Par exemple

: 127.0.0.1

2. Servlets Java

2. Servlets Java1414-- Interfaces ServletRequest et Interfaces ServletRequest et

HttpServletRequestHttpServletRequest (3/7)(3/7)

Tarak CHAARI Application Web en Java ISECS 36

public String getRemoteHost( ) :

Retourne le nom complet du client qui a émis la requête. Par

exemple : 127.0.0.1

public String getRemoteUser( ) :

Retourne le nom de l’utilisateur qui a envoyé la requête si celuis’est authentifié au préalable, sinon retourne la valeur null.

2. Servlets Java

2. Servlets Java

Page 37: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Méthodes de récupération d’informations sur le serveur

public String getServerName( ) :

Retourne le nom d’hôte du serveur qui a reçu la requête. Par

exemple : loclahost

2. Servlets Java

2. Servlets Java1414-- Interfaces ServletRequest et Interfaces ServletRequest et

HttpServletRequestHttpServletRequest (4/7)(4/7)

Tarak CHAARI Application Web en Java ISECS 37

public String getServerPort( ) :

Retourne le numéro de port d’écoute du serveur qui a reçu la

requête. Par exemple : 8080

2. Servlets Java

2. Servlets Java

Page 38: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Méthodes de récupération d’informations dans l’en-tête HTTP

public String getHeader(String nom ) :

Retourne la valeur de l’entête nommé, passé en paramètre ou lavaleur null si l’entête n’existe pas. Le nom de l’entête est sensibleà la casse. Par exemple : getHeader("Accept-Language")

retourne fr.

2. Servlets Java

2. Servlets Java1414-- Interfaces ServletRequest et Interfaces ServletRequest et

HttpServletRequestHttpServletRequest (5/7)(5/7)

Tarak CHAARI Application Web en Java ISECS 38

retourne fr.

public java.util.Enumeration getHeaders(String nom ) :

Retourne sous la forme d’un objet de type java.util.Enumerationl’ensemble des valeurs de l’en-tête de la requête spécifié enparamètre.

public java.util.Enumeration getHeaderNames() :

Retourne sous la forme d’un objet de type java.util.Enumerationl’ensemble des noms des en-têtes contenus dans la requête.

2. Servlets Java

2. Servlets Java

Page 39: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;import java.util.*;

AfficheHeaders.java

1414-- Interfaces ServletRequest et Interfaces ServletRequest et HttpServletRequestHttpServletRequest (6/7)(6/7)

Exemple de manipulation :

2. Servlets Java

2. Servlets Java

Tarak CHAARI Application Web en Java ISECS 39

import java.util.*;

public class AfficheHeaders extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {PrintWriter out = res.getWriter();res.setContentType("Text/plain"); Enumeration enum = req.getHeaderNames( ) ;

while (enum.hasMoreElements() ) {String headerNom = (String) enum.nextElement() ;out.println(headerNom+" = "+ req.getHeader(headerNom));

}

}}

2. Servlets Java

2. Servlets Java

Page 40: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

AfficheHeaders

Exemple de manipulation (suite):

2. Servlets Java

2. Servlets Java1414-- Interfaces ServletRequest et Interfaces ServletRequest et

HttpServletRequestHttpServletRequest (7/7)(7/7)

Tarak CHAARI Application Web en Java ISECS 40

accept = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shoc

accept-language = fr

accept-encoding = gzip, deflate

user-agent = Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; ESB{27A4ABBB-B657

host = localhost:8080

connection = Keep-Alive

http://localhost:8080/servlet/AfficheHeaders

2. Servlets Java

2. Servlets Java

Page 41: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Méthodes de déclaration du type du contenu et de la taille dela réponse

public void setContentType(String type ) :

Spécifier le type MIMIE de contenu du corps de la réponse HTTP.Par exemple text/html pour du HTML, text/plain pour du texte brut,

2. Servlets Java

2. Servlets Java

1515-- Interfaces ServletResponse et Interfaces ServletResponse et HttpServletResponseHttpServletResponse (1/7)(1/7)

Tarak CHAARI Application Web en Java ISECS 41

Par exemple text/html pour du HTML, text/plain pour du texte brut,application/pdf pour un document Adobe pdf …

public void setContentLength(int taille) :

Spécifier la taille du contenu de la réponse HTTP. Autrement ditdéfinir l’en-tête HTTP Content-Length.

2. Servlets Java

2. Servlets Java

Page 42: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Méthodes de renseignement des informations dans l’en-têteHTTP

public void setHeader(String nom, String Valeur) :

Initialiser un en-tête dans la réponse HTTP, avec le nom et la valeurspécifiés en paramètres. Si l’en-tête existe déjà, la nouvelle valeur

2. Servlets Java

2. Servlets Java

1515-- Interfaces ServletResponse et Interfaces ServletResponse et HttpServletResponseHttpServletResponse (2/7)(2/7)

Tarak CHAARI Application Web en Java ISECS 42

spécifiés en paramètres. Si l’en-tête existe déjà, la nouvelle valeurremplace l’ancienne

public void addHeader(String nom, String Valeur) :

Ajouter un en-tête dans la réponse HTTP, avec le nom et la valeurspécifiés en paramètres. Cette méthode permet à un en-têted’avoir plusieurs valeurs.

public boolean containsHeader(String nom) :

Retourne un booléen indiquant si un entête existe ou non.

2. Servlets Java

2. Servlets Java

Page 43: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Méthodes d’envoi d’erreurs et d’états HTTP

public void sendError(int sc) throws java.io.IOException

public void sendError(int sc,String message) throws java.io.IOException

Envoyer un code d’erreur HTTP au client. Par exemple SC-NOT-

2. Servlets Java

2. Servlets Java

1515-- Interfaces ServletResponse et Interfaces ServletResponse et HttpServletResponseHttpServletResponse (3/7)(3/7)

Tarak CHAARI Application Web en Java ISECS 43

Envoyer un code d’erreur HTTP au client. Par exemple SC-NOT-

FOUND(404) ou SC-SERVICE-UNAVAILABLE(503).

public void sendStatus(int sc) :

Appliquer un code d’état à la réponse HTTP quand il n’y a pasd’erreur, comme par exemple SC-OK(200) ou SC-CONTINUE(100).

2. Servlets Java

2. Servlets Java

Page 44: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Méthodes de redirection d’URL

public void sendRedirect(String url) throws java.io.IOException

Envoyer au navigateur du client un ordre de redirection sur uneautre ressources Web, qui peut être de la même application Webou nom.

2. Servlets Java

2. Servlets Java

1515-- Interfaces ServletResponse et Interfaces ServletResponse et HttpServletResponseHttpServletResponse (4/7)(4/7)

Tarak CHAARI Application Web en Java ISECS 44

ou nom.

L’URL de la ressources Web passée en paramètre peut êtrerelative ou absolue.

Exemple d’URL relative :

res.sendRedirect("/MaWebApp/indentification.html" )

Exemple d’URL absolue :

res.sendRedirect("http://www.tunisie.com" );

2. Servlets Java

2. Servlets Java

Page 45: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Méthodes pull client

Le pull client est similaire à la redirection, avec une différenceprincipale : le navigateur affiche le contenu de la première pageet attends un certain temps avant de retrouver et afficher lecontenu de la page suivante.

2. Servlets Java

2. Servlets Java

1515-- Interfaces ServletResponse et Interfaces ServletResponse et HttpServletResponseHttpServletResponse (5/7)(5/7)

Tarak CHAARI Application Web en Java ISECS 45

et attends un certain temps avant de retrouver et afficher lecontenu de la page suivante.

Utilités :

Le contenu de la première page peut expliquer au client que lapage demandée a été déplacée avant que la page suivante nesoit automatiquement chargée.

Les pages peuvent être retrouvées en séquence, rendant ainsipossible une animation de mouvements de âges lent.

2. Servlets Java

2. Servlets Java

Page 46: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Méthodes pull client (suite)

L’information de pull client est envoyée au client via l’en-têteHTTP Refresh.

La valeur de cet en-tête indique le nombre de secondes pendantlesquelles la page doit être affichée avant d’aller chercher laprochaine et elle peut aussi inclure l’URL indiquant où aller la

2. Servlets Java

2. Servlets Java

1515-- Interfaces ServletResponse et Interfaces ServletResponse et HttpServletResponseHttpServletResponse (6/7)(6/7)

Tarak CHAARI Application Web en Java ISECS 46

lesquelles la page doit être affichée avant d’aller chercher laprochaine et elle peut aussi inclure l’URL indiquant où aller lachercher.

res.SetHeader("Refresh", "3" );

Indique au client de recharger la même Servlet après avoiraffiché son contenu courant pendant trois secondes

res.SetHeader("Refresh", "3;URL=http://www.tunisie.com");

Indique au client d’afficher la page d’accueil Tunisie après troissecondes.

2. Servlets Java

2. Servlets Java

Page 47: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Exemple de manipulation : Mise à jour de l’heure courante

2. Servlets Java

2. Servlets Java

1515-- Interfaces ServletResponse et Interfaces ServletResponse et HttpServletResponseHttpServletResponse (7/7)(7/7)

import java.io.*;import javax.servlet.*;import javax.servlet.http.*;

ClientPull.java

Tarak CHAARI Application Web en Java ISECS 47

2. Servlets Java

2. Servlets Java

import javax.servlet.http.*;import java.util.*;

public class ClientPull extends HttpServlet{

public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {res.setContentType("Text/plain"); PrintWriter out = res.getWriter();

res.setHeader ("Refresh", "60");

out.println(new Date().toString());

}}

Page 48: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Agrégation de résultats fournis par des Servlets :

meilleure modularité,

meilleure réutilisation.

2. Servlets Java

2. Servlets Java

1717-- Collaboration entre Servlets : Collaboration entre Servlets : L’Interface RequestDispatcherL’Interface RequestDispatcher (1/2) (1/2)

servlet4

Tarak CHAARI Application Web en Java ISECS 48

2. Servlets Java

2. Servlets Java

Servlet

servlet1

servlet2

servlet3

servlet5

Page 49: Chapitre1 Programmation Web - Redcad Laboratory · 2016-08-27 · 2. Servlets Java 44--L’API ServletL’API Servlet (3/5) Servlet interface Chaque Servlet utilisateur doit implémenter

Obtention d’un RequestDispatcher :

dans la méthode de traitement de requête de Servlet

2. Servlets Java

2. Servlets Java

1717-- Collaboration entre Servlets : Collaboration entre Servlets : L’Interface RequestDispatcherL’Interface RequestDispatcher (1/2) (1/2)

……………..

RequestDispatcher rd;rd = getServeletContext().getRequestDispatcher ("/servlet/MaServlet");

Tarak CHAARI Application Web en Java ISECS 49

Redirection d’une requête

dans méthode de traitement de requête, demande à une autreServlet de répondre au client

2. Servlets Java

2. Servlets Java

rd = getServeletContext().getRequestDispatcher ("/servlet/MaServlet");

if( rd==null) res.sendError (404);………….

rd .forward( req, res);