Master Pro Compétence Complémentaire en Informatique Programmation et Langages - Applications Internet Examen : jeudi 28 mars 2013

Documents pareils
Application web de gestion de comptes en banques

Web Tier : déploiement de servlets

Architecture Orientée Service, JSON et API REST

Compte Rendu d intégration d application

Alfstore workflow framework Spécification technique

Introduction à JDBC. Accès aux bases de données en Java

Modélisation PHP Orientée Objet pour les Projets Modèle MVC (Modèle Vue Contrôleur) Mini Framework

1. Installation d'un serveur d'application JBoss:

La persistance des données dans les applications : DAO, JPA, Hibernate... COMPIL 2010 francois.jannin@inp-toulouse.fr 1

SIO Page 1 de 5. Applications Web dynamiques. Prof. : Dzenan Ridjanovic Assistant : Vincent Dussault

Programme «Analyste Programmeur» Diplôme d état : «Développeur Informatique» Homologué au niveau III (Bac+2) (JO N 176 du 1 août 2003) (34 semaines)

Formation Webase 5. Formation Webase 5. Ses secrets, de l architecture MVC à l application Web. Adrien Grand <jpountz@via.ecp.fr> Centrale Réseaux

Java DataBaseConnectivity

Langage et Concepts de ProgrammationOrientée-Objet 1 / 40

Mise en œuvre des serveurs d application

Formation en Logiciels Libres. Fiche d inscription

Programmer en JAVA. par Tama

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Refonte front-office / back-office - Architecture & Conception -

Quelques patterns pour la persistance des objets avec DAO DAO. Principe de base. Utilité des DTOs. Le modèle de conception DTO (Data Transfer Object)

Développement des Systèmes d Information

TD/TP PAC - Programmation n 3

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

Généralités. javadoc. Format des commentaires. Format des commentaires. Caractères spéciaux. Insérer du code

Sage 100 CRM - Guide de la Fusion Avancée Version 8. Mise à jour : 2015 version 8

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

TD/TP PAC - Programmation n 3

Auto-évaluation Programmation en Java

LANGAGUE JAVA. Public Développeurs souhaitant étendre leur panel de langages de programmation

RMI le langage Java XII-1 JMF

Corrigé des exercices sur les références

Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère

Devenez un véritable développeur web en 3 mois!

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Langage propre à Oracle basé sur ADA. Offre une extension procédurale à SQL

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

RMI. Remote Method Invocation: permet d'invoquer des méthodes d'objets distants.

Programmation Objet Java Correction

2 Chapitre 1 Introduction

JavaServer Pages (JSP)

Remote Method Invocation (RMI)

CREATION WEB DYNAMIQUE

TP1 : Initiation à Java et Eclipse

Licence de MIDO - 3ème année Spécialités Informatique et Mathématiques Appliquées

Accès aux bases de données

Java Licence Professionnelle CISII,

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

Généralités sur le Langage Java et éléments syntaxiques.

F. Barthélemy. 17 mai 2005

Le stockage local de données en HTML5

Etude et développement d un moteur de recherche

Java Licence Professionnelle CISII, Cours 2 : Classes et Objets

Programmation Web TP1 - HTML

2 Grad Info Soir Langage C++ Juin Projet BANQUE

Langage et Concepts de Programmation Objet. 1 Attributs et Méthodes d instance ou de classe. Travaux Dirigés no2

7.0 Guide de la solution Portable sans fil

Connexion à SQL Server 2005 à partir du serveur d application SJSAS 9 Utilisation d une interface JDBC

TD Objets distribués n 3 : Windows XP et Visual Studio.NET. Introduction à.net Remoting

Création d une application JEE

Institut Supérieur de Gestion. Cours pour 3 ème LFIG. Java Enterprise Edition Introduction Bayoudhi Chaouki

WEB & DÉVELOPPEMENT LES BASES DU WEB LE LANGAGE HTML FEUILLES DE STYLES CSS HISTORIQUE D INTERNET ET DU WEB LES DIFFÉRENTS LANGAGES

Sage CRM. 7.2 Guide de Portail Client

Premiers Pas en Programmation Objet : les Classes et les Objets

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

La base de données XML exist. A. Belaïd

INFORMATIQUE & WEB. PARCOURS CERTIFICAT PROFESSIONNEL Programmation de sites Web. 1 an 7 MODULES. Code du diplôme : CP09

Projet Viticulture - TP 3 : bases de données distantes BTS Services informatiques aux organisations

PDO : PHP Data Object 1/13

INF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février :30 à 20:30

Remote Method Invocation en Java (RMI)

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

TP Programmation Java / JDBC / Oracle

TP SIN Programmation sur androïde Support : eclipse

SYSTÈMES D INFORMATIONS

Cours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre Enrica.Duchi@liafa.jussieu.fr

Authentification et contrôle d'accès dans les applications web

Réplication E-maj Foreign Data Wrapper PostGIS PostgreSQL-f

Page 1 sur 5 TP3. Thèmes du TP : l la classe Object. l Vector<T> l tutorial Interfaces. l Stack<T>

PHP 5. La base de données MySql. A. Belaïd 1

Connexion à une base de données. Connexion à une base de données. Connexion à une base de données Développement d'une application

Cette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :

Gestion du parc informatique matériel et logiciel de l Ensicaen. Rapport de projet. Spécialité Informatique 2 e année. SAKHI Taoufik SIFAOUI Mohammed

Paginer les données côté serveur, mettre en cache côté client

1. Base de données SQLite

Formation Webmaster : Création de site Web Initiation + Approfondissement

3W Academy Programme de Formation Développeur Intégrateur web Total : 400 heures

Technologie Web. Conception de sites Web. Alexandre Pauchet. INSA Rouen - Département ASI. INSA - ASI TechnoWeb : Rappels UML 1/21

RÉALISATION D UN SITE DE RENCONTRE

SITE WEB E-COMMERCE ET VENTE A DISTANCE

Projet 2. Gestion des services enseignants CENTRE D ENSEIGNEMENT ET DE RECHERCHE EN INFORMATIQUE. G r o u p e :

Module BD et sites WEB

Guide d utilisation 2012

Encapsulation. L'encapsulation consiste à rendre les membres d'un objet plus ou moins visibles pour les autres objets.

Les bases de données

Projet ISN - dossier réalisé par Randrianarimanana Stéphanie. Titre du projet : Site de rencontre. le nom de notre site de rencontre : Linkymeet

CONCOURS DE L AGRÉGATION INTERNE «ÉCONOMIE ET GESTION» SESSION 2015 SECONDE ÉPREUVE

Transcription:

Master Pro Compétence Complémentaire en Informatique Programmation et Langages - Applications Internet Examen : jeudi 28 mars 2013 Durée 3h Documents autorisés Bien que le sujet forme un tout cohérent, les questions peuvent être traitées de manière indépendante. La compagnie IM2AG-AIRLINES développe pour la gestion de ses vols aériens une application Web qui entre autres permet à ses passagers de choisir leurs places sur les vols et de s'enregistrer en ligne. La couche métier Pour réaliser cette application IM2AG-AIRLINES a choisi d'utiliser des technologies Java. Pour modéliser les différentes entités impliquées dans l'application, un ensemble de classes ont été définies. Le diagramme de classes UML donné en annexe 1 montre les différentes classes de ce modèle et les relations qui les relient. La classe Passager représente un voyageur. Un voyageur possède les attributs suivants : String id : identifiant du voyageur (qui lui a été attribué lorsqu'il a été enregistré dans le système), String nom : le nom du voyageur, String prenom : le prénom du voyageur, List<Billet> billets : la liste des billets que le voyageur a acheté à la compagnie. Un billet, représenté par la classe Billet est défini par les informations suivantes : Vol vol : le vol correspondant à ce billet, int noplace : le numéro de place sur ce vol. Pour chaque vol les attributs suivants sont définis dans la classe Vol : String id : l identifiant du vol (une chaîne de caractères), Aeroport depart : l aéroport de départ, Aeroport arrivee : l aéroport d arrivée, datedepart : la date de départ (jour et heure), int duree: la durée du vol (en minutes), String[] places : un tableau de chaînes de caractères de taille le nombre de places du vol qui permet de gérer l'affectation des places aux passagers : places[i] vaut null si la place de numéro i+1 est libre, sinon elle contient la chaîne identifiant le passager qui l occupe, List<Zone> zones : la liste des différentes zones de répartition des places. Sur un vol, les places sont réparties selon différentes zones. A chaque zone est associé un tarif de base particulier. Chaque zone est définie par le numéro de la place à laquelle elle débute et le nombre de places consécutives qu elle contient. Deux types de zones sont distingués : les zones affaires (business) qui bénéficient des meilleures prestations et les zones économiques aux prestations moindres. Pour les zones économiques les prestations considérées sont la mise à disposition ou non d un système de vidéo individuel et le nombre de repas servis durant le vol. Pour les zones business, certaines peuvent offrir un accès internet durant le vol, d autres non. Ces prestations conduisent à un supplément qui vient s ajouter au tarif de base pour le calcul du tarif d une place. Le calcul de ce supplément est le suivant : Zone économique : 20 par repas servi en vol auxquels s ajoutent 10 si un système de vidéo individuel est disponible. Zone business : 30 si accès à internet Page 1/6

Les attributs définis dans la classe Zone sont : int noplacedebut : le numéro de la première place de la zone. int nbplaces : le nombre de places de la zone double tarifbase : le tarif de base de la zone Outre les accesseurs (getnbplaces(),getnoplacedebut(),gettarifbase()) la classe Zone définit les méthodes suivantes : getnoplacefin() : qui retourne le numéro de la dernière place de la zone. getsupplement() : qui retourne le supplément à payer pour cette zone selon les prestations offertes. gettarif() : qui retourne le tarif des billets pour cette zone. La classe ZoneBusiness définit un attribut supplémentaire, boolean internet qui indique si internet est accessible en vol pour les sièges de cette zone; attribut consultable par la méthode hasinternet(). La classe ZoneEco définit deux attributs supplémentaires : int nbrerepas qui indique le nombre de repas qui seront servis durant le vol (et facturés en supplément) et est consultable par la méthode getnbrerepas(). boolean videoindiv qui indique si les sièges de cette zone disposent ou non d un système de vidéo individuelle (facturé en supplément dans le cas où il est présent). Cet attribut est consultable par la méthode hasvideoindiv(). Finalement, la classe Aeroport définit les attributs suivants : String code : le code AITA 1 (ou code IATA) de l'aéroport, String nom : le nom de l'aéroport, String pays : le nom du pays où est situé l'aéroport. Par exemple l'aéroport de Vancouver (Canada) a pour nom Vancouver International Airport et pour code YVR. Question 1 : les annexes 2 et 3 donnent une partie du code Java des classes Zone et ZoneEco. Complétez ce code sur les feuilles annexe 2 et annexe 3 que vous joindrez à votre copie Question 2 : l'annexe 4 contient le squelette de la classe Vol. A quoi servent les instructions import situées en début de ce code? Que se passerait-il si elles étaient absentes? Question 3 : Complétez le code de la classe Vol sur la feuille annexe 4 que vous joindrez à votre copie. 1 l'association Internationale du Transport Aérien Page 2/6

La couche de persistance des données Les informations relatives aux passagers, billets, vols, etc., sont stockées dans une base de données relationnelle. Parmi les tables définies, nous nous intéresserons plus particulièrement aux tables PASSAGERS et BILLETS. La table PASSAGERS contient la description des différents aéroports : ID (VARCHAR(7)) : l'identifiant du passager, NOM (VARCHAR) : le nom du passager, PRENOM (VARCHAR) : le prénom du passager. La table BILLETS contient la description des différents billets : NO_VOL (VARCHAR(6)) : le numéro du vol correspondant à ce billet, ID_PASSAGER (VARCHAR(7)) : l'identifiant du passager, NO_PLACE (INTEGER) : le numéro de la place du passager si il en a une d'attribuée, 0 sinon. La table VOLS contient la description des différents vols, nous ne rentrerons pas dans les détails concernant cette table et les autres tables du système. Le code pour les classes DAO chargées de faire les échanges entre le code Java et la base de données a commencé à être écrit en utilisant l API JDBC. Une super-classe AbstractDatabaseDAO a été définie, toutes les classes de DAO en héritent. package im2ag.airlines.com.dao; import java.sql.connection; import java.sql.sqlexception; import javax.sql.datasource; public abstract class AbstractDataBaseDAO { protected DataSource datasource; protected AbstractDataBaseDAO (DataSource datasource) { this.datasource = datasource; protected void closeconnection(connection c) throws SQLException { if (c!= null) { c.close(); Page 3/6

Concernant les passagers, une classe PassagerDAO a été définie, mais son code n a pas été terminé. package im2ag.airlines.com.dao; import im2ag.airlines.com.model.passager; import im2ag.airlines.com.model.billet; import java.sql.connection; import java.sql.sqlexception; import javax.sql.datasource; /** DAO (Data Acces Object) : cherche dans la base de données les informations relatives * aux Passagers */ public class PassagerDAO extends AbstractDataBaseDAO { public PassagerDAO(DataSource ds) { super(ds); /** * construction d'un objet Passger à partir des informations contenues dans les * tables PASSAGERS et BILLETS de la base de données. * @param idpassager l'identifiant du passager à charger * @return un objet Passager représentant le Passager considéré, null si il n'y a pas * de passager identifié par idpassager. * @throws SQLException si un problème lors de l'accès aux données. */ public Passager loadpassager(string idpassager) throws SQLException { Connection conn = null; try { conn = datasource.getconnection(); // A COMPLETER // chercher dans la table PASSAGERS les infos relatives au passager idpassager 2 // construire un objet passager // chercher dans la tables BILLETS les infos relatives aux billets de ce passager 3 // pour chaque billet du passager construire un objet Billet et le rajouter // à liste des billets du passager. // retourner l'objet Passager. finally { closeconnection(conn); Question 4 : Selon vous, quel est l intérêt de la classe AbstractDataBaseDAO? Question 5 : Dans la méthode loadpassager de la classe PassagerDAO une connexion JDBC est obtenue par un message getconnection envoyé à la datasource définie dans la classe AbstractDataBaseDAO. a) L objet représentant la connexion JDBC à la base de donnée est accédé au travers d une référence conn. Celle-ci est déclarée avec le type java.sql.connection qui est une interface Java. Quelle est la classe réelle de l objet référencé par conn? Où est-elle définie? Pourquoi typer conn avec l interface java.sql.connection plutôt qu avec cette classe réelle? b) Pourquoi cette connexion est-elle fermée dans une clause finally? Que se passerait-il si cette instruction de fermeture était absente? Question 6 : Complétez le code de la méthode loadpassager de la classe PassagerDAO. La documentation de la classe Passager vous est donnée en annexe 5. Pour créer les objets Billets, on utilisera les services de la classe BilletFactory dont la documentation vous est donnée en annexe 6. 2 La requête SQL pour sélectionner le passager d'identifiant X234ZTY : SELECT * FROM PASSAGERS WHERE ID ='X234ZTY' 3 La requête SQL pour sélectionner les billets du passager d'identifiant X234ZTY : SELECT * FROM BILLETS WHERE ID_PASSAGER ='X234ZTY' Page 4/6

Application WEB La page d'accueil du site affiche un formulaire qui permet à un utilisateur de se connecter en fournissant son identifiant. La demande de connexion est transmise à une servlet (ConnexionServlet) qui se charge de récupérer les informations associé à l'utilisateur et de le rediriger vers une page (Billets.jsp). Cette page affiche la liste des billets du passager avec la possibilité de modifier son numéro de place. Question 7 : L'identifiant donné dans le formulaire de connexion est une suite de 7 caractères alphanumériques (lettre ou chiffre). Comment vérifier que l'utilisateur respecte cette contrainte? Le code de la Servlet ConnexionServlet a commencé à être écrit. Il vous est donné en annexe 7. Question 8 : Lignes 14 et 17 de ce code se trouvent deux annotations : @WebServlet(name = "ActionsConnecter", urlpatterns = {"/connexion") @Resource(name = "jdbc/im2agairlines") Expliquez en quelques phrases à quoi servent ces annotations. Question 9 : La ligne 34, provoque une erreur de compilation. Le message affiché est le suivant : Quelle est la cause de ce message? Indiquez en quelques mots la correction que vous proposeriez. Question 10 : Certains traitements sont simplement décrits sous la forme de commentaires. ligne 33 : String id = ""; // TODO recupérer l'identifiant de l'utilisateur ligne 36 : // TODO sauvegarder l'objet passager comme attribut du contexte adéquat // (application, session, requête) // rediriger vers la page Billets.jsp ligne 40 : // TODO revenir sur la page d'accueil avec le message d'erreur Page 5/6

Ecrire le code Java correspondant à ces différents traitements. Pour le traitement ligne 36, vous justifierez en quelques mots le choix effectué pour le contexte de sauvegarde de l'objet Passager. L'affichage de la liste des billets d'un passager est effectué par la page Billets.jsp, dont le squelette vous est donné en annexe 8. Les billets sont affichés comme éléments d'un liste non numérotée (balise <ul>). L'aéroport de départ, l'aéroport d'arrivée, la durée du vol, le numéro de la place, le bouton permettant de la modifier sont également affichés à l'aide d'une liste non numérotée. La figure ci-dessous donne un aperçu de ce que serait l'affichage sans l'application de styles CSS. Le bouton Modifier associé à chaque billet, permet à l'utilisateur de choisir/modifier sa place sur le vol correspondant. Ce bouton est un bouton de type submit qui envoie une requête HTTP à une servlet (ChoixPlaceServlet) qui récupère comme attribut du contexte d'application l'objet Java représentant le vol concerné et redirige la requête vers une page JSP (choixplace.jsp). Cette page affiche un plan de la cabine sur lequel l'utilisateur pourra choisir son siège. Question 11 : a) Quel(s) paramètre(s) est-il nécessaire d'insérer à la requête HTTP transmise à la servlet ChoixPlaceServlet? b) A votre avis pourquoi les objets correspondant aux vols sont-ils stockés comme attributs de l'application? Question 12 : Complétez le code de la page JSP Billets.jsp (voir annexe 8) en y intégrant le code correspondant à l'affichage dynamique des données du passager connecté. On s'intéressera uniquement au code JSP et HTML, la mise en forme étant assurée par une feuille de styles CSS (im2agairlines.css) qui vous est donnée. Page 6/6