SlideShare une entreprise Scribd logo
1  sur  12
Télécharger pour lire hors ligne
LA 3 SIL – 2013/2014

TP2 : Les Services Web avec JAX-RS
Dr. Lilia Sfaxi

Objectifs du TP : Création de services web de type REST avec JAX-RS,
l’IDE Netbeans et le serveur Glassfish

Institut National des Sciences Appliquées et de Technologie
2

TP2 : Les Services Web avec JAX-RS

I. Les Services Web de type REST
I.1.

Présentation de REST

REST (Representational State Transfer) est un style d’architecture basé sur les standards
Web et le protocole http. Il a été présenté en premier lieu par Roy Fielding en 2000.
Dans une architecture basée sur REST :
-­‐
-­‐
-­‐
-­‐

I.2.

Tout est Resssource. Une ressource est accédée via une interface basée sur les
méthodes http standard.
Il existe un serveur REST qui fournit l’accès aux ressources, et un client REST qui
accède et modifie les ressources REST.
Chaque ressource doit supporter les opérations HTTP communes. Elle est identifiée
par un ID global (typiquement un URI)
Les ressources peuvent avoir des représentations différentes (texte, xml, json…). Le
client REST peut exiger des représentations spécifiques via le protocole HTTP
(négociation de contenu).

Les Méthodes http

Les méthodes PUT, GET, POST et DELETE sont utilisées dans les architectures à base de REST.
-­‐
-­‐
-­‐
-­‐

I.3.

GET définit un accès en lecture de la ressource. Il ne change jamais la ressource
PUT crée une nouvelle ressource
DELETE supprime une ressource
POST met à jour une ressource existante et peut en créer des nouvelles

Les Services Web RESTful

Les services web RESTful sont basés sur les méthodes http et le concept de REST, Ils
définissent un URI de base pour les services, les types MIME (XML, Text, JSON, …) et
l’ensemble des opérations supportées (POST, GET, PUT et DELETE).

II. Présentation de JAX-RS
Java définit un support pour le standard REST via JAX-RS (Java API for RESTful Web
Services). Il utilise des annotations pour simplifier le développement de services web REST.
Ces annotations permettent de définir les ressources et les actions pouvant y être
appliquées. Ces annotations prennent effet à l’exécution, pour générer les classes et
artéfacts pour la ressource.
Le tableau ci-dessous représente les annotations les plus utilisées dans JAX-RS.

Architecture	
  Orientée	
  Services
3

TP2 : Les Services Web avec JAX-RS

Annotation

Description

@PATH

Chemin URI indiquant où une classe Java sera hébergée. Par exemple
/helloworld. Il est également possible d’insérer des variables dans un URI,
par exemple, il est possible de demander le nom de l’utilisateur et le
passer à l’application dans le chemin : /helloworld/{username}

@GET

Une méthode Java annotée avec @GET désigne une requête de type
HTTP GET. Le comportement de la ressource est déterminé par la
méthode HTTP à laquelle la ressource répond.

@POST

Désigne une méthode correspondant à la requête HTTP POST.

@PUT

Désigne une méthode correspondant à la requête HTTP PUT.

@DELETE

Désigne une méthode correspondant à la requête HTTP DELETE.

@HEAD

Désigne une méthode correspondant à la requête HTTP HEAD.

@PathParam

Désigne un paramètre pouvant être extrait à partir de l’URI, pour être
utilisé par la ressource. Le nom du paramètre entré correspond au nom
de la variable définie dans l’annotation @PATH

@Consumes

Utilisée pour spécifier le type de représentation MIME qu’une ressource
peut consommer, et qui sont envoyées par le client.

@Produces

Utilisée pour spécifier le type de représentation MIME qu’une ressource
peut produire, et envoyer au client.

III. Première Application JAX-RS : Helloworld
III.1. Création du service web
Pour créer un service Web RESTful en utilisant l’IDE NetBeans et Glassfish (installés et
configurés dans le TP précédent), procéder comme suit :
1. Dans NetBeans, créer une application web simple, que vous nommerez
HelloWorldApplication
2. Faire un clic-droit sur le projet, et sélectionner New -> RESTful Web Services from
Patterns.
a. Désigner comme design pattern Simple Root Resource
b. Utiliser comme nom de package : helloWorld
c. Utiliser comme Path : helloworld
d. Utiliser comme nom de classe : HelloWorld

Architecture	
  Orientée	
  Services
4

TP2 : Les Services Web avec JAX-RS
e. Utiliser type MIME text/html
Votre Projet aura ainsi l’apparence suivante :

3. Dans le fichier HelloWorld.java, la méthode getHTML() représente une requête de
type GET. Remplacer le commentaire //TODO par le code suivant, pour afficher
votre message :
return "<html lang="en"><body><h1>Hello, World!!</body></h1></html>";

Le code obtenu sera alors le suivant :

Architecture	
  Orientée	
  Services
5

TP2 : Les Services Web avec JAX-RS

Ressource HelloWorld, avec comme URI: /helloworld

Méthode getHtml de type HTTP GET, permet d’afficher un texte de type
text/html

Méthode putHtml de type HTTP PUT, permet de créer une nouvelle
ressource, et saisit en entrée une chaine de type text/html

III.2. Test du service web
Pour tester le service web, suivre les étapes suivantes :
1. Clic-droit sur le projet et choisir Test Restful Web Services. Cela ouvrira la fenêtre
suivante :

Architecture	
  Orientée	
  Services
6

TP2 : Les Services Web avec JAX-RS
2. Choisir Web Test Client in Project, et sélectionner le projet HelloWorldApplication
dans la fenêtre qui vous est offerte.
3. Un navigateur web va s’ouvrir, avec l’interface de test.
a. Choisir votre ressource helloworld dans le panneau gauche de votre écran
b. Choisir la méthode à tester (dans notre cas, c’est la méthode GET)
c. Cliquer sur le bouton Test.
L’affichage suivant doit apparaître dans votre écran :

III.3. Configuration du Run
Pour configurer l’exécution de votre application avec le bouton Run
suivantes :

, suivre les étapes

1. Clic-droit sur le nom du projet et choisir Properties
2. Sélectionner la catégorie Run dans la fenêtre qui apparaît
3. Mettre la valeur du champs Relative URL à l’emplacement du service web REST
relatif au PATH, qui est, pour cet exemple : webresources/helloworld
Remarque : pour déterminer la valeur du Relative URL dans l’exemple de test que vous
avez réalisé dans la partie III.2. , regarder le chemin affiché en haut de votre navigateur,
dans le panneau de droite :

Architecture	
  Orientée	
  Services
TP2 : Les Services Web avec JAX-RS

7

4. Déployer votre service web
5. Exécuter votre service web. L’affichage suivant apparaît dans le navigateur.

IV.

Services Web RESTful à partir d’une base de données

IV.1. Création et configuration de la base de données
On se propose de générer un service web RESTful à partir d’une base de données de
notre choix. Pour ce faire, commencer par créer la base de données avec MySQL (en
utilisant l’outil d’administration de votre choix). Appeler la base « maBD » et créer une
table client dans cette base.
Choisir une structure et insérer un contenu dans cette table.
Une fois la base de données créée, il faut la configurer au niveau de NetBeans. Pour cela,
suivre les étapes suivantes :
-­‐

Aller sous l’onglet Services dans le panneau gauche de votre IDE

-­‐
-­‐

Clic-droit sur Databases et choisir Register MySQL Server
Garder les paramètres par défaut, et valider.

Architecture	
  Orientée	
  Services
8

TP2 : Les Services Web avec JAX-RS
-­‐
-­‐

Clic-droit sur le nouveau serveur MySQL qui est apparu, et choisir Connect. La liste
des bases de données disponibles dans le serveur apparaît, dont la base maBD.
Clic-droit sur maBD et choisir Connect. Une connexion à la base de données sera
alors créée, comme suit :

IV.2. Génération du service web
Pour générer le service web qui utilise cette base de données, suivre les étapes suivantes :
-­‐
-­‐
-­‐

-­‐
-­‐
-­‐

Créer un nouveau projet de type Application Web, qu’on nommera ClientBD
Clic-droit sur ce projet, et faire New -> Restful Web Services from Database
Créer une nouvelle source de données relative à votre base. Si tout se passe
correctement, la liste des tables dans la base apparaît dans le champs Available
Tables à gauche de la fenêtre.
Ajouter la table client à la liste des Selected Tables
Choisir comme nom de package insat.soa.tp2.maBD
Valider. Votre projet aura alors l’arborescence suivante :

Architecture	
  Orientée	
  Services
TP2 : Les Services Web avec JAX-RS

9

Regarder le code généré, et essayer de comprendre les différentes fonctionnalités.
Lancer un Test du service web, et essayer d’exécuter l’ensemble des méthodes HTTP
existantes. Noter la différence entre elles.

V. Services Web RESTful à partir d’objets Java
On désire dans ce qui suit créer un service web RESTful dont les ressources sont
représentées par des classes Java annotées.
Le Service Web REST de cet exercice consiste à créer un système CRUD pour
l’interrogation et la réservation de trains. Les ressources manipulées par les services sont
donc un train et une réservation. Le service Web REST doit pouvoir lister l’ensemble des
trains, et de lister les trains qui satisfont un critère de recherche (nom, ville de départ, ville
d’arrivée).
Pour cela, suivre les étapes suivantes :
1. Créer une application web, appelée ReservationTrains
2. Créer la classe Train, qui modélise le concept de trains, et qui contient un attribut
String nom, et deux attributs String villeDepart et String villeArrivee représentant les
villes de départ et d’arrivée du train. Ajouter les getters et les setters de cette
classe. Le code ressemble à ce qui suit (c’est un code manquant, vous devez le
terminer):

Architecture	
  Orientée	
  Services
10

TP2 : Les Services Web avec JAX-RS

Annotation qui permet de convertir cet objet Java en XML et vice-versa.

3. Créer la classe ReserverTrain qui permet de persister les informations concernant le
service web.

Modifier ces données à votre guise

4. Créer la classe TrainRessource qui permet l’accès aux services web RESTful de la
ressource Train. On se propose de réaliser les fonctions suivantes (cette classe est à
implémenter vous-mêmes) :

Architecture	
  Orientée	
  Services
11

TP2 : Les Services Web avec JAX-RS
-­‐
-­‐
-­‐

Définir comme chemin de ressource racine la valeur /train
Créer la méthode getTrains, qui permet d’afficher la liste des trains
format JSON.
Créer la méthode getTrain, qui utilise un chemin de ressource
/train/nom/{nom}, et qui permet d’afficher le train dont le nom est
comme paramètre à la requête. Le résultat de cette méthode sera
forme XML.

sous le
racine
donné
sous la

Indication : Compléter pour cela le code suivant :
Compléter la méthode HTTP nécessaire

…

Compléter pour définir le format de retour
demandé
Ceci est le path à ajouter au chemin principal du service web. Il
permet de saisir comme paramètre une valeur entrée par l’utilisateur,
@Path("nom/{nom}")
représentée ici par {nom}

…

public Train getTrain(@PathParam("nom") String nomTrain) {
…
Ceci indique que le paramètre nomTrain représente le même
paramètre entré par l’utilisateur dans le chemin d’accès : nom

}

-­‐

Créer la méthode rechercheTrain, qui utilise un chemin de ressource racine
/train/recherche, et qui permet, selon deux critères villeDepart et villeArrivee
entrés en paramètre, d’afficher la liste des trains correspondant à ces deux
critères. Le résultat de cette méthode sera sous la forme XML.

Indication : Compléter pour cela le code suivant :
Compléter la méthode HTTP nécessaire

…

Compléter pour définir le chemin demandé

…

Compléter pour définir le format de retour demandé

…

public
List<Train>
rechercheTrain(@QueryParam("depart")
@QueryParam("arrivee") String arr) {
…
}

String

dep,

Ceci indique que les paramètres dep et arr correspondent aux paramètres
depart et arrivee entrés par l’utilisateur dans la requête.

5. A partir du navigateur, invoquer les trois services comme suit :
-­‐ http://localhost:8080/Train/webresources/train
-­‐ http://localhost:8080/Train/webresources/train/nom/TR1
-­‐ http://localhost:8080/Train/webresources/train/rechercheTrain?depart=Tunis
&arrivee=Sousse

Architecture	
  Orientée	
  Services
12

VI.

TP2 : Les Services Web avec JAX-RS

Homework

Reprendre l’exemple de convertisseur de monnaie développé pour le TP précédent,
et l’appliquer sur les services web REST. Le but est d’utiliser les différentes méthodes HTTP
(@Get, @Post, @Put et @Delete), ainsi que la saisie de paramètre dans le path
(@PathParam) et dans la requête (@QueryParam).

Date de remise du travail : prochaine séance de TP.

Architecture	
  Orientée	
  Services

Contenu connexe

Tendances

Architecture réparties et les services web
Architecture réparties et les services webArchitecture réparties et les services web
Architecture réparties et les services webCHOUAIB EL HACHIMI
 
Architectures orientés services (SOA)
Architectures orientés services (SOA)Architectures orientés services (SOA)
Architectures orientés services (SOA)Heithem Abbes
 
Architectures n-tiers
Architectures n-tiersArchitectures n-tiers
Architectures n-tiersHeithem Abbes
 
eServices-Tp3: esb
eServices-Tp3: esbeServices-Tp3: esb
eServices-Tp3: esbLilia Sfaxi
 
Chp3 - Les Services Web
Chp3 - Les Services WebChp3 - Les Services Web
Chp3 - Les Services WebLilia Sfaxi
 
Android-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsAndroid-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsLilia Sfaxi
 
Services web soap-el-habib-nfaoui
Services web soap-el-habib-nfaouiServices web soap-el-habib-nfaoui
Services web soap-el-habib-nfaouiEl Habib NFAOUI
 
Création de Services et Configuration du ESB avec TalendESB
Création de Services et Configuration du ESB avec TalendESBCréation de Services et Configuration du ESB avec TalendESB
Création de Services et Configuration du ESB avec TalendESBLilia Sfaxi
 

Tendances (20)

Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka StreamsTraitement distribue en BIg Data - KAFKA Broker and Kafka Streams
Traitement distribue en BIg Data - KAFKA Broker and Kafka Streams
 
Présentation SOA
Présentation SOAPrésentation SOA
Présentation SOA
 
Architecture réparties et les services web
Architecture réparties et les services webArchitecture réparties et les services web
Architecture réparties et les services web
 
Architectures orientés services (SOA)
Architectures orientés services (SOA)Architectures orientés services (SOA)
Architectures orientés services (SOA)
 
Architectures n-tiers
Architectures n-tiersArchitectures n-tiers
Architectures n-tiers
 
Support JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.YoussfiSupport JEE Servlet Jsp MVC M.Youssfi
Support JEE Servlet Jsp MVC M.Youssfi
 
Chp2 - SOA
Chp2 - SOAChp2 - SOA
Chp2 - SOA
 
eServices-Tp3: esb
eServices-Tp3: esbeServices-Tp3: esb
eServices-Tp3: esb
 
Chp3 - Les Services Web
Chp3 - Les Services WebChp3 - Les Services Web
Chp3 - Les Services Web
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Android-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intentsAndroid-Tp1: éléments graphiques de base et intents
Android-Tp1: éléments graphiques de base et intents
 
Services web soap-el-habib-nfaoui
Services web soap-el-habib-nfaouiServices web soap-el-habib-nfaoui
Services web soap-el-habib-nfaoui
 
OpenESB et BPEL
OpenESB et BPELOpenESB et BPEL
OpenESB et BPEL
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 
Création de Services et Configuration du ESB avec TalendESB
Création de Services et Configuration du ESB avec TalendESBCréation de Services et Configuration du ESB avec TalendESB
Création de Services et Configuration du ESB avec TalendESB
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
 
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
 
Support de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfiSupport de cours entrepise java beans ejb m.youssfi
Support de cours entrepise java beans ejb m.youssfi
 
Cours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweightCours design pattern m youssfi partie 7 facade bridge flyweight
Cours design pattern m youssfi partie 7 facade bridge flyweight
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 

En vedette

Pour Écrire un Bon Rapport en Informatique
Pour Écrire un Bon Rapport en InformatiquePour Écrire un Bon Rapport en Informatique
Pour Écrire un Bon Rapport en InformatiqueLilia Sfaxi
 
P6 composants avancés
P6 composants avancésP6 composants avancés
P6 composants avancésLilia Sfaxi
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web servicesLilia Sfaxi
 
BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherLilia Sfaxi
 
Software Engineering - chp8- deployment
Software Engineering - chp8- deploymentSoftware Engineering - chp8- deployment
Software Engineering - chp8- deploymentLilia Sfaxi
 
Partie3 cif et dcif
Partie3  cif et dcifPartie3  cif et dcif
Partie3 cif et dcifLilia Sfaxi
 
Chp1- Introduction aux eServices
Chp1- Introduction aux eServicesChp1- Introduction aux eServices
Chp1- Introduction aux eServicesLilia Sfaxi
 
Systèmes d'Exploitation - chp6-synchronisation
Systèmes d'Exploitation - chp6-synchronisationSystèmes d'Exploitation - chp6-synchronisation
Systèmes d'Exploitation - chp6-synchronisationLilia Sfaxi
 
eServices-Chp6: WOA
eServices-Chp6: WOAeServices-Chp6: WOA
eServices-Chp6: WOALilia Sfaxi
 
Systèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoireSystèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoireLilia Sfaxi
 
Chp2 - Conception UX-UI des Applications Mobiles
Chp2 - Conception UX-UI des Applications MobilesChp2 - Conception UX-UI des Applications Mobiles
Chp2 - Conception UX-UI des Applications MobilesLilia Sfaxi
 
Chp3 - Fonctionnement des ERP
Chp3 - Fonctionnement des ERPChp3 - Fonctionnement des ERP
Chp3 - Fonctionnement des ERPLilia Sfaxi
 
Android-Tp4: stockage
Android-Tp4: stockageAndroid-Tp4: stockage
Android-Tp4: stockageLilia Sfaxi
 
Android-Tp3: fragments et menus
Android-Tp3: fragments et menusAndroid-Tp3: fragments et menus
Android-Tp3: fragments et menusLilia Sfaxi
 
eServices-Tp5: api management
eServices-Tp5: api managementeServices-Tp5: api management
eServices-Tp5: api managementLilia Sfaxi
 
eServices-Tp4: esb++
eServices-Tp4: esb++eServices-Tp4: esb++
eServices-Tp4: esb++Lilia Sfaxi
 
Systèmes d'Exploitation - chp4-gestion disque
Systèmes d'Exploitation - chp4-gestion disqueSystèmes d'Exploitation - chp4-gestion disque
Systèmes d'Exploitation - chp4-gestion disqueLilia Sfaxi
 

En vedette (20)

Pour Écrire un Bon Rapport en Informatique
Pour Écrire un Bon Rapport en InformatiquePour Écrire un Bon Rapport en Informatique
Pour Écrire un Bon Rapport en Informatique
 
P6 composants avancés
P6 composants avancésP6 composants avancés
P6 composants avancés
 
Android-Tp5 : web services
Android-Tp5 : web servicesAndroid-Tp5 : web services
Android-Tp5 : web services
 
BigData_Chp5: Putting it all together
BigData_Chp5: Putting it all togetherBigData_Chp5: Putting it all together
BigData_Chp5: Putting it all together
 
Software Engineering - chp8- deployment
Software Engineering - chp8- deploymentSoftware Engineering - chp8- deployment
Software Engineering - chp8- deployment
 
Partie3 cif et dcif
Partie3  cif et dcifPartie3  cif et dcif
Partie3 cif et dcif
 
Chp1- Introduction aux eServices
Chp1- Introduction aux eServicesChp1- Introduction aux eServices
Chp1- Introduction aux eServices
 
Thinking big
Thinking bigThinking big
Thinking big
 
Systèmes d'Exploitation - chp6-synchronisation
Systèmes d'Exploitation - chp6-synchronisationSystèmes d'Exploitation - chp6-synchronisation
Systèmes d'Exploitation - chp6-synchronisation
 
These
TheseThese
These
 
eServices-Chp6: WOA
eServices-Chp6: WOAeServices-Chp6: WOA
eServices-Chp6: WOA
 
Systèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoireSystèmes d'Exploitation - chp3-gestion mémoire
Systèmes d'Exploitation - chp3-gestion mémoire
 
Chp2 - Conception UX-UI des Applications Mobiles
Chp2 - Conception UX-UI des Applications MobilesChp2 - Conception UX-UI des Applications Mobiles
Chp2 - Conception UX-UI des Applications Mobiles
 
Chp3 - Fonctionnement des ERP
Chp3 - Fonctionnement des ERPChp3 - Fonctionnement des ERP
Chp3 - Fonctionnement des ERP
 
Android-Tp4: stockage
Android-Tp4: stockageAndroid-Tp4: stockage
Android-Tp4: stockage
 
Android-Tp3: fragments et menus
Android-Tp3: fragments et menusAndroid-Tp3: fragments et menus
Android-Tp3: fragments et menus
 
P4 intents
P4 intentsP4 intents
P4 intents
 
eServices-Tp5: api management
eServices-Tp5: api managementeServices-Tp5: api management
eServices-Tp5: api management
 
eServices-Tp4: esb++
eServices-Tp4: esb++eServices-Tp4: esb++
eServices-Tp4: esb++
 
Systèmes d'Exploitation - chp4-gestion disque
Systèmes d'Exploitation - chp4-gestion disqueSystèmes d'Exploitation - chp4-gestion disque
Systèmes d'Exploitation - chp4-gestion disque
 

Similaire à Tp2 - WS avec JAXRS

comment realiser un Service Web
comment realiser un Service Web comment realiser un Service Web
comment realiser un Service Web Nazih Heni
 
2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_services2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_servicesCamus LANMADOUCELO
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWinslo Nwan
 
Chap1 p1-introduction
Chap1 p1-introductionChap1 p1-introduction
Chap1 p1-introductionMoez Re
 
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbWebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbHINDGUENDOUZ
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partageraliagadir
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web servicesLilia Sfaxi
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesENSET, Université Hassan II Casablanca
 
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbhindguendouz2000
 
Ajax en Java - GTI780 & MTI780 - ETS - A09
Ajax en Java - GTI780 & MTI780 - ETS - A09Ajax en Java - GTI780 & MTI780 - ETS - A09
Ajax en Java - GTI780 & MTI780 - ETS - A09Claude Coulombe
 

Similaire à Tp2 - WS avec JAXRS (20)

.NET DotNet CF - 3
.NET DotNet CF - 3.NET DotNet CF - 3
.NET DotNet CF - 3
 
Ter Web Service Intro
Ter Web Service IntroTer Web Service Intro
Ter Web Service Intro
 
comment realiser un Service Web
comment realiser un Service Web comment realiser un Service Web
comment realiser un Service Web
 
2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_services2 20 presentations_generales_des_web_services
2 20 presentations_generales_des_web_services
 
7 rest
7 rest7 rest
7 rest
 
Les Servlets et JSP
Les Servlets et JSPLes Servlets et JSP
Les Servlets et JSP
 
La plateforme JEE
La plateforme JEELa plateforme JEE
La plateforme JEE
 
Servlets et JSP
Servlets et JSPServlets et JSP
Servlets et JSP
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas doc
 
Chap1 p1-introduction
Chap1 p1-introductionChap1 p1-introduction
Chap1 p1-introduction
 
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbWebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 
Architecture java j2 ee a partager
Architecture java j2 ee a partagerArchitecture java j2 ee a partager
Architecture java j2 ee a partager
 
Rapport tp3 j2ee
Rapport tp3 j2eeRapport tp3 j2ee
Rapport tp3 j2ee
 
Android - TPBonus - web services
Android - TPBonus - web servicesAndroid - TPBonus - web services
Android - TPBonus - web services
 
Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
 
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
0570-les-services-web.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 
Java Entreprise Edition
Java Entreprise EditionJava Entreprise Edition
Java Entreprise Edition
 
Tutoriel web service
Tutoriel  web serviceTutoriel  web service
Tutoriel web service
 
Ajax en Java - GTI780 & MTI780 - ETS - A09
Ajax en Java - GTI780 & MTI780 - ETS - A09Ajax en Java - GTI780 & MTI780 - ETS - A09
Ajax en Java - GTI780 & MTI780 - ETS - A09
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 

Plus de Lilia Sfaxi

chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfLilia Sfaxi
 
Plan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfPlan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfLilia Sfaxi
 
Lab1-DB-Cassandra
Lab1-DB-CassandraLab1-DB-Cassandra
Lab1-DB-CassandraLilia Sfaxi
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-CorrectionLilia Sfaxi
 
TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-CorrectionLilia Sfaxi
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-CorrectionLilia Sfaxi
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-CorrectionLilia Sfaxi
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-SéquencesLilia Sfaxi
 
TD3-UML-Correction
TD3-UML-CorrectionTD3-UML-Correction
TD3-UML-CorrectionLilia Sfaxi
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - CorrectionLilia Sfaxi
 
TD1-UML-correction
TD1-UML-correctionTD1-UML-correction
TD1-UML-correctionLilia Sfaxi
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrageLilia Sfaxi
 
Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Lilia Sfaxi
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intentsLilia Sfaxi
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésLilia Sfaxi
 
Android - Tp 5 - stockage de données
Android - Tp 5 -  stockage de donnéesAndroid - Tp 5 -  stockage de données
Android - Tp 5 - stockage de donnéesLilia Sfaxi
 

Plus de Lilia Sfaxi (20)

chp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdfchp1-Intro à l'urbanisation des SI.pdf
chp1-Intro à l'urbanisation des SI.pdf
 
Plan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdfPlan d'études_INSAT_2022_2023.pdf
Plan d'études_INSAT_2022_2023.pdf
 
Lab3-DB_Neo4j
Lab3-DB_Neo4jLab3-DB_Neo4j
Lab3-DB_Neo4j
 
Lab2-DB-Mongodb
Lab2-DB-MongodbLab2-DB-Mongodb
Lab2-DB-Mongodb
 
Lab1-DB-Cassandra
Lab1-DB-CassandraLab1-DB-Cassandra
Lab1-DB-Cassandra
 
TP2-UML-Correction
TP2-UML-CorrectionTP2-UML-Correction
TP2-UML-Correction
 
TP1-UML-Correction
TP1-UML-CorrectionTP1-UML-Correction
TP1-UML-Correction
 
TP0-UML-Correction
TP0-UML-CorrectionTP0-UML-Correction
TP0-UML-Correction
 
TD4-UML
TD4-UMLTD4-UML
TD4-UML
 
TD4-UML-Correction
TD4-UML-CorrectionTD4-UML-Correction
TD4-UML-Correction
 
TD3-UML-Séquences
TD3-UML-SéquencesTD3-UML-Séquences
TD3-UML-Séquences
 
TD3-UML-Correction
TD3-UML-CorrectionTD3-UML-Correction
TD3-UML-Correction
 
TD2 - UML - Correction
TD2 - UML - CorrectionTD2 - UML - Correction
TD2 - UML - Correction
 
TD1 - UML - DCU
TD1 - UML - DCUTD1 - UML - DCU
TD1 - UML - DCU
 
TD1-UML-correction
TD1-UML-correctionTD1-UML-correction
TD1-UML-correction
 
Android - Tp1 - installation et démarrage
Android - Tp1 -   installation et démarrageAndroid - Tp1 -   installation et démarrage
Android - Tp1 - installation et démarrage
 
Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques Android - Tp2 - Elements graphiques
Android - Tp2 - Elements graphiques
 
Android - Tp3 - intents
Android - Tp3 -  intentsAndroid - Tp3 -  intents
Android - Tp3 - intents
 
Android - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancésAndroid - Tp4 - graphiques avancés
Android - Tp4 - graphiques avancés
 
Android - Tp 5 - stockage de données
Android - Tp 5 -  stockage de donnéesAndroid - Tp 5 -  stockage de données
Android - Tp 5 - stockage de données
 

Tp2 - WS avec JAXRS

  • 1. LA 3 SIL – 2013/2014 TP2 : Les Services Web avec JAX-RS Dr. Lilia Sfaxi Objectifs du TP : Création de services web de type REST avec JAX-RS, l’IDE Netbeans et le serveur Glassfish Institut National des Sciences Appliquées et de Technologie
  • 2. 2 TP2 : Les Services Web avec JAX-RS I. Les Services Web de type REST I.1. Présentation de REST REST (Representational State Transfer) est un style d’architecture basé sur les standards Web et le protocole http. Il a été présenté en premier lieu par Roy Fielding en 2000. Dans une architecture basée sur REST : -­‐ -­‐ -­‐ -­‐ I.2. Tout est Resssource. Une ressource est accédée via une interface basée sur les méthodes http standard. Il existe un serveur REST qui fournit l’accès aux ressources, et un client REST qui accède et modifie les ressources REST. Chaque ressource doit supporter les opérations HTTP communes. Elle est identifiée par un ID global (typiquement un URI) Les ressources peuvent avoir des représentations différentes (texte, xml, json…). Le client REST peut exiger des représentations spécifiques via le protocole HTTP (négociation de contenu). Les Méthodes http Les méthodes PUT, GET, POST et DELETE sont utilisées dans les architectures à base de REST. -­‐ -­‐ -­‐ -­‐ I.3. GET définit un accès en lecture de la ressource. Il ne change jamais la ressource PUT crée une nouvelle ressource DELETE supprime une ressource POST met à jour une ressource existante et peut en créer des nouvelles Les Services Web RESTful Les services web RESTful sont basés sur les méthodes http et le concept de REST, Ils définissent un URI de base pour les services, les types MIME (XML, Text, JSON, …) et l’ensemble des opérations supportées (POST, GET, PUT et DELETE). II. Présentation de JAX-RS Java définit un support pour le standard REST via JAX-RS (Java API for RESTful Web Services). Il utilise des annotations pour simplifier le développement de services web REST. Ces annotations permettent de définir les ressources et les actions pouvant y être appliquées. Ces annotations prennent effet à l’exécution, pour générer les classes et artéfacts pour la ressource. Le tableau ci-dessous représente les annotations les plus utilisées dans JAX-RS. Architecture  Orientée  Services
  • 3. 3 TP2 : Les Services Web avec JAX-RS Annotation Description @PATH Chemin URI indiquant où une classe Java sera hébergée. Par exemple /helloworld. Il est également possible d’insérer des variables dans un URI, par exemple, il est possible de demander le nom de l’utilisateur et le passer à l’application dans le chemin : /helloworld/{username} @GET Une méthode Java annotée avec @GET désigne une requête de type HTTP GET. Le comportement de la ressource est déterminé par la méthode HTTP à laquelle la ressource répond. @POST Désigne une méthode correspondant à la requête HTTP POST. @PUT Désigne une méthode correspondant à la requête HTTP PUT. @DELETE Désigne une méthode correspondant à la requête HTTP DELETE. @HEAD Désigne une méthode correspondant à la requête HTTP HEAD. @PathParam Désigne un paramètre pouvant être extrait à partir de l’URI, pour être utilisé par la ressource. Le nom du paramètre entré correspond au nom de la variable définie dans l’annotation @PATH @Consumes Utilisée pour spécifier le type de représentation MIME qu’une ressource peut consommer, et qui sont envoyées par le client. @Produces Utilisée pour spécifier le type de représentation MIME qu’une ressource peut produire, et envoyer au client. III. Première Application JAX-RS : Helloworld III.1. Création du service web Pour créer un service Web RESTful en utilisant l’IDE NetBeans et Glassfish (installés et configurés dans le TP précédent), procéder comme suit : 1. Dans NetBeans, créer une application web simple, que vous nommerez HelloWorldApplication 2. Faire un clic-droit sur le projet, et sélectionner New -> RESTful Web Services from Patterns. a. Désigner comme design pattern Simple Root Resource b. Utiliser comme nom de package : helloWorld c. Utiliser comme Path : helloworld d. Utiliser comme nom de classe : HelloWorld Architecture  Orientée  Services
  • 4. 4 TP2 : Les Services Web avec JAX-RS e. Utiliser type MIME text/html Votre Projet aura ainsi l’apparence suivante : 3. Dans le fichier HelloWorld.java, la méthode getHTML() représente une requête de type GET. Remplacer le commentaire //TODO par le code suivant, pour afficher votre message : return "<html lang="en"><body><h1>Hello, World!!</body></h1></html>"; Le code obtenu sera alors le suivant : Architecture  Orientée  Services
  • 5. 5 TP2 : Les Services Web avec JAX-RS Ressource HelloWorld, avec comme URI: /helloworld Méthode getHtml de type HTTP GET, permet d’afficher un texte de type text/html Méthode putHtml de type HTTP PUT, permet de créer une nouvelle ressource, et saisit en entrée une chaine de type text/html III.2. Test du service web Pour tester le service web, suivre les étapes suivantes : 1. Clic-droit sur le projet et choisir Test Restful Web Services. Cela ouvrira la fenêtre suivante : Architecture  Orientée  Services
  • 6. 6 TP2 : Les Services Web avec JAX-RS 2. Choisir Web Test Client in Project, et sélectionner le projet HelloWorldApplication dans la fenêtre qui vous est offerte. 3. Un navigateur web va s’ouvrir, avec l’interface de test. a. Choisir votre ressource helloworld dans le panneau gauche de votre écran b. Choisir la méthode à tester (dans notre cas, c’est la méthode GET) c. Cliquer sur le bouton Test. L’affichage suivant doit apparaître dans votre écran : III.3. Configuration du Run Pour configurer l’exécution de votre application avec le bouton Run suivantes : , suivre les étapes 1. Clic-droit sur le nom du projet et choisir Properties 2. Sélectionner la catégorie Run dans la fenêtre qui apparaît 3. Mettre la valeur du champs Relative URL à l’emplacement du service web REST relatif au PATH, qui est, pour cet exemple : webresources/helloworld Remarque : pour déterminer la valeur du Relative URL dans l’exemple de test que vous avez réalisé dans la partie III.2. , regarder le chemin affiché en haut de votre navigateur, dans le panneau de droite : Architecture  Orientée  Services
  • 7. TP2 : Les Services Web avec JAX-RS 7 4. Déployer votre service web 5. Exécuter votre service web. L’affichage suivant apparaît dans le navigateur. IV. Services Web RESTful à partir d’une base de données IV.1. Création et configuration de la base de données On se propose de générer un service web RESTful à partir d’une base de données de notre choix. Pour ce faire, commencer par créer la base de données avec MySQL (en utilisant l’outil d’administration de votre choix). Appeler la base « maBD » et créer une table client dans cette base. Choisir une structure et insérer un contenu dans cette table. Une fois la base de données créée, il faut la configurer au niveau de NetBeans. Pour cela, suivre les étapes suivantes : -­‐ Aller sous l’onglet Services dans le panneau gauche de votre IDE -­‐ -­‐ Clic-droit sur Databases et choisir Register MySQL Server Garder les paramètres par défaut, et valider. Architecture  Orientée  Services
  • 8. 8 TP2 : Les Services Web avec JAX-RS -­‐ -­‐ Clic-droit sur le nouveau serveur MySQL qui est apparu, et choisir Connect. La liste des bases de données disponibles dans le serveur apparaît, dont la base maBD. Clic-droit sur maBD et choisir Connect. Une connexion à la base de données sera alors créée, comme suit : IV.2. Génération du service web Pour générer le service web qui utilise cette base de données, suivre les étapes suivantes : -­‐ -­‐ -­‐ -­‐ -­‐ -­‐ Créer un nouveau projet de type Application Web, qu’on nommera ClientBD Clic-droit sur ce projet, et faire New -> Restful Web Services from Database Créer une nouvelle source de données relative à votre base. Si tout se passe correctement, la liste des tables dans la base apparaît dans le champs Available Tables à gauche de la fenêtre. Ajouter la table client à la liste des Selected Tables Choisir comme nom de package insat.soa.tp2.maBD Valider. Votre projet aura alors l’arborescence suivante : Architecture  Orientée  Services
  • 9. TP2 : Les Services Web avec JAX-RS 9 Regarder le code généré, et essayer de comprendre les différentes fonctionnalités. Lancer un Test du service web, et essayer d’exécuter l’ensemble des méthodes HTTP existantes. Noter la différence entre elles. V. Services Web RESTful à partir d’objets Java On désire dans ce qui suit créer un service web RESTful dont les ressources sont représentées par des classes Java annotées. Le Service Web REST de cet exercice consiste à créer un système CRUD pour l’interrogation et la réservation de trains. Les ressources manipulées par les services sont donc un train et une réservation. Le service Web REST doit pouvoir lister l’ensemble des trains, et de lister les trains qui satisfont un critère de recherche (nom, ville de départ, ville d’arrivée). Pour cela, suivre les étapes suivantes : 1. Créer une application web, appelée ReservationTrains 2. Créer la classe Train, qui modélise le concept de trains, et qui contient un attribut String nom, et deux attributs String villeDepart et String villeArrivee représentant les villes de départ et d’arrivée du train. Ajouter les getters et les setters de cette classe. Le code ressemble à ce qui suit (c’est un code manquant, vous devez le terminer): Architecture  Orientée  Services
  • 10. 10 TP2 : Les Services Web avec JAX-RS Annotation qui permet de convertir cet objet Java en XML et vice-versa. 3. Créer la classe ReserverTrain qui permet de persister les informations concernant le service web. Modifier ces données à votre guise 4. Créer la classe TrainRessource qui permet l’accès aux services web RESTful de la ressource Train. On se propose de réaliser les fonctions suivantes (cette classe est à implémenter vous-mêmes) : Architecture  Orientée  Services
  • 11. 11 TP2 : Les Services Web avec JAX-RS -­‐ -­‐ -­‐ Définir comme chemin de ressource racine la valeur /train Créer la méthode getTrains, qui permet d’afficher la liste des trains format JSON. Créer la méthode getTrain, qui utilise un chemin de ressource /train/nom/{nom}, et qui permet d’afficher le train dont le nom est comme paramètre à la requête. Le résultat de cette méthode sera forme XML. sous le racine donné sous la Indication : Compléter pour cela le code suivant : Compléter la méthode HTTP nécessaire … Compléter pour définir le format de retour demandé Ceci est le path à ajouter au chemin principal du service web. Il permet de saisir comme paramètre une valeur entrée par l’utilisateur, @Path("nom/{nom}") représentée ici par {nom} … public Train getTrain(@PathParam("nom") String nomTrain) { … Ceci indique que le paramètre nomTrain représente le même paramètre entré par l’utilisateur dans le chemin d’accès : nom } -­‐ Créer la méthode rechercheTrain, qui utilise un chemin de ressource racine /train/recherche, et qui permet, selon deux critères villeDepart et villeArrivee entrés en paramètre, d’afficher la liste des trains correspondant à ces deux critères. Le résultat de cette méthode sera sous la forme XML. Indication : Compléter pour cela le code suivant : Compléter la méthode HTTP nécessaire … Compléter pour définir le chemin demandé … Compléter pour définir le format de retour demandé … public List<Train> rechercheTrain(@QueryParam("depart") @QueryParam("arrivee") String arr) { … } String dep, Ceci indique que les paramètres dep et arr correspondent aux paramètres depart et arrivee entrés par l’utilisateur dans la requête. 5. A partir du navigateur, invoquer les trois services comme suit : -­‐ http://localhost:8080/Train/webresources/train -­‐ http://localhost:8080/Train/webresources/train/nom/TR1 -­‐ http://localhost:8080/Train/webresources/train/rechercheTrain?depart=Tunis &arrivee=Sousse Architecture  Orientée  Services
  • 12. 12 VI. TP2 : Les Services Web avec JAX-RS Homework Reprendre l’exemple de convertisseur de monnaie développé pour le TP précédent, et l’appliquer sur les services web REST. Le but est d’utiliser les différentes méthodes HTTP (@Get, @Post, @Put et @Delete), ainsi que la saisie de paramètre dans le path (@PathParam) et dans la requête (@QueryParam). Date de remise du travail : prochaine séance de TP. Architecture  Orientée  Services