• Aucun résultat trouvé

[PDF] Apprendre JEE ressource de formation approfondie | Cours j2ee

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Apprendre JEE ressource de formation approfondie | Cours j2ee"

Copied!
68
0
0

Texte intégral

(1)

Programmation OO

Avancée

Architecture JEE

Mme Sameh HBAIEB TURKI

Maître technlogue

Département: Technologies de l’informatique

Institut Supérieur des Etudes Technologiques de Mahdia

(2)

Présentation du cours

Objectif général:

A l’issue de ce cours, l’étudiant sera capable de développer une application web pouvant s'exécuter dans l'un des nombreux conteneurs du marché : IBM WebSphere, BEA WebLogic, JBoss server, Apache Tomcat, Sun appServe.

Objectifs spécifiques:

- Connaître les fondements des architectures n-tiers et l'architecture J2EE, - Savoir utiliser les technologies Servlet/JSP,

- Connaître les bonnes pratiques pour développer des accès aux bases de données avec JDBC et les pools de connexions,

(3)

Présentation du cours

Pré-requis:

Cette matière requiert que l'étudiant ait suivi une formation sur la programmation Orientée Objet et la Programmation Web.

Plan du cours:

1. Introduction au JEE 2. Les servlets

3. Les pages JSP

4. Les classes Java Beans

5. Le patron de conception MVC 6. L’accès aux données avec JDBC

(4)

Chapitre 1:

(5)

Evolution du web

Le web 1.0, encore appelé web traditionnel, est avant tout un web statique, centré sur la distribution

d’informations. Il se caractérise par des sites orientés produits, qui sollicitent peu l’intervention des utilisateurs. Les premiers sites d’e-commerce datent de cette époque.

(6)

Evolution du web

Le web 2.0, ou web social, change totalement de perspective. Il privilégie la dimension de partage et d’échange d’informations et de contenus (textes, vidéos, images ou autres). Il voit

l’émergence des réseaux sociaux, des smartphones et des blogs. Le web se démocratise et se dynamise.

(7)

Evolution du web

Le web 3.0, aussi nommé web

sémantique, vise à organiser la masse d’informations disponibles en fonction du contexte et des besoins de chaque utilisateur, en tenant compte de sa localisation, de ses préférences, etc. C’est un web qui tente de donner sens aux données. C’est aussi un web plus portable et qui fait de plus en plus le lien entre monde réel et monde virtuel. Il répond aux besoins d’utilisateurs

mobiles, toujours connectés à travers une multitude de supports

(8)

Evolution du web

Le web 4.0, évoqué par certains comme le web intelligent, effraie autant qu’il fascine, puisqu’il vise à immerger

l’individu dans un environnement (web) de plus en plus prégnant. Il pousse à son paroxysme la voie de la

personnalisation ouverte par le web 3.0 mais il pose par la même occasion de nombreuses questions quant à la

protection de la vie privée, au contrôle des données, etc.

(9)

Survol sur les architectures des applications web

 Définition d’une architecture:

En informatique, une architecture désigne la structure générale inhérente d’un système informatique, l'organisation des différents éléments du système

(logiciels et/ou matériels et/ou humains et/ou informations) et des relations entre les éléments.

 Définition d’une application web:

Une application web est une interface web applicative disponible uniquement sur le web et accessible via un navigateur internet. C’est une application qui peut être hébergée en cloud ou sur des serveurs dédiés. Toutes les données sont stockées sur un serveur web.

(10)

Survol sur les architectures des applications web

Une application web se compose de 3 parties qui sont intégrées et coopèrent pour son fonctionnement :

Interface utilisateur pour interagir avec l'application

c’est la partie applicative de

l’application qui intègre la logique métier : les services offerts aux utilisateurs.

Enregistrement des données de

l’application sur un support physique : Fichiers (texte, binaire, XML, ...), Base de données relationnelles, etc.

(11)

Survol sur les architectures des applications web

1. Modèle un-tiers :

Toutes les parties sont placées et exécutées sur une même machine

2. Modèle deux-tiers : appelé aussi client/serveur - Client : partie présentation, interface utilisateur

(12)

Survol sur les architectures des applications web

2. Modèle deux-tiers : appelé aussi client/serveur (suite) Les services métier ou la partie applicative peuvent être :

- Soit entièrement coté client, intégrés avec la présentation. La partie serveur ne gère que les données (client : présentation + applicatif)

- Soit entièrement coté serveur. La partie client ne gère que l'interface utilisateur (serveur : applicatif + gestion des données)

(13)

Survol sur les architectures des applications web

2. Modèle deux-tiers : appelé aussi client/serveur (suite) Les services métier ou la partie applicative peuvent être : - Soit découpés entre la partie serveur et la partie client

(14)

Survol sur les architectures des applications web

3. Modèle trois-tiers :

Les 3 principaux tiers s'exécutent chacun sur une machine différente :

- Couche Présentation : Navigateur web sur machine cliente, affichage de contenu HTML

- Couche Applicative / métier : Serveur d'applications c’est un serveur HTTP exécutant des composants / éléments logiciels qui génèrent

dynamiquement du contenu HTML via des requêtes à des BDD distantes - Couche Persistance : Serveur de base de données

(15)

Survol sur les architectures des applications web

4. Modèle n-tiers :

- Ce modèle rajoute des couches (tiers) en plus.

- La couche applicative n'est pas monolithique : elle peut s'appuyer et interagir avec d'autres services.

- Un service métier utilise d'autres services métiers.

- Chaque service correspond à une couche, d'où le terme de N-tiers.

Intérêts d'avoir plusieurs services / couches :

- Réutilisation de services existants

- Découplage des aspects métiers et technique et des services entre eux : meilleure modularité.

- Facilité d’évolution : nouvelle version de service

- Facilité de passage à l'échelle : évolution de certains services : permet de faire évoluer les services un par un sans modification du reste de l'application

(16)

Survol sur les architectures des applications web

4. Modèle n-tiers (suite) :

Inconvénients :

- En général, les divers services s'appuient sur des technologies très variées,

d'où la nécessité de gérer l'hétérogénéité et l'interopérabilité des services. - Nécessité d’utiliser des framework et/ou outils supplémentaires

- Les services étant plus découpés et distribués, pose plus de problèmes liés à la distribution

(17)

Survol sur les architectures des applications web

Une application 3/N-tiers intègre un grand nombre de technologies :

- Présentation : HTML/CSS, librairies graphiques...

- Applicatif : objets, composants, scripts exécutables, services ... - Données : fichiers XML, SGBDR, ...

- Protocoles de communication : RPC/RMI, HTTP, messages, ...

Pour faciliter l'intégration de ces technologies et le développement

d'applications web n-tiers, de nombreux éditeurs offrent des frameworks globaux comme Java EE chez Oracle et .Net chez Microsoft.

(18)

Présentation de l’architecture JavaEE

 JavaEE (Java Enterprise Edition) est une plateforme qui permet de faciliter le développement d’application d’entreprise en fournissant un

(19)

Présentation de l’architecture JavaEE

 J2EE s’appuie sur le langage Java :

- Java est un langage orienté objet dont la syntaxe est dérivé du C et dont la conception résulte de l’expérience de divers langages (Smalltalk, Ada, C++ …) - Java est un langage semi-compilé. Le code obtenu après compilation

s’appelle du byte-code et ce code est interprétable par une JVM (Java Virtual Machine). Cependant, Java peut également être complètement compilé

(transformé en langage machine) si nécessaire.

- Java est portable sur toutes les plate-formes puisqu’il existe des machines virtuelles pour chacune. (Les navigateurs intègrent des machines virtuelles java).

(20)

Présentation de l’architecture JavaEE

 JavaEE s’appuie sur des concepts objet :

- Classe : type d’objet caractérisé par sa structure de données (attributs) et son comportement (méthodes).

- Objet : instance de classe.

- Héritage : Mécanisme permettant à une classe d’objets de bénéficier de la structure de données et du comportement d’une classe "mère", tout en lui

permettant de les affiner et ce, afin de prendre en compte les spécificités de la classe "fille", sans avoir cependant à redéfinir ce que les deux classes ont de commun.

- Abstraction : Mécanisme permettant la dissociation entre la déclaration d’une classe et son implémentation.

- Polymorphisme : Mécanisme permettant d’associer à un comportement, une implémentation différente en fonction de l’objet auquel on se réfère.

- Encapsulation : Mécanisme permettant de dissimuler les détails du fonctionnement interne d’une classe aux autres classes.

(21)

Les composants JavaEE

 L’architecture JEE est une architecture d’application distribuée à base de composants.

 Les applications Java EE sont constituées de composants.

 Un composant Java EE est une entité logicielle fonctionnelle autonome qui est assemblée dans une application Java EE avec ses classes et fichiers

associés et qui communique avec d’autres composants.

 La spécification Java EE définie les composants Java EE suivants : - Les composants Clients ou tiers Client qui sont exécutés côté client

- Les composants Web ou tiers Web exécutés côté serveur (Moteur web) - Les composants métier ou tiers Métier exécutés côté serveur (Moteur d’application)

(22)
(23)

Les composants clients

 Les clients web sont composés de deux parties,

(1) des pages web dynamiques contenant différents types de langage de balise (HTML, XML, etc.) et générées par des composants web s’exécutant dans la couche tiers Web et

(2) un navigateur web qui présente ou affiche les pages envoyées par le serveur.

 Un client web est parfois appelé client léger. Les clients légers ne consultent généralement pas les bases de données, n’exécutent pas de règles métiers complexes ou ne se connectent pas aux applications héritées.

 Lorsqu’on utilise un client léger, ces opérations lourdes sont déchargées sur les java beans s’exécutant sur le serveur Java EE, où ils peuvent tirer parti de la sécurité, la vitesse, des services et de la fiabilité des technologies Java EE.

(24)

Les composants web

 Les composants Web Java EE sont des servlets ou des pages créés à l'aide de la technologie JSP (pages JSP) et/ou de la technologie JavaServer Faces.  Les servlets sont des classes de langage de programmation Java qui traitent

dynamiquement les requêtes et construisent des réponses.

 Le Web tiers, tout comme le client tiers, peut inclure un composant

JavaBeans pour gérer l'entrée utilisateur et envoyer cette entrée aux beans enterprise s'exécutant dans le tiers métier (Business tiers).

(25)

Les composants métier

 EJB (Entreprise Java Beans) est la partie centrale de la plate-forme J2EE  Les EJB permettent d’implanter la logique de traitement

 Caractéristiques principales des EJB:

- composants "serveurs" spécialisés écrits en Java

- Support pour les aspects non fonctionnels de l’application: Persistance, Transaction, Sécurité, etc

(26)

Les API J2EE

 J2EE regroupe un ensemble d'API pour le développement d'applications d'entreprise.

 Ces API peuvent être regroupées en trois grandes catégories : - les composants : Servlet, JSP, EJB

- les services : JDBC, JTA (Java Transaction API)/JTS, JNDI (Java Naming and Directory Interface), JCA (J2EE Connector Architecture), JAAS (Java

Authentication and Authorization Service)

- communication : RMI-IIOP (Remote Method Invocation), JMS (Java Message service) , Java Mail

(27)

Les conteneurs JavaEE

 Les conteneurs assurent la gestion du cycle de vie des composants.

 Les conteneurs permettent aux applications d'accéder aux ressources et aux services en utilisant les API.

 Les appels aux composants se font par des clients en passant par les

conteneurs. Les clients n'accèdent pas directement aux composants mais sollicitent le conteneur pour les utiliser.

 Il existe plusieurs conteneurs définis par J2EE :

- conteneur web : pour exécuter les servlets et les JSP (ex: serveur Tomcat) - conteneur d'EJB : pour exécuter les EJB (ex: serveur JBoss)

- conteneur client : pour exécuter des applications standalone sur les postes qui utilisent des composants J2EE

 Les serveurs d'applications peuvent fournir un conteneur web uniquement (exemple : Tomcat) ou un conteneur d'EJB uniquement (exemple : JBoss, Jonas, ...) ou les deux (exemple : Websphere, Weblogic, ...).

(28)

Les étapes d’exécution d’une requête cliente

(3) La servlet contrôle la validité de la requête HTTP.

(4) Elle instancie les beans (EJB) de données pour accéder aux données.

(6) Elle invoque la JSP pour générer la page HTML qui contient le résultat de la requête.

(29)

Structure standard d’une application web JEE

 Toute application web Java EE doit respecter une structure de dossiers standard, qui est définie dans les spécifications de la plate-forme :

Fichier de configuration

Dossiers et fichiers personnels privés

Dossiers et fichiers personnels publiques, accessibles par les clients web

(30)

Il existe trois types d’archives (JAR, WAR et EAR):

- Bibliothèques =>JAR: regroupe des classes

- Application client=>JAR: regroupe les ressources nécessaires à leur exécution (classes, bibliothèques, images, …)

- EJB=>JAR: regroupe les EJB et leurs composants(classes)

- Web=>WAR: regroupe les servlets et les JSP ainsi que les ressources nécessaires à leur exécution (classes, bibliothèques de balise, images, …)

- Application=>EAR: une application est un regroupement d’un ou de plusieurs modules dans un fichier EAR (Entreprise Archive). L’application est décrite dans un fichier application.xml lui-même contenu dans le fichier EAR.

(31)

Chapitre 2:

(32)

Qu’est ce qu’une Servlet ?

 Une servlet est un composant logiciel, utilisé dans un serveur web, tel que Tomcat, qui peut être invoqué par les navigateurs clients via une URL.

 Le protocole de communication est dans ce cas HTTP.

 Elle est exécutée à l’intérieur du conteneur web ou un moteur de servlet qui permet d’établir le lien entre la servlet et le serveur web.

(33)

Qu’est ce qu’une Servlet ?

 La servlet est invoquée lorsque des requêtes HTTP utilisateur sont soumises au serveur et elle génère une réponse, éventuellement en utilisant la logique métier contenue dans des EJBs ou en interrogeant directement une base de données. Elle retourne alors une réponse HTML ou XML au demandeur.

(34)

Qu’est ce qu’une Servlet ?

 Une servlet doit implémenter l’interface javax.servlet.Servlet soit

directement, soit en dérivant d’une classe implémentant cette interface comme : javax.servlet.GenericServlet ou javax.servlet.http.HttpServlet.

(35)

Le cycle de vie d’une Servlet

1.

La servlet est créée puis initialisée (init()): cette méthode n’est appelée par le serveur qu’une seule fois lors du chargement;

2.

Le traitement des requêtes (service()) : cette méthode est appelée automatiquement par le serveur à chaque requête de client;

3.

La servlet est détruite (destroy()) : cette

méthode n’est appelée par le serveur qu’une seule fois à la fin, elle permet de libérer des ressources.

(36)

Ma première Servlet

Le paramètre request de type

HttpServletRequest donne accès aux paramètres de la requête, à l’entête HTTP et aux informations du client

Le paramètre response de type

HttpServletResponse contient les données de la réponse aux clients. Le type de réponses est précisé par la méthode setContentType()

La méthode getWriter() retourne un

objet de type PrintWriter, flux de sortie pour le texte HTML de la réponse

public class MyServlet extends HttpServlet { public MyServlet() {

super();

// TODO Auto-generated constructor stub }

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html"); response.setCharacterEncoding( "UTF-8" );

PrintWriter out = response.getWriter(); out.println("<!DOCTYPE html>"); out.println("<html>"); out.println("<head>"); out.println("<meta charset=\"utf-8\" />"); out.println("<title>Test</title>"); out.println("</head>"); out.println("<body>");

out.println("<p>Ceci est une page générée depuis une servlet.</p>"); out.println("</body>");

out.println("</html>"); }

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// TODO Auto-generated method stub }

(37)

Le descripteur de déploiement: web.xml

 Le fichier web.xml est un fichier au format XML qui permet de décrire le déploiement de l’application au serveur.

 Il permet de configurer l’application, les servlets, les sessions, les bibliothèques de tags personnalisés, les paramètres de contexte, les ressources externes, …

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" version="3.1"> <servlet> <servlet-name>MyServlet</servlet-name> <servlet-class>chemin servlet.MyServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>MyServlet</servlet-name> <url-pattern>/MyServlet</url-pattern> </servlet-mapping> </web-app> Déclaration de la servlet MyServlet Le mapping de la servlet sur l’URL du serveur /MyServlet

(38)

Appel de la servlet

 L’exécution d’une requête fait appel à la servlet. Par exemple:

http://localhost:8080

/

CoursServlet

/

MyServlet

(39)

Méthodes des requêtes Http

 HTTP définit un ensemble de méthodes de requête qui indiquent l'action que l'on souhaite réaliser sur la ressource indiquée:

GET

La méthode GET demande une représentation de la ressource spécifiée. Les requêtes GET doivent uniquement être utilisées afin de récupérer des données.

HEAD

La méthode HEAD demande une réponse identique à une requête GET pour laquelle on aura omis le corps de la réponse (on a uniquement l'en-tête).

POST

La méthode POST est utilisée pour envoyer une entité vers la ressource indiquée. Cela entraîne généralement un changement d'état ou des effets de bord sur le serveur.

(40)

Méthodes des requêtes Http

PUT

La méthode PUT remplace toutes les représentations actuelles de la ressource visée par le contenu de la requête (modification).

DELETE

La méthode DELETE supprime la ressource indiquée.

OPTIONS

La méthode OPTIONS est utilisée pour décrire les options de communications avec la ressource visée.

TRACE

La méthode TRACE réalise un message de test aller/retour en suivant le chemin de la ressource visée.

PATCH

La méthode PATCH est utilisée pour appliquer des modifications partielles à une ressource.

(41)

Les Servlets Http

 Pour faciliter le traitement particulier des requêtes web, la classe Servlet est affinée en javax.servlet.http.HttpServlet.

 Deux méthodes remplacent la méthode service() de la classe mère : - doGet() pour les requêtes http de type GET

- doPost() pour les requêtes http de type POST

 La classe servlet doit obligatoirement implémenter l’une des méthodes redéfinies, choisies selon le mode d’envoi du formulaire html qui l’exécute.  La méthode service() de HttpServlet appelle automatiquement la bonne

(42)

Les Servlets Http

HttpServletRequest

(43)

Les Servlets Http

 Une servlet peut traiter un ou plusieurs types de requêtes grâce à plusieurs autres méthodes :

- doHead() : pour les requêtes http de type HEAD - doPut() : pour les requêtes http de type PUT

- doDelete() : pour les requêtes http de type DELETE - doOptions() : pour les requêtes http de type OPTIONS - doTrace() : pour les requêtes http de type TRACE

(44)

Les Servlets Http

 La servlet reçoit les requêtes et renvoie les réponses via deux objets :

- HttpServletRequest contient les renseignements sur le formulaire HTML initial (utile pour doPost()) ;

- HttpServletResponse contient le flux de sortie pour la génération de la page HTML résultat. Ce flux de sortie est obtenu par les méthodes: getWriter() et getOutputStream().

 Il faut utiliser ces deux objets comme paramètres des méthodes doGet() ou doPost() pour implémenter le service.

(45)

La méthode doGet()

 Une requête de type GET est utile avec des liens. Par exemple :

 Dans une servlet de type HttpServlet, une telle requête est associée à la méthode doGet().

 La signature de la méthode doGet() :

<A HREF="http://localhost:8080/examples/servlet/tomcat1.MyHelloServlet">test de la servlet</A>

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException { }

(46)

La méthode doPost()

 Une requête POST n'est utilisable qu'avec un formulaire HTML.

 Dans une servlet de type HttpServlet, une telle requête est associée à la méthode doPost(). <FORM ACTION="http://localhost:8080/examples/servlet/tomcat1.TestPostServlet" METHOD="POST"> <INPUT NAME="NOM"> <INPUT NAME="PRENOM"> <INPUT TYPE="ENVOYER"> </FORM>

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException { }

(47)

La méthode doPost()

 La méthode doPost() doit généralement recueillir les paramètres pour les traiter et générer la réponse.

 Pour obtenir la valeur associée à chaque paramètre il faut utiliser la méthode

getParameter() de l'objet HttpServletRequest. Cette méthode attend en

paramètre le nom du paramètre dont on veut la valeur. Ce paramètre est sensible à la casse.

public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {

response.setContentType("text/html");

PrintWriter pwriter= response.getWriter(); String name = request.getParameter(“NOM"); String age = request.getParameter(“PRENOM"); pwriter.println("Nom: "+NOM);

pwriter.println(“Prenom: "+PRENOM); pwriter.close(); }

(48)

L’interface

HttpServletRequest

 Les fonctionnalités de HttpServletRequest les plus utilisées permettent de: - Obtenir les paramètres de l'utilisateur,

- stocker et obtenir les objets au sein de la requête - Lire les en-tête

- Obtenir les objets Session

- Obtenir des informations sur le serveur

 L'interface HttpServletRequest dérive de l'interface ServletRequest, donc elle dispose des méthodes de ServletRequest comme:

- String getParameter (String parameterName): Cette méthode est utilisée pour récupérer la valeur d'un paramètre d'une requête en se servant du nom; ces paramétres sont envoyées par le client; chaque valeur retournée est de type "String"

(49)

L’interface

HttpServletRequest

- String[] getParameterValues (String parameterName): Cette méthode

fonctionne comme la précédente sauf qu' ici on aura un tableau de caractères à la sortie; les éléments de ce tableau représentent les valeurs des paramètres des requêtes envoyées; ça peut être par exemple les valeurs issues de menu

déroulant à choix multiples

- Object getAttribute (String attributeName): cette méthode récupère la valeur de l' attribut ayant comme nom "attributName; cette valeur est un objet de Object. - void setAttribute (String attributeName, Object value): Cette méthode est

utilisée pour affecter la valeur "value" au paramètre "attributeName" d’une requête; "value" est de type Object.

- ServletContext getServletContext (): Cette méthode est utilisée pour récupérer le contexte courant de la Servlet. L'objet ServletContext contient des

informations relatives à l'application web et aussi pour toutes les Servlets de l'application.

(50)

L’interface

HttpServletRequest

 Exemple: Afficher les informations relatives au serveur public class ServeurInfo extends HttpServlet {

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

res.setContentType("text/plain"); // on produit du texte ASCII PrintWriter out = res.getWriter();

out.println("Nom du serveur : " + req.getServerName() + " .");

out.println("Logiciel utilisé : " + req.getServletContext().getServerInfo() + " .");

out.println("Port du serveur : " + req.getServerPort() + " .");

out.println("Chemin vers le fichier " + req.getPathInfo() + " : " + req.getPathTranslated(req.getPathInfo()) + " .");

(51)

L’interface

HttpServletRequest

 Exemple: Afficher les paramètres de la requête public class ServeurInfo extends HttpServlet {

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

res.setContentType("text/plain"); // on produit du texte ASCII PrintWriter out = res.getWriter();

Enumeration parametres = req.getParameterNames();

out.println("Affichage des informations sur les paramètres de la requête");

while (parametres.hasMoreElements()) {

String nomParametre = (String) parametres.nextElement();

out.println("Le paramètre " + nomParametre + " a la valeur : " + getParameter(nomParametre) + " .");

(52)

L’interface

HttpServletRequest

 Exemple: Afficher l’entête de la requête public class ServeurInfo extends HttpServlet {

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

res.setContentType("text/plain"); // on produit du texte ASCII PrintWriter out = res.getWriter();

out.println("Affichage des informations sur les en-têtes de la requête"); Enumeration entetes = req.getHeaderNames();

while (entetes.hasMoreElements()) {

String nomEntete = (String) entetes.nextElement();

out.println("a l'entête " + nomEntete + " correspond la valeur " + getHeader(nomEntete) + ".");

(53)

L’interface

HttpServletResponse

 Les fonctionnalités de HttpServletResponse les plus utilisées permettent de: - Renvoyer la réponse vers l'utilisateur (getWriter())

- Changer ou mettre à jour les valeurs des en-tête (setHeader())

- Rediriger le browser vers un autre URL (void sendRedirect (String url))

- void addCookie (Cookie cookie): Cette méthode ajoute l'objet "cookie" à la réponse.

 D'autres méthodes appartiennent à HttpServletResponse par dérivation:

- PrintWriter getWriter () : Cette méthode retourne un objet PrintWriter qui peut envoyer toute sorte de fichiers (texte, html, etc) au client.

- void setContentType (String type): Cette méthode définit le type du contenu de la réponse à envoyer au client.

(54)

L’interface

HttpServletResponse

private boolean forwardToLogin(HttpServletRequest request,

HttpServletResponse response) throws ServletException, IOException {

String url = "http://" + request.getServerName() + ":"

+ request.getServerPort() + request.getContextPath() + "/login.jsp";

response.sendRedirect(url); return false;

}

(55)

L’interface

HttpServletResponse

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

String filename = request.getParameter("file");

response.setContentType("application/octet-stream");

response.setHeader("Content-Disposition", "attachment; filename=" + filename); }

(56)

L’interface

HttpSession

 Le protocole HTTP au sein des Serveurs Web est une technologie sans état, c'est à-dire, dès que le serveur Web reçoit une requête, il la traite et il se met en

attente d'une autre requête sans garder de trace de la requête qu'elle a traitée précédemment.

 Dans certains cas, on a besoin des informations venant de la précédente requête; dans ce cas on fait référence à la notion de session.

 Une Session est le faite de pouvoir conserver l'état conversationnel d'un client avec un serveur en l’occurrence ici un serveur Web.

 L'interface "javax.servlet.http.HttpSession" définit un certain nombre de méthodes

 L'id de la session (le même durant la session) est transmis du client au serveur à chaque requête/réponse et ainsi on peut garder la trace des échanges entre les client et le Serveur Web.

(57)

L’interface

HttpSession

 Un objet de type HttpSession est créé en invoquant l’une des méthodes suivantes:

- HttpSession HttpServletRequest.getSession () : Cette méthode getSession() de HttpServletRequest retourne un objet de type HttpSession; l'objet retourné est attaché à la requête du client; si la requête n'est pas déjà liée à une session, alors un objet session est créé et est retourné.

- HttpSession HttpServletRequest.getSession (boolean flag): Cette méthode HttpServletRequest.getSession(...) retourne un objet de type HttpSession si la requête est liée à une session; sinon elle retourne null.

(58)

L’interface

HttpSession

 l'interface javax.servlet.http.HttpSession possède des méthodes comme:

- String getId () : cette méthode retourne une chaîne de caractères représentant l'unique identificateur assigné à la session.

- Object getAttribute (String name): cette méthode retourne un objet associé au nom spécifié au sein de la session, ou null si aucun objet n'est associé au nom de la session. D'autres méthodes permettent aussi de travailler au sein d' une

session à savoir, getAttributeNames(), removeAttribute(String name) et

setAttribute(String name, Object value)

- long getCreationTime (): cette méthode retourne comme valeur le moment où cette session vient d'être créée. On peut aussi avoir le moment où la session est utilisée pour la dernière fois avec la méthode getLastAccessedTime ()

- boolean isNew (): cette méthode retourne « true » si la session est fraîchement créée par client sinon « false »

- void invalidate (): cette méthode invalide la session et libère tout objet qui lui est associé.

(59)

L’interface

HttpSession

Fichier Login.html:

Fichier LoginServlet.java:

public class LoginServlet extends HttpServlet {

protected void doPost(HttpServletRequest request, HttpServletResponse

response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out=response.getWriter(); request.getRequestDispatcher("link.html").include(request, response); String name=request.getParameter("name"); String password=request.getParameter("password"); if(password.equals("admin123")){ out.print("Welcome, "+name); HttpSession session=request.getSession(); session.setAttribute("name",name); } else{

out.print("Sorry, username or password error!");

request.getRequestDispatcher("login.html").include(request, response); } out.close(); } } <form action="LoginServlet" method="post"> Name:<input type="text" name="name"><br> Password:<input type="password" name="password"><br> <input type="submit" value="login"> </form>

(60)

L’interface

HttpSession

Fichier LogoutServlet.java:

public class LogoutServlet extends HttpServlet {

protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

response.setContentType("text/html"); PrintWriter out=response.getWriter(); request.getRequestDispatcher("link.html").include(request, response); HttpSession session=request.getSession(); session.invalidate();

out.print("You are successfully logged out!");

out.close(); }

(61)

L’interface

HttpSession

Fichier web.xml: <?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> <servlet> <description></description> <display-name>LoginServlet</display-name> <servlet-name>LoginServlet</servlet-name> <servlet-class>LoginServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LoginServlet</servlet-name> <url-pattern>/LoginServlet</url-pattern> </servlet-mapping> <servlet> <description></description> <display-name>LogoutServlet</display-name> <servlet-name>LogoutServlet</servlet-name> <servlet-class>LogoutServlet</servlet-class> </servlet> <servlet-mapping> <servlet-name>LogoutServlet</servlet-name> <url-pattern>/LogoutServlet</url-pattern> </servlet-mapping> </web-app> Suite du fichier web.xml

(62)

Redirection ou inclusion d’une ressource

 Un objet de type RequestDispatcher est obtenu en invoquant la méthode

getRequestDispatcher(String) de la requête.

 Le chemin qui lui est passé en paramètre est un chemin relatif ou absolu, qui doit correspondre à une ressource se trouvant dans la même application web.

 La ressource désignée par ce chemin peut être statique (une image, ou un fichier), ou dynamique (une servlet).

 Cet objet expose deux méthodes :

- Forward (): elle redirige la requête vers la ressource désignée, - Include (): elle inclut cette ressource dans la réponse courante.

(63)

Redirection ou inclusion d’une ressource

(64)

Redirection ou inclusion d’une ressource

(65)

Exercices d’application

Exercice 1.

Ecrire une servlet qui affiche la date courante. Effectuer cette tâche à l’aide la classe Date et du package java.util.*, sans oublier de modifier le fichier web.xml.

(66)

Exercices d’application

Corrigé Exercice 1. import java.io.*; import java.util.Date; import javax.servlet.*; import javax.servlet.http.*; // Extend HttpServlet class

public class CurrentDate extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

// Set response content type

response.setContentType("text/html"); PrintWriter out = response.getWriter(); String title = « Afficher la date courante"; Date date = new Date();

(67)

Exercices d’application

Corrigé Exercice 1.

out.println(docType + "<html>\n" +

"<head><title>" + title + "</title></head>\n" + "<body bgcolor = \"#f0f0f0\">\n" +

"<h1 align = \"center\">" + title + "</h1>\n" +

"<h2 align = \"center\">" + date.toString() + "</h2>\n" + "</body>

</html>" );

} }

(68)

Exercices d’application

Exercice 2.

Nous allons utiliser une servlet pour traiter les données saisies via une page html : • Ecrire une page html pour saisir le nom et le mot de passe de l’internaute.

• Ecrire une servlet qui affiche le nom et le mot de passe saisie auparavant (cette servlet est l’action à exécuter une fois le formulaire de saisie rempli).

Références

Documents relatifs

familles des maintenus, les militants, les chercheurs etc. Les maintenus peuvent recevoir des visites de leurs familles et leurs avocats le cas échéant : des salles sont prévues à

c’est-à-dire d’agir dans une situation où l’échec de l’action peut être reconnu par l’acteur lui-même et de recommencer en cas d’échec, ce qui ne va pas de

Based on these remarks, the AS4DR (Adaptive Scheduling for Distributed Resources) method [15] automatically adapts the schedule to both: the heterogeneity of the workers and

A new structured subspace identifi- cation method has been introduced for the estimation of the orders and the parameters of linear MIMO systems.. By requiring fewer parameters to

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des

La proximité originelle entre environnement et aménagement sera réaffirmée par la création d’un ministère commun de l’Aménagement du territoire et de

L’archive ouverte pluridisciplinaire HAL, est destinée au dépôt et à la diffusion de documents scientifiques de niveau recherche, publiés ou non, émanant des

We instead revisit the very foundations of a progressive choice decision aiding methodology in order to discover how the bipolar-valued concept of outranking kernel may deliver