SERVLET & JSP CHAPITRE 1 INTRODUCTION AU DÉVELOPPEMENT WEB Yosri ZOUARI 05-2019 JEE ? Plan de formation Introduction aux développement WEB Le modèle Servlet L’application WEB Le conteneur WEB Les Sessions Java Server Page JSP Tag Librairies Plan Architecture n-Tiers Naissance Du World Wide Web Limites de HTML et l’évolution vers le contenu dynamique JEE Les Annotations Les Méta-Annotations Les annotations Standards Introduction au protocole HTTP L’outil de gestion de projet Maven Utilisation de Maven Configuration de Maven Mainframe, Client/Serveur, Architecture n-Tiers Comment l’architecture IT a évolué? Mainframe, Client/Serveur, Architecture n-Tiers Le modèle à 1 Tiers centralisé Le modèle à 1 niveau (ou tiers) correspond à un binaire dans lequel s’exécutent toutes les couches, de la présentation à la persistance C’est l’exemple de l’application utilisée en monoposte ou sur un réseau de serveurs de fichiers Les données sont stockées sur un fichier local ou partagées sur un serveur de fichiers Le modèle à 1 Tiers centralisé Avantages Conception Programmation Administration Puissance centralisée Inconvénients IHM Pas de bureautique Le modèle à 1 Tiers répartie Plusieurs utilisateurs partagent des fichiers de données stockés sur un server commun Le moteur de serveur de données est exécuté indépendamment sur chaque poste client A/I du modèle à 1 Tiers répartie Avantages Ergonomie IHM Inconvénients Saturation du réseau Conflit d’accès aux données confidentialité Migration vers 2-Tiers Le modèle à 2 Tiers Le modèle à 2 niveaux (ou tiers), encore appelé « client/serveur première génération », repose sur l’utilisation de moteurs de bases de données relationnelles. Ces moteurs permettent de distribuer la gestion de la persistance sur un serveur Ce modèle a typiquement permis de mieux répondre au besoin d’accès concurrents et de supporter d’importants volumes Flexibilité A/I du modèle à 2 Tiers Avantages Interface utilisateur riche Données centralisées Efficace pour un nombre réduit de clients Inconvénients Fat client Coût de maintenance poste client Montée en charge Limitation du nombre de clients possibles Migration vers 3-Tiers Le modèle à 3 Tiers Un troisième niveau intermédiaire fait son apparition Une architecture partagée entre : Un client demandeur de ressources, équipée d'une interface utilisateur (généralement un navigateur) chargée de la présentation Le serveur d'application (middleware), chargé de fournir la ressource mais faisant appel à un autre serveur Le serveur de données, fournissant au serveur d'application les données dont il a besoin Le modèle à 3 Tiers et le WEB A/I du modèle à 3 Tiers Avantages Client léger Bonne gestion des ressources Bonne gestion de la montée en charge Maintenance transparente Inconvénients Montée en charge atteinte Le modèle à n Tiers Dans l'architecture à 3 niveaux, chaque serveur (niveaux 2 et 3) effectue une tâche (un service) spécialisée. Problème : Un serveur peut avoir besoin de solliciter les services d'un ou plusieurs autres serveurs afin de fournir son propre service. Solution : L’architecture à N niveaux permet de distribuer plus librement la logique applicative, ce qui facilite la répartition de la charge entre tous les niveaux. A/I du modèle à N Tiers Avantages elle sépare nettement tous les niveaux de l'application elle offre de grandes capacités d'extension Inconvénients En général, les divers services s'appuient sur des technologies très variées : nécessite de gérer l'hétérogénéité et l'interopérabilité Utilisation de Framework / outils supplémentaires Les services étant plus découpés et distribués, pose plus de problèmes liés à la distribution Naissance Du World Wide Web Décrire les protocoles conçus pour la mise en place du World Wide Web Naissance du World Wide Web Introduction au TCP/IP - Besoin Invention des réseaux de données a exigé certaines conditions de réalisation : Échange de données entre les ordinateurs et différentes appareils Échange de données via différents moyens de communications : câble ou sans fil Identification de l’expéditeur et du récepteur de données Besoin : un protocole de communication ; règles de communication via lesquelles les partenaires peuvent communiquer Une identification formelle de l’expéditeur et du récepteur Solution : TCP/IP Naissance du World Wide Web Introduction au TCP/IP - Définition C’est quoi TCP ? : TCP : Transmission Control Protocol Standard de communication des données via réseau Découpe le données en paquets avant de les envoyer via réseau et rassemble paquets de données une fois reçus au dentinaire C’est quoi IP ? : IP : Internet Protocol Permet de données une adresse logique à chaque composant du réseau pour pouvoir l’identifier lors de l’échange de données via TCP Naissance du World Wide Web Introduction au TCP/IP - Scénario Naissance du World Wide Web HTTP - Besoin Grace au TCP/IP on a établi un protocole d’échange de données entre machine Besoin : Protocol d’échange de données entre application qui permet : Identifier l’expéditeur et le récepteur Décrit le processus d’échange de données entre l’expéditeur et le récepteur Décrit comment les données sont échangées entre l’expéditeur et le récepteur Solution : HTTP Naissance du World Wide Web HTTP - Définition C’est quoi HTTP ? : HTTP : Hyper Text Transfer Protocol Le protocole d’échange entre client et serveur L'ensemble des règles régissant le format et le contenu de la conversation entre un client Web et le serveur Naissance du World Wide Web URL - Besoin Dans le web on a besoin : Identifier le protocole utiliser Identifier emplacement ou la source est placée Nom du fichier cible Comment identifier l’emplacement exacte d’une ressource ? Définir une adresse qui répond aux 3 besoins décrit ci dessous Une adresse lisible et compréhensible par l’humain Solution : URL Naissance du World Wide Web URL - Solution C’est quoi URL ? : URL : Uniform Resource Locator Nommage courant : adresse Web Cette adresse sert à désigner une ressource présente sur le web par une suite de caractère ASCII Resource peut être : Texte Image Vidéo Son Naissance du World Wide Web DNS - Besoin Besoin : Identification des ordinateurs cibles via des IP est un peut difficile pour l’être humain risque d’erreur lors de l’écriture de IP est importante Une adresse IP n’est pas significatif d’un ordinateur qui fournit un service/contenu cible Solution : DNS Naissance du World Wide Web DNS - Définition C’est quoi DNS ? : DNS : Domain Name System serveur avec un logiciel et une base de donnée qui remplace automatiquement l'adresse du domaine au format alphanumérique comme www.votredomaine.com par l'adresse IP numérique Naissance du World Wide Web HTML - Besoin Besoin : Ecrire des documents hypertextuels liant les différentes ressources d’Internet avec des hyperliens Accéder Format à des documents riches en composants graphiques standard des documents Solution : HTML Naissance du World Wide Web HTML - Définition C’est quoi HTML ? : HTML : HyperText Markup Language langage de balisage == langage de marquage permet de structurer le contenu des pages web dans différents éléments Limites de HTML et l’évolution vers le contenu dynamique Limites de HTML, JavaScript & CGI Evolution vers le contenu dynamique Les limites du HTML Faible interaction avec l’utilisateur : contenue statique Mise jour du contenue doit être faite manuellement dans la page HTML Impossible de séparer le contenu de la présentation Nombre limité de balises Introduction à JavaScript C’est quoi JavaScript ? : Développé par Netscape en 1995 sous le nom LiveScript puis adopté par tout les navigateurs. Il a pour but de dynamiser les pages WEB. C’est un language de script Orienté Objet. Il est exécuté côté navigateur sans compilation. Il peut être mis dans une page HTML ou dans un fichier à part d’extension .JS. Les limites de JavaScript Les fonctionnalités avancées ne sont possibles qu’avec les applets JAVA ou ActiveX Pas d’accès au disque utilisateur en dehors de la zone dédiée Pas de possibilité de récupérer l’IP utilisateur Pas de possibilité d’interfaçage avec une BD Contrôle sur les formulaires sur le poste client qui peut les supprimer et les surpasser Introduction à CGI CGI : Common Gateway Interface Offre une façon standard pour les navigateurs WEB pour: Appeler un programme sur le serveur Passer des données à un programme sur le serveur Recevoir des données à partir d’un programme sur le serveur C’est une interface entre programme du serveur et d’autres programmes Il n’est pas propre à un langage de programmation spécifique Comment ça marche le CGI ? Les limites de CGI Développé en C Nécessite une compilation pour chaque installation sur un Serveur Configuration complexe Développement complexe Evolution vers le contenu dynamique Besoin : Technologie portable, simple et riche qui simplifie le développements. Technologie qui permet le développement d’applications Web dynamiques. Solution : Technologie basée sur le language portable JAVA Cette technologie sera appelée JSP/Servlet JSP/Servlet font partie du standard JEE C’est quoi une Servlet ? C’est la base de la programmation web JEE C’est une classe JAVA qui tourne dans un server d’application Elle est exécutée lorsque l’URL qu’elle est liée est invoquée par un navigateur client Elle génère une page HTML dynamique Comment ça marche une Servlet ? C’est quoi une JSP ? JSP = Java Server Page Une JSP est un fichier contenant du code HTML et des fragments de code Java exécutés sur le moteur de Servlet Les pages JSP sont converties en Servlet par le moteur de Servlets lors du premier appel à la JSP JAVA / JEE C’est quoi Java EE? Pourquoi Java EE? De quoi il est composé? C’est quoi son avantage? C’est quoi Java EE ? JAVA EE n’est pas JAVA, n’est pas JavaScript JAVA JEE = JAVA Entreprise Edition = NORME Proposée par SUN Adoptée par un consortium de sociétés internationales Pourquoi ? : Besoin d’un STANDARD de développement d’application d’entreprise But ? : Monter des plateformes basée sur ce STANDARD C’est quoi une Plateforme ? Une plateforme est une base générique qui fournit un ensemble de fonctionnalités utiles pour une majorité d’applications. JAVA EE est une plateforme : Fournit un ensemble d’API (Application Programming Interface) Fournit un ensemble de spécifications générales (standard) JSR 168, JSR 303, JSR 317, … Contenu de JEE On distingue trois types d’API: Composant : Composants WEB: Servlet, JSP (Java Server Page) Composants métier: EJB (Entreprise Java Bean) Service d’Infrastructure : JDBC (Java Data Base Access): une API d’accès à la base de données JNDI (Java Naming and Directory Interface): une API d’accès aux services de nommages et aux annuaires d’entreprises tels que DNS et LDAP JTA/JTS (Java Transaction API/ Java Transaction Service) est une API définissant des interfaces standard avec un gestionnaire de transactions Contenu de JEE Service de communication : JAAS (Java Authentication et Autorisation Service) une API de AA Java Mail : une API d’envoie de mail JMS (Java Message Service) : fournit des mécanismes de communications asynchrone RMI (Remote Methode Invocation appel de procédures à distance) : une API de communication d’objet distants Contenu de JEE Contenu de JEE Avantages de JEE Séparer les 3 couches: présentation, traitement et données Avantages de JEE Pour le développeur : Une plateforme de qualité, standard et libre Communauté puissante Vaste choix d’articles, de tutoriaux, de guideline, de livres, de groupes et de forums Pour la société : Liberté de développement et innovation Communauté et vendeurs travaillent ensemble pour l’évolution de la plateforme d’où la rentabilité Pas d’API propriétaire à développer ou à maintenir Facilité de recrutement et gain en temps de formation Récapitulons C’est quoi Java JEE? Pourquoi Java JEE? Que contient JEE? Pourquoi est-elle importante? Les Annotations C’est quoi une annotation ? Contexte On utilise plusieurs fichiers de configurations dans les grands développements Fichier de configuration Temps de rédaction Connaissance de syntaxe obligatoire et différente d’un fichier à un autre Fichier de mapping Un vrai casse tête Fichier correct rarement du premier coup Besoin : une solution qui Réduit nombre des fichiers de configuration Centralise le code Java et la configuration dans un seul emplacement Solution : les Annotations C’est quoi une Annotation ? Une technique qui permet d’ajouter des informations à une Classe Propriété Méthode Paramètre Enum constant Ces informations seront traitées lors de la compilation ou le déploiement Annotation peut être : Fournie par JAVA ou un Framework JEE Développée par le développeur Format : @AnnotationName(0-NAttributes) Exemple d’une annotation L'annotation « @Override » est utilisée lors de la redéfinition d’une méthode dans une sousclasse L'annotation « @Override » est optionnelle et souvent ajoutée par l’IDE lors de la génération des méthodes à implémenter d’une interface ou une classe abstraite Les Méta-Annotations C’est quoi une méta-annotation ? Quand utiliser une méta-annotation ? Comment utiliser une méta-annotation ? Les méta-annotations Définition Servent à marquer d'autres annotations Indiquer au compilateur comment et quand il doit interpréter les annotations qui les utilisent. Servent à créer des annotations. Utilisées par les annotations standards de JAVA Emplacement : package java.lang.annotation @Documented & @Inherit @Documented : indique à l'utilitaire JavaDoc que l'annotation doit être présente dans la documentation générée. @Inherit : indique que l'annotation doit être héritée par les classes filles d'une classe marquée @Retention @Retention : Permet de régler une durée de vie pour l’annotation indique au compilateur comment il doit la gérer. Elle prend un paramètre qui se trouve dans l'énumération java.lang.annotation.RetentionPolicy , à savoir : RetentionPolicy.CLASS : Les annotations seront enregistrées dans le fichier .class par le compilateur mais ils ne seront pas utilisables par la JVM au moment de l’exécution. RetentionPolicy.RUNTIME : Les annotations seront enregistrées dans le fichier .class par le compilateur et seront utilisables par la JVM pendant l'exécution du programme, grâce à l'introspection. RetentionPolicy.SOURCE : Les annotations ne seront pas enregistrées dans le fichier .class, par conséquent, elles ne pourront être utilisées que par des outils sachant lire des fichiers source, comme l'utilitaire JavaDoc, le compilateur... @Target Définition @Target : Permet de cibler sur quels éléments du langage nous pourrons utiliser des annotations. Accepte un paramètre qui est représenté par une énumération présente dans le package java.lang.annotation.ElementType et qui définit quel type de données qu’on peut utiliser @Target Enumération ElementType Les Annotations Standards C’est quoi une annotation standard ? Quand utiliser une annotation standard ? Comment utiliser une annotation standard ? Les Annotations Standards Définition Les annotations standards sont des annotations marqueurs proposées par JAVA. Elles sont au nombre de 3 : @Deprecated @SuppressWarnings @Override Les Annotations Standards @Deprecated @Deprecated : Indique au compilateur que l'élément marqué ne devrait plus être utilisé. Les Annotations Standards @SuppressWarnings @SuppressWarnings : permet d'indiquer au compilateur que certains éléments du code ne doivent pas générer de warning lors de la compilation. Elle prend en paramètre un tableau de String correspondant aux différents cas pouvant être gérés par cette annotation Les Annotations Standards @SuppressWarnings Les Annotations Standards @Override @Override : ne doit être utilisée que sur des méthodes redéfinies via le principe d'héritage. Elle informe le compilateur qu'une méthode est redéfinie et donc que celle-ci doit être présente dans la classe mère. Introduction au protocole HTTP C’est quoi HTTP? Quels sont les détails du protocoles? Comment utiliser HTTP? C’est quoi le protocole HTTP ? HTTP : Hyper Text Transfer Protocol C’est le protocole d’échange entre client et serveur C’est l'ensemble des règles régissant le format et le contenu de la conversation entre un client Web et le serveur Scénario d’échange Méthodes d’une requête HTTP HEAD : demande des informations concernant la ressource GET : demande des informations et la ressource désignée POST : envoi de données (formulaire vers le serveur) et demande la ressource désignée PUT : enregistrement du corps de la requête à l ’URL indiquée DELETE : suppression de la ressource désignée par l ’URL Classification des méthodes HTTP « Idempotent » et « Safe » Idempotent : Le résultat de la requête est toujours le même indépendamment du nombre de fois on a exécuté la même requête Safe : La requête n’affecte pas des ressources sur le serveur Entête d’une requête HTTP On peut spécifier 5 paramètres : From : Donne l'e-mail de la personne contrôlant le navigateur (cela peut poser des problèmes de respect de la vie privée). Referer : URL de l'objet qui amène la requête (URL de la page où se trouve le lien) User-Agent : l'identifiant du navigateur. Sert pour adapter la réponse au navigateur Authorization : permet à un client de s'authentifier auprès du serveur If-Modified-Since : permet de faire des GET conditionnels Exploitons ensemble une page Web avec Firebug Entête d’une réponse HTTP Server : modèle du serveur WEB Retry-After : date ou nombre de secondes pour un ressai en cas de code 503 (service unavailable) Set-Cookie : créer ou modifie un cookie sur le client Last-Modified : date de dernière modification du doc. Utilisé par les caches Content-Length : taille du document en octet utilisé par le client pour gauger la progression des chargements Content-Encoding : type encodage du document renvoyé compress, x-gzip, x-zip Content-Language : le langage du document retourné fr, en Content-Location : URI de l ’entité quand l ’URI est à plusieurs endroits Codes des statuts HTTP Qu’est ce qu’on va afficher avec HTTP? HTTP c’est pour transférer du texte Problème : comment afficher ce texte? Solution : Navigateur Problème : Afficher quoi? Comment interpréter le contenu? Est ce qu’il est le même d’un serveur à autre? Est-ce qu’on va afficher du texte brute? Comment on va répartir le texte sur la page? Pas d’images? Pas de lien vers d’autres pages? Pas de tableau comme Excel? Pas de couleur? Pas de police de texte? Solution : HTML (HyperText Markup Language) Problème : On intégrer tout dans une page HTML; contenu et mise en forme, C’est devenue chaotique et difficile à maintenir! Quoi faire? Solution : Séparer le contenue de la mise en forme HTML : pour l’envoie du contenue CSS : pour le design et la mise en forme L’outil de gestion de projets Maven C’est quoi Maven? Pourquoi Maven? Comment on utilise Maven? C’est quoi Maven? Maven est un outil de gestion et de compréhension des logiciels sur la base du concept de Project Object Model (POM) qui peut gérer la construction du projet, la génération de rapport et de documentation POM? : C’est la pièce maitresse de Maven. C’est un fichier XML contenant la configuration détaillée du projet utilisée par Maven pour construire le projet Construction (build)? : c’est la procédure de compilation d’un projet dans une structure adéquate à sa nature Pourquoi Maven? Maven est plus qu'un simple outil de build Maven a été construit pour certains objectifs Maven fournit: Processus de construction facile Système de construction uniforme Information de Qualité sur le projet Guide pour les meilleures pratiques de développement Ce que Maven a réalisé : Visibilité Réutilisabilité Maintenabilité Compréhensibilité "accumulateur de la connaissance" Comment Maven gère les dépendances? Mécanisme Maven s'appuie sur des « repositories » de librairies (jar). Ces « repositories » peuvent être locaux à la machine ou accessibles via HTTP. A sa première exécution, Maven télécharge les différents plugins dont il a besoin et les installe dans le répertoire « .maven/repository » situé dans le répertoire de travail de l'utilisateur. Ces même librairies peuvent être réutilisées entre les différents projets. Si on ne spécifie pas explicitement dans le fichier de configuration l’emplacement du repository, IL SERA par défaut « ${user.home}/.m2/repository » Comment Maven gère les dépendances? Illustration Comment Maven gère les dépendances? Identification de la version Comment on configure Maven? Le fichier « settings.xml » contient la configuration globale de Maven. C'est un document XML dont le tag racine est le tag « <settings> ». Plusieurs tags fils permettent de préciser les éléments de la configuration : Utilisation de Maven Comment utiliser Maven ? Quelles sont les commandes de Maven? La construction d’un projet se passe en différentes phases successives qui décrivent le cycle de vie ( Build Lifecycle ) : validate : vérifier qui le POM est correct et complet. compile : compile les sources du projet qui se trouvent dans « src/main/java » et place les fichiers comples (.class) dans le dossier target. test : compile les tests qui se trouvent dans « src/test/java » et lance l’intégralité des tests, les tests compilés sont placés dans le dossier target. Quelles sont les commandes de Maven? package : construire le projet dans le format adéquat cité dans la balise « packaging » sous le dossier « target ». install : utilise le package généré à la phase « package » et l’ajoute au dépôt. A utiliser pour une API : elle peut être dés lors être utilisée comme dépendance pour un autre projet. deploy : déploie l’application selon la configuration mentionnée. clean : détruit la compilation précédente sous le répertoire « target » Quelles sont les commandes de Maven? illustration Manipulons ensemble Maven Télécharger et installer Maven Ajouter une variable d’environnement « M2_HOME » Ajouter « M2_HOME » à la variable « PATH » Accéder à la console Taper mvn –version Taper mvn archetype:generate Exploitons ensemble le plugin Maven sous Eclipse Exploitons le repository Exploitons le fichier de configuration Utilisation de Maven avec les IDE Comment utiliser Maven avec les IDE ? : Les IDE comme Eclipse, NetBeans et IntelliJ intègrent Maven et permet de créer et manipuler les projets avec Configuration de Maven dans Eclipse IDE : Création de projet avec Maven dans IDE (1) Création de projet avec Maven dans Eclipse IDE : Création de projet avec Maven dans IDE (2) Choisir le projet à partir du catalogue de Maven dans Eclipse IDE : Exécution d’un projet avec Maven Accès à l’interface de configuration Exécution d’un projet avec Maven Créer une nouvelle configuration Exécution d’un projet avec Maven Configurer la commande Maven Configuration de Maven Comment configurer Maven ? Fichier « pom.xml » Description Fichier « pom.xml » contient un ensemble de balises classifiés en 4 catégories : Balise de bases (The Basics) Fichier « pom.xml » Description Balises de configuration (Build Settings) Fichier « pom.xml » Description Balises d’information (Project Information) Fichier « pom.xml » Description Balises de configuration de l’environnement (Environement Settings) Fichier « pom.xml » The Basics modelVersion : version du fichier « pom.xml ». groupId : indique appartenance du projet sous forme de nom cours séparés par des « . ». Lorsqu'il est stocké dans un repository, le groupe agit comme une structure de package Java dans un système d'exploitation. Les termes sont remplacés par les séparateurs de répertoires spécifiques du OS. artifactId : la version du projet. Packaging : type du paquetage du projet à générer après compilation ; war, jar, … dependancies : sous cette balise qu’on va ajoute les dépendances du projet. Fichier « pom.xml » The Basics properties : expose toutes les propriétés de java.lang.System qu’on peut redéfinir comme la version de Java : On peut définir nos propres propriétés pour pouvoir les utiliser après. L’exemple suivant est une pratique courant dans les projets : Fichier « pom.xml » Build Settings finalName : Il s'agit du nom du projet fourni lors de la construction finale. La valeur par défaut est ${artifactId} ${version}. Fichier « pom.xml » Environment Settings profiles : permet de définir un ou plusieurs profile pour un même projet. Dans un même projet, on des configurations différentes pour des environnements différents Pour éviter le changement manuelle du fichier pour chaque environnement, Maven a introduit la notion de profile pour : Ajouter/Remplacer une dépendance particulière comme le JDBC qui peut différer d’un environnement ou d’un client à un autre Spécifier le type du packaging qui peut différer d’un environnement à un autre Exemple : Récapitulons C’est quoi l’architecture n-tiers ? C’est quoi JEE ? C’est quoi HTTP ? C’est quoi Maven ?