Top Banner
1 Applications Web Khaled Khelif Cours 2: Introduction J2EE Servlets et JSP
50

Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

Apr 16, 2020

Download

Documents

dariahiddleston
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

1

Applications Web

Khaled Khelif

Cours 2: Introduction J2EEServlets et JSP

Page 2: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

2

Rappel

• Web statique vs. Web dynamique• Principe des applications web• Protocole HTTP : requêtes en mode

texte

Développement d’applications Web dynamiques : Utilisation de J2EE

Page 3: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

3

Plan

• J2EE

• Servlets

• JSP

Page 4: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

4

J2EE en bref

• Java 2 Enterprise Edition

• Plate-forme fortement orientée serveur pour le développement et l'exécution d'applications distribuées et donc en particulier Web.

Page 5: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

5

J2EE en bref

2 grands types d’outils:

• Composants web et métiers

• Services d’infrastructure (exp: JDBC, JNDI…) et de communication (exp: JAAS, WS…)

Page 6: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

6

J2EE en brefLes composants:

– Web

• partie présentation (interface utilisateur et traitements).

• Le client reçoit seulement du texte HTML=> la partie visible de l’application.

• Derrière, différentes technologies => code plus performant, plus robuste, et plus facile à maintenir.���� Servlet et JSP

– Métiers

• composants spécifiques pour le traitement des données et l'interfaçage avec les bases de données.

���� EJB (Entreprise JavaBean) , JavaBean

Page 7: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

7

J2EE en bref

Les serveurs d’applications J2EE:

– Pour le développement Servlet/JSP � Conteneur de Servlet

Tomcat, Resin, Jetty….

– Pour l’ensemble des spécifications J2EE � Conteneur d’EJB

JBoss, Jonas, WebSphere Application Server…

Page 8: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

8

J2EE en bref

Conteneur ou moteur de Servlet

– Mode Autonome• Contient également un serveur web

• Toutes les requêtes passent par le moteur de Servlet

– Mode lié au serveur Web • Sollicité uniquement pour le traitement des Servlet

Page 9: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

9

J2EE en bref

Page 10: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

10

J2EE vs .Net

• Un concurrent de taille : Microsoft .net

• Un ensemble de technos rendant les applications facilement

accessible par Internet

37%J2EE libre

27%J2EE commercial

36%.net

Page 11: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

11

Servlet: présentation

• Pour la création d’applications dynamiques

• Classe java : chargée dynamiquement, elle étend les fonctionnalités d’un serveur web et répond à des requêtes dynamiquement � Permet de gérer des requêtes HTTP et de fournir au client une réponse HTTP

• S’exécute par l'intermédiaire d’une JVM

• S’exécute dans un moteur de Servlet ou conteneur de Servletpermettant d’établir le lien entre la Servlet et le serveur Web

Page 12: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

12

Servlet: avantages

• Portabilité :niveau systèmes et serveurs

• Efficacité : semi compilée, multithread, gestion du cache, connexions persistantes

• Puissance : communication bidirectionnelle avec le serveur web, partage de données entre servlets, chaînage de servlets

• Pratique : gestion des cookies, suivi des sessions, manipulation simple du protocole HTTP

Page 13: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

13

Servlet: inconvénient

Limitée en matière de GUI car elle s’exécute cote serveur : couplage avec des technos comme Flash ou les applets

Page 14: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

14

Servlet : fonctionnement

Serveur Web

connexion

Envoi requête Si demande d’accès à une

servlet S

•Vérifie que S est instanciée•Si 1er appel:

•crée une instance de S•Appelle init( )

•Appelle service( requête, réponse)

•Vérifie que S est instanciée•Si 1er appel:

•crée une instance de S•Appelle init( )

•Appelle service( requête, réponse)

Moteur de ServletsEnvoi

requête

Envoi résultat

Envoi réponse

déconnexion

Page 15: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

15

Servlet : cycle de vie

• Une seule instance par Servlet est utilisée

• Une requête client a pour résultat un nouveau thread transmis à service()

• Une Servlet est initialisée, utilisée puis détruite �Cycle de vie de la Servlet

Page 16: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

16

Servlet : cycle de vie

• Initialisation: méthode init()

– Appelée uniquement lors du 1er appel à la Servlet

– Effectue des opérations de paramétrage et d’initialisation de la Servlet

– Avec ou sans paramètres (besoin d’accéder ou non aux paramètres de configuration du serveur)

Page 17: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

17

Servlet : cycle de vie

• Utilisation: méthode service() – Appelée pour chaque requête reçue

– Paramètres: ServletRequest et ServletResponse

• Destruction: méthode destroy() – Suppression de l’instance de la Servlet (demande

administrateur, temps d’inactivité trop grand)

– Fermeture de connexion à une BD, fermeture de fichiers…

Page 18: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

18

Servlet : cycle de vie

Page 19: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

19

Servlet : du générique au http

• Une Servlet doit implémenter l'interface javax.servlet.Servlet et javax.servlet.ServletConfig

Servlet <<Interface>>

+ void init(…)

+ void service(…)

+ void destroy()

+ ServletConfig getServletConfig()

+ String getServletInfo()

ServletConfig <<Interface>>

+ String getInitParameter(…)

+ Enumeration getInitParameterNames()

+ String getServletName()

+ ServletContext getServletContext()

Page 20: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

20

Servlet : du générique au http

• l'API Servlet fournit deux classes qui proposent déjà une implémentation:

• GenericServlet : pour la conception de Servlets indépendantes du protocole

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

Page 21: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

21

Servlet : du générique au http

Page 22: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

22

Servlet: GenericServlet

• Indépendante du protocole• Implémentation de la méthode service(…)

Serveur Webrequête

Moteur de Servlets: Sous-classe de GenericServlet

réponse

Service(…) Service(…)

Page 23: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

23

Servlet : exemple1Hérite de

GenericServletNotre Servlet

On implémente la méthode

service

La requête reçue et la réponse

renvoyée

Page 24: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

24

Serveur WebRequête GET

réponse

Service(…) Service(…)

Moteur de Servlets: Sous-classe de HttpServlet

Serveur Web

Requête POSTréponse

Servlet: HttpServlet

• Redéfinit la méthode service(…) qui:– lit la méthode (GET, POST…) à partir de la requête– transmet la requête a une méthode appropriée de HttpServlet (qui

traite ce type de requête)

doHead(…) doHead(…)

doPost(…) doPost(…)

doGet(…) doGet(…)

Page 25: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

25

import java.io.*;

import javax.servlet.*;

import javax.servlet.http.*;

public class HelloWorld extends HttpServlet {

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 World</TITLE></HEAD>");

out.println("<BODY>");

out.println("<BIG>Hello World</BIG>");

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

}

}

Servlet : exemple2Hérite de HttpServlet

On implémente la méthode

doGet

Http[ServletRequest,ServletResponse]

Page 26: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

26

Servlet : HttpServletResponse

Utilisé pour construire un message de réponse HTTP renvoyé au clientContient :• les méthodes nécessaires pour définir le type de contenu, en-tête et

code de retour• un flot de sortie pour envoyer des données (par exemple HTML) au

client

� void setStatus(int) : définit le code de retour de la réponse� void setContentType(String) : définit le type de contenu MIME� PrintWriter getWriter() : permet d’envoyer des données texte au client� ServletOutputStream getOutputStream() : flot pour envoyer des

données binaires au client� void sendRedirect(String) : redirige le navigateur vers l'URL

Page 27: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

27

Servlet : HttpServletResponse

Page 28: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

28

Servlet : HttpServletRequest

Encapsule la requête HTTP et fournit des méthodes pour :

• récupérer les paramètres passés au serveur par le client

• accéder aux informations du client et de l'environnement du serveur

� String getMethod() : retourne le type de requête

� String getServeurName() : retourne le nom du serveur

� String getParameter(String name) : retourne la valeur d'un paramètre

� String[] getParameterNames() : retourne le nom des paramètres

� String getRemoteAddr() : retourne l'IP du client

� String getServerPort() : retourne le port sur lequel le serveur écoute

� …(voir l'API Servlets)

Page 29: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

29

Servlet : HttpServletRequest

Page 30: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

30

Servlet : Exercices

1. Quelles possibilités s’offrent à nous, si on ne veut pas différencier le type de la méthode utilisée pour la requête?

utiliser la classe GenericServlet ou implémenter uniquement la méthode service()

2. Proposez une implémentation des méthodes doGet et doPost si on veut avoir le même comportement pour ces deux types d’appel

L’une appelle l’autre

3. Sans implémenter une méthode doHead, proposez une implémentation pour supporter cette méthode.

Page 31: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

31

Servlet : Exercices3. Sans implémenter une méthode doHead, proposez une implémentation pour supporter

cette méthode.

en détectant les requêtes de type HEAD dans la méthode doGet():

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

// l'attribut Content-Type de l'entête (Head)

res.setContentType("text/html");

// Si la méthode est HEAD renvoyer le résultat(ici Content-Type de l'entête) if (req.getMethod().equals("HEAD")) return;

// Sinon, corps de la servlet

PrintWriter out = res.getWriter();

out.println("<HTML>");

.....}

Page 32: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

32

Servlet : ExercicesEcrire une servlet qui selon la valeur du paramètre

« action » reçu:

=« erreur » :Affiche une page d’erreur

=« redirect »:Redirige vers « redirection.html »

=« page »: Affiche une page avec un texte de votre choix

void setStatus(int) : définit le code de retour de la réponsevoid setContentType(String) : définit le type de contenu MIMEPrintWriter getWriter() : permet d’envoyer des données texte au clientServletOutputStream getOutputStream() : flotpour envoyer des données binaires au clientvoid sendRedirect(String) : redirige le navigateurvers l'URL

String getMethod() : retourne le type de requêteString getServeurName() : retourne le nom du serveurString getParameter(String name) : retourne la valeur d'un paramètreString[] getParameterNames() : retourne le nom des paramètresString getRemoteAddr() : retourne l'IP du clientString getServerPort() : retourne le port sur lequelle serveur écoute…(voir l'API Servlets)

HttpServletRequestHttpServletResponse

Page 33: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

33

Servlet et formulaires

• Utilisation de la balise <FORM> </FORM>– Option METHOD : type de requête GET ou POST– Option ACTION : l’URL où envoyer les données

• Utilisation de composants IHM pour saisir des informations– Contenu à l’intérieur de la balise FORM– Chaque composant est défini au moyen d’une balise particulière

SELECT, INPUT, TEXTAREA, …

• Chaque composant a un nom (NAME) qui permet de l’identifierNAME="mon_composant "

• Les données sont envoyées quand l’utilisateur clique sur un bouton de type SUBMIT

Page 34: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

34

Servlet et formulaires

Page 35: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

35

Servlet et formulaires

Accéder aux paramètres par l’intermédiaire de l’objet HttpServletRequest :

• String getParameter (String p) : retourne la valeur du paramètre p

• String[] getParamterValues (String p) : retourne les valeurs du paramètre p

Page 36: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

36

Servlet et formulaires

Exercice:Ecrire la servlet FormulaireServlet qui permet à partir d’une

action sur le formulaire précédent d’affiche une page telle que:

Page 37: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

37

Servlet et formulaires

Page 38: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

38

Servlet: suivi de session

• HTTP : protocole sans état

� Impossibilité de garder des informations d’une requête àl’autre (identifier un client d’un autre)

� Utilisation de différentes solutions pour remédier au problème d’état dont:

– Cookies

– HttpSession

Page 39: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

39

Servlet : cookies

Rappel:

• cookie : information envoyée au navigateur (client) par un serveur WEB qui peut ensuite être relue par le client

• Lorsqu’un client reçoit un cookie, il le sauve et le renvoie ensuite au serveur chaque fois qu’il accède àune page sur ce serveur

Page 40: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

40

Servlet : cookies

• Classe javax.servlet.http.Cookie pour utiliser les Cookies

� Cookie(String name, String value) : construit un cookie

� String getName() : retourne le nom du cookie

� String getValue() : retourne la valeur du cookie

� setValue(String new_value) : donne une nouvelle valeur au cookie

� setMaxAge(int expiry) : spécifie l’âge maximum du cookie

Page 41: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

41

Servlet : cookies

• Création d’un nouveau cookie�Ajout à la réponse (HttpServletResponse)

� addCookie(Cookie mon_cook) : ajoute à la réponse un cookie

• Récupération des cookies du client �Récupération dans la requête (HttpServletRequest)

� Cookie[] getCookies() : récupère l’ensemble des cookies du site

Page 42: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

42

Servlet : cookies

Page 43: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

43

Servlet : cookies

Exercice:

Implémenter la méthode doGet pour gérer les cookies:

•Si le client est déjà connu affichage d’un message: « Encore vous »

•Sinon attribution d’un cookie (sessionId) au client et affichage d’un message: « Bonjour le nouveau »

Utiliser java.rmi.server.UID().toString pour générer un identifiant

Page 44: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

44

Servlet : cookies

Page 45: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

45

Servlet: HttpSessionAPI de suivi de session HttpSession

• Méthodes de création liées à la requête (HttpServletRequest) � HttpSession getSession() : retourne la session associée à l’utilisateur� HttpSession getSession(boolean p) : création selon la valeur de p

• Gestion d’association (HttpSession) � Enumeration getAttributNames() : retourne les noms de tous les attributs� Object getAttribut(String name) : retourne l’objet associé au nom� setAttribut(String na, Object va) : modifie na par la valeur va� removeAttribut(String na) : supprime l’attribut associé à na

• Destruction (HttpSession) � invalidate() : expire la session� logout() : termine la session

Page 46: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

46

Servlet: HttpSession

Exercice:

Implémenter la méthode doGet pour gérer le suivi de session:

Affiche un compteur qui est incrémentéà chaque accès sur cette servlet pendant une session.

Page 47: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

47

Servlet: HttpSession

Page 48: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

48

Servlet: déploiement

Page 49: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

49

Servlet: déploiement

Page 50: Applications Web - unice.frmiageprojet2.unice.fr/@api/deki/files/77/=cours2_(3).pdf · 2009-02-18 · partage de données entre servlets, chaînage de servlets • Pratique : gestion

50

A venir : Les JSP