J2EE : Java Enterprise Edition Servlets. Plan zContenu dynamique yServlets et alternatives zServlets yClasses de base yServlets et threads yCycle de vie.

Slides:



Advertisements
Présentations similaires
Didacticiel Mon EBSCOhost
Advertisements

Module 5 : Implémentation de l'impression
Serveur jeu Le serveur fait partie d'un logiciel de jeu en ligne multi joueur en architecture client serveur. Il répond à des demandes.
Exposé de Système - Informatique et Réseau
Programmation Web Les JSP.
(Classes prédéfinies – API Java)
Cours 5.3 : XML et les architectures N-tiers – Tier Présentation
Cours 6 : XML et les architectures N-tiers – Tier Applicatif

Design Pattern MVC En PHP5.
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Entité Module Java Expert.
Environnement Premier projet.
TP 3-4 BD21.
Servlet JAVA.
FLSI602 Génie Informatique et Réseaux
Introduction aux Session Beans
Common Gateway Interface
Oct.-2000DESS IIDEE © B. BAH 1 ASP Caractéristiques dun fichier ASP Son extension : « *.asp » La balise: Son indépendance vis à vis de toute plate–forme,
LOG 02 Bases de Données Avancées Rappels sur JSP / Servlet
SECURITE DU SYSTEME D’INFORMATION (SSI)
Module 1 : Préparation de l'administration d'un serveur
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Struts 1 & 2 Tlohi ibtissam Tabit boutaina Ilias bouras
1 Sécurité Informatique : Proxy Présenter par : Mounir GRARI.
Administration de SharePoint
M2 – MIAGE/SID Servlet M2 – MIAGE/SID
SERVLETS PRESENTATION
Serveurs Partagés Oracle
Lycée Louis Vincent Séance 1
Les instructions PHP pour l'accès à une base de données MySql
Introduction au paradigme objet Concepts importants surcharge (overload) redéfinition (override) Définition d’une classe Définition des attributs.
ASP.NET Par: Hugo St-Louis. C ARACTÉRISTIQUES A SP. NET Évolution, successeur plus flexible quASP (Active Server Pages). Pages web dynamiques permettant.
Module 4 : Création et gestion de comptes d'utilisateur
Création et gestion de comptes d'utilisateur
FICHIERS : Définition : Algorithme général:
Structures de données IFT-2000
PhP-MySQL Pagora 2012/2013 CTD 1 - Presentation de moi ^^
Module 2 : Préparation de l'analyse des performances du serveur
Servlets.
JSP (Java Server Pages)
Leçon 1 : notion dobjet IUP Génie Informatique Besançon Méthode et Outils pour la Programmation Françoise Greffier Université de Franche-Comté.
Document élaboré à Centrale Paris par Pascal Morenton LES TECHNOLOGIES DU WEB 1. LES PHASES D UN DEPLOIEMENT DE RESEAUX 2. LE LANGAGE HTML 3. LE LANGAGE.
JEE 5 F.Pfister 2 institut eerie JEE – Une plateforme serveur  Développement et exécution d'applications réparties.
M2 – MIAGE/SID Servlet M2 – MIAGE/SID
Module 8 : Surveillance des performances de SQL Server
PHP 5° PARTIE : LES COOKIES
JDBC L'API JDBC est utilisée pour utilisée pour intéragir avec une base de données.
Créer des packages.
CEG3585/CEG3555 Tutorat 2 Hi ver 2013.
Enterprise Java Beans 3.0 Cours INF Bases de Données Hiver 2005, groupe 10 Stefan MARTINESCU.
420-B63 Programmation Web Avancée Auteur : Frédéric Thériault 1.
Tutorat en bio-informatique
Auvray Vincent Blanchy François Bonmariage Nicolas Mélon Laurent
Programmation Système et Réseau
Les sockets.
S'initier au HTML et aux feuilles de style CSS Cours 5.
Page 1Dernière mise à jour: 17 avril 2015 Service de l'enseignement des technologies de l'information, © HEC Montréal, Tous droits réservés.
Struts.
Module 3 : Création d'un domaine Windows 2000
 Formulaires HTML : traiter les entrées utilisateur
Initiation au JavaScript
Les Servlets Présentation Cycle de vie Principe de fonctionnement
Java - Servlet et JSP Servlets JSP (Java Server Pages) Tomcat
Architecture Client/Serveur
Les Java Server Pages Dans ce chapitre, nous allons :
CPI/BTS 2 Programmation Web Les sites dynamiques Prog Web CPI/BTS2 – M. Dravet – 02/10/2003 Dernière modification: 02/10/2003.
IFT 6800 Atelier en Technologies d’information Chapitre 5 Introduction aux Servelets & JSP.
Scénario Les scénarios permettent de modifier la position, taille … des calques au cours du temps. Son fonctionnement est très proche de celui de Macromedia.
Parquet Geoffrey 3 ARIL EXIA.CESI ARRAS. Présentation du MLD Présentation de la persistance Présentation récapitulatif du projet JSP/SERVLET MVC Cycle.
1 Initiation aux bases de données et à la programmation événementielle VBA sous ACCESS Cours N° 4 Support de cours rédigé par Bernard COFFIN Université.
Transcription de la présentation:

J2EE : Java Enterprise Edition Servlets

Plan zContenu dynamique yServlets et alternatives zServlets yClasses de base yServlets et threads yCycle de vie yLe contexte d’une servlet yLes servlets HTTP yLa configuration d’une servlet

Servlet zContenu web dynamique yLa page web repose sur les données fournies par le client xRecherche d’informations, traitement de commandes, etc. yLes données changent fréquemment, x météo, nouvelles, etc. yLa page web utilise des informations contenues dans des bases de données ou d’autres sources xPrix des articles, quantité en stock, etc. zCôté client yApplet zCôté serveur yservlet

Avantages des servlets sur les scripts cgi zLes servlets sont plus efficaces ycgi : un nouveau processus est démarré à chaque requête yservlet : un thread par requête, le code n’est chargé qu’une fois zLes servlets sont plus pratiques yPas besoin d’apprendre PERL yBeaucoup de code et d’utilitaires disponibles xGestion des cookies, sessions, lire et affecter des en-têtes http, etc. zLes servlets sont plus puissantes yAccès direct au serveur web x facilite les recherches d’images et d’informations emmagasinées dans des endroits standards yPartage d’information entre servlets, e.g. pool de connexion à une BD yGarder les informations entre les requêtes (tracking, session, etc.) zLes servlets sont portables d’un serveur à l’autre zLes servlets sont gratuites à utiliser, une fois que l’on a un serveur

Alternatives possibles pour rendre le contenu dynamique zServlets purs zJSP (Java Server Pages) yEntrelacer du html statique avec du html généré dynamiquement zASP (Active Server Pages) ySimilaire à JSP, mais Microsoft… zPHP (Pretty Hypertext Processor) yun langage permettant d'écrire des scripts qui seront ensuite interprétés par un logiciel zSSI (Server-Side Include) yInclusion de portions de code html définies par une tierce partie dans une page web statique zJavaScript yPour générer du contenu dynamique sur le client yUtilise des données qui appartiennent à l’environnement du client yPas d’accès au côté serveur

Servlet zun ensemble de classes yDéfini dans J2EE zune application développée dans un contexte client- serveur zvient se greffer sur des applications existantes afin de les étendre ou des les implémenter différemment. zUne servlet n'existe pas par elle-même, mais étend des applications utilisant des protocoles tels que HTTP, SMTP ou FTP par exemple

Classes de base yGenericServlet yHttpServlet xHelloServlet xhttp://localhost:8080/MyServlets/HelloServlet?qui=moi

Servlet et threads zle moteur de Servlets et les Servlets partagent le même processus  l'instruction System.exit() dans le code d'une servlet cause l'arrêt du moteur de Servlets jusqu'à ce que l'administrateur le redémarre zchaque servlet s'exécute dans un thread de la machine virtuelle Java à laquelle elle est associée yles Servlets peuvent communiquer entre elles facilement (changement de contexte léger) yelles fonctionnent dans le même espace d'adressage et les données sont donc accessibles en lecture et en écriture simplement.

Que se passe-t-il si plusieurs personnes demandent à accéder à la même Servlet en même temps ? zAlt 1 yUne seule instance de chaque servlet existe en mémoire ychaque requête venant des clients Web lance un nouveau threads qui peut manipuler cette instance. y comportement par défaut zAlt 2 yA chaque requête HTTP correspond une instance différente pour chacune des servlets. yPlus il y de requêtes demandant l'accès à une servlet, xplus il y a d'instances de cette servlet chargées en mémoire.  Servlet implements SingleThreadModel

Le cycle de vie d’une servlet

1.le chargement 2.le traitement des requêtes, zque l'on peut appeler exécution 3.la destruction

Le cycle de vie d’une servlet zLe chargement yCharger la classe, créer l’instance, l’initialiser yQuand ? xau démarrage du moteur de Servlets xjuste au moment où le moteur détermine qu'il a besoin de la Servlet yCombien d’instances d’une servlet peuvent exister en mémoire ? xCela dépend du modèle choisi xPlusieurs instances d'une même Servlet peuvent également être créées si plusieurs Servlets identiques possèdent des paramètres d'initialisation différents.

L’initialisation zLes paramètres d’initialisation peuvent être précisées par yun outil de configuration pour certains moteurs de servlets (comme Java Web Server), yune balise spéciale lorsque l'on utilise SSI (voir ssi, plus tard) yun programme.  init(ServletConfig config) yServletContext accessible via config décrit l'environnement d'exécution dans lequel tourne la Servlet zSi on redéfinit la méthode init yImpérativement faire super.init(config);

L’exécution zGenericServlet yservice(ServletRequest, ServletResponse) zHTTPServlet yLe moteur de servlet analyse la requête et invoque la méthode appropriée zErreurs yl'interface ServletContext possède les méthodes xlog(String message) écrit le message dans le journal du serveur xlog(Exception e, String message) ajoute à ce message la trace de la pile (le résultat de e.printStackTrace()).

La destruction zle moteur de servlets peut décider s'il doit conserver ou non l'instance (ou les instances) de la Servlet au sein de la machine virtuelle. xexemple quand le serveur doit libérer de l'espace mémoire zL'instance d'une Servlet peut être détruite quelques millisecondes après sa création ou après l'arrêt du moteur de Servlets. zRien ne peut contraindre le moteur de Servlets à ne pas détruire l'instance d'une Servlet. zInvocation de la méthode destroy() yConditon:, tous les threads qui ont été créés au sein de la méthode service de la Servlet doivent xsoit être terminés, xsoit dépasser un temps défini par le moteur de Servlets yLibérer les ressources ySauvegarder les données persistentes.

Le contexte d’une servlet  ServletContext contexte = config.getServletContext(); zaccéder à chacune des ressources de l'application web yservlets  Accès aux instances de servlets via getServlet xAccès aux valeurs des attributs setAttribute, getAttribute, getAttributeNames, removeAttribute yJSP yclasses utilitaires ydocuments statiques (pages html, images, sons, etc.)  Accès via getRessource ou getRessourceAsStream ybeans, applications clients yméta informations décrivant la structure de l'application xParamètres d’initialisation getInitParameter et getInitParameterNames

ServletContext

Exemple : librairie

Partager de l’information zPartager des objets qui sont des attributs d’un objet à portée publique y4 types d’objet à portée publique xContexte Web xSession xRequête xPage JSP zUtiliser une base de données zInvoquer d’autres ressources web

Configuration d’un servlet zLes informations données par le fichier de configuration sont : 1.les paramètres d'initialisation du contexte. 2.la configuration de la session. 3.les définitions des servlets et des JSPs. 4.les correspondances entre servlets et entre JSPs. 5.les correspondances entre types MIME. 6.la liste des fichiers de bienvenue. 7.les pages d'erreur. 8.la sécurité.

Handling Servlet Life-Cycle Events zOn peut superviser et réagir aux événements du cycle de vie des servlets yen définissant des objets listeners dont les méthodes sont invoquées lorsque l’événement survient yDans le fichier de configuration

z.z.

Spécifier le listener du ServletContext zDans le fichier web.xml

Spécifier le traitement des erreurs : Dans le fichier web.xml

Contrôler les accès concurrents à une ressource partagée zRessources partagées yAttributs des objets à portée publique yDonnées en mémoire xVariables d’instance, variable de classe… yObjets externes xFichier, conexions aux bases de données, connexions réseau… zDans l’exemple, 5 attributs partagés par plus d’une servlet ybookDB, cart, currency, hitCounter, orderCounter

Attributs partagées hitCounter, orderCounter

Accès aux bases de données zLes données qui sont partagées entre les composants web et qui sont persistentes entre les invocations d’une application web sont ahabituellement placées dans une base de données zJava Persistence API pour accéder aux bases de données relationnelles

Exemple zTraitement d’une commande d’achat yUne seule transaction xEncapsule achat de tous les livres qui invoque l’achat d’un livre

Initialisation d’une servlet zBookStoreServlet, CatalogServlet, BookDetailsServlet, ShowCartServlet

Les requêtes HTTP

Requête HTTP zGET : afin de demander au serveur de nous transmettre un flux d'information. Cela peut être un fichier statique ou des informations créées dynamiquement zPOST : même utilité que GET mais les paramètres de la requête sont passés directement au serveur au lieu d'être concaténés à l'URL qui identifie la ressource à laquelle on désire accéder. zHEAD : afin de s'informer sur l'en-tête renvoyée par le serveur lors d'une requête donnée. zOPTIONS : permet de connaître les services disponibles sur un serveur. zPUT : permet de déposer un fichier dans l'arborescence du système de fichier localisé sur la machine faisant tourner le serveur Web. zDELETE : permet de supprimer un fichier de l'arborescence du système de fichier localisé sur la machine faisant tourner le serveur Web. zTRACE : permet de "pister" une requête afin de voir ce que voit le serveur.

Traitement des requêtes zExtraire les informations de la requête zAccéder à des ressources externes zConstruire la réponse

Obtenir les informations de la requête  Interface ServletRequest zParamètres y transmettre de l’information entre le client et le servlet  request.getParameter(« bookId"); zAttributs contenant des objets yPour transférer de l’information xentre le conteneur du servlet et le servlet x entre des servlets qui collaborent yrequest.getAttribute (String name) yrequest.setAttribute (String name, Object value) yrequest.getAttributeNames () yrequest.removeAttribute (String name) zInformations ysur le protocole utilisé pour communiquer la requête ySur le client et le serveurs impliqués dans la requête zInformations reliées à la localisation  request.getLocales()

Obtenir l’information des requêtes zDans la page web Add To Cart.  Dans CatalogServlet String bookId = request.getParameter(« bookId"); if (bookId != null) { Book book = bookDB.getBook(bookId);

Obtenir l’information des requêtes zAlternative yRécupérer le flot d’entrée de la requête et analyser manuellement les données y pour lire les caractères  Utiliser l’objet BufferedReader rendu par la méthode getReader() de la requête yPour lire les données binaires,  utiliser le flot d’entrée ServletInputStream rendu par la méthode getInputStream().

Construire les réponses I  Interface ServletResponse zObtenir le flot de sorties de la réponse yTransmettre des caractères xPrintWriter rendu par la méthode getWriter de la réponsePrintWriter y transmettre des données binaires dans la partie MIME de la réponse, x ServletOutputStream rendu par la méthode getOutputStream de la réponse.ServletOutputStream yPour mélanger le texte et les données binaires, xUtiliser le flot de sortie ServletOutputStream et gérer les sections textuelle manuellement zRemplir les en-têtes ysetContentType(String) xExemple text/html xInternet Assigned Numbers Authority (IANA) x

Construire les réponses II zÉcrire le corps du contenu  Indiquer la taille du tampon de sortie setBufferSize(int) yPar défaut le contenu est transmis immédiatement zSpécifier les informations de localisation yLocale et caractère d’encodage zVoir BookDetailsServlet génère une page HTML qui affiche l’information sur un livre, information obtenue de la BD.

Construire les réponses III zParmi les objets contenus dans une réponse HTTP response objects, yStatus codes, xLa raison pour laquelle une requête n’est pas satisfaite xLa raison pour laquelle une requête a été redirigée yCookies, xPour emmagasiner de l’information spécifique à l’application chez le client xPar exemple, un identifiant qui permet de suivre la session d’un usager.

Filtrer les requêtes et les réponses zUn filtre y un objet qui peut transformer l’en-tête et le contenu d’une requête et/ou d’une réponse yDifférent d’un composant web dans le sens où il ne crée pas de réponses yPeut être attaché à n’importe quel ressources web zTâches d’un filtre yVérifier la requête et agir en conséquence yBloquer une paire requêtre-réponse yModifier les en-têtes et les données d’une requête yModifier les en-têtes et les données d’une réponse yInteragir avec des ressources externes

Utilisation des filtres zauthentification, logging, conversion d’images, compression de données, encryption, transformations XML, etc. zOn peut configurer un composant web pour être filtrer par plusieurs filtres dans un ordre spécifique ySpécifié au déploiement de l’application webcontenant le composant yInstancié lorsque le conteneur web charge le composant web

Programmer un filtre zExaminer l’en-tête de la requête zModifier la requête s’il y a lieu zModifier la réponse s’il y a lieu zInvoquer la prochaine entité dans la chaîne des filtres  Invoquer la méthode doFilter sur la chaîne des filtres ySi le filtre décide de bloquer la requête, le filtre est responsable de fournir une réponse  Examiner l’en-tête de la réponse après avoir invoqué doFilter zDéclencher une exception s’il y a lieu

L’interface Filtre

Ajuster sur mesure des requêtes et des réponses zSi le servlet veut modifier la réponse, il doit s’assurer que la réponse ne peut être transmise au client sans être passée par lui sur le chemin du retour yPasser un flot d’entrée au servlet sans lui transmettre le flot réel de la réponse xCréer un wrapper qui va surcharger les méthodes getWriter et/ou getOutputStream pour rendre à la place le flot d’entrée défini par le filtre xCe wrapper est transmis à la méthode doFilter

Ajuster sur mesure des requêtes et des réponses

Spécification des chaînes de filtres zLa chaîne est formée indirectement par le biais des mappings de filtres zL’ordre des filtres est le même que celui utilisé dans le fichier de déploiement (web.xml)

Spécifier les mappings des filtres zDans le fichier web-xml zToute combinaison des types de dispatcher yREQUEST: Only when the request comes directly from the client yFORWARD: Only when the request has been forwarded to a component yINCLUDE: Only when the request is being processed by a component that has been included yERROR: Only when the request is being processed with the error page mechanism

Invoquer d’autres ressources web zIndirectement yPar le biais de l’ajout d’un URL qui pointe sur une autre composant web dans le contenu rendu à un client xShowCartServlet invoque indirectement CatalogServlet

Invoquer d’autres ressources web zDirectement yLe composant peut inclure le contenu d’une autre ressource dans la réponse yLe composant peut acheminer la requête à une autre ressource yIl faut invoquer un dispatcher xgetRequestDispatcher("URL") Sur la requête Sur le contexte web

Inclure le contenu d’une autre ressource dans la réponse zaRequestDisptacher.include(request, response); yLe composant xPeut écrire dans le corps de la réponse et faire un « commit » de la réponse xNe peut PAS modifier l’en-tête d’aucune façon

zDans les servlets qui veulent utiliser la bannière

Transférer le contrôle à un autre composant web zDonner la responsabilité à une autre ressource de générer la réponse zSi on a déjà accéder aux objets ServletOutputStream ou PrintWriter object zOn ne peut pas utiliser forward zUne exception IllegalStateException sera déclenchée

Accéder au contexte web zContexte web yParamètres d’initialisation yRessources associées aux contexte web yLes attributs dont la valeur sont des objets yDes capacités de log  Les filtres HitCounterFilter et OrderFilter sont utilisés pour emmagsainer les compteurs en tant qu’attribut du contexte

Gérer les sessions zClasse HttpSession zAssocier des objets à une session yAttributs nommés associés à une session yCes attributs sont accessibles par tout composant web qui xappartient au même contexte web xET manipule une requête qui fait partie de la même session

Exemple shopping cart

Notifier les objets associés à une session zQuand un objet est ajouté ou supprimé d’unne session  implémenter l’interface HttpSessionBindingListener. zQuand la session à laquelle un objet est associée est passivée ou activée parce qu’elle change de JVM ou qu’elle est sauvegardée ou récupérée du stockage permanent  Implémenter l’interface HttpSessionActivationListener

Gestion des sessions zPour indiquer quand une session doit être fermée yDans le fichier web.xml xSession Timeout valeur entière (minutes d’inactivité) yLa méthode invalidate

Suivre une session zCookie zInclure un identifiant dans chaque URL transmise au client

Finalisation d’un servlet zSavoir combien de threads traite des requêtes yInvocation de la méthode service zFaire un shut-down clean en informant les threads longs que le système va se fermer zLes méthodes longues doivent vérifier que le système n’est pas en train de fermer yEt faire le nécessaire si c’est les cas

Suivre les traitements de requête

Prévenir les méthoddes que l’on va s’arrêter zLa méthode destroy ne devrait pas relâcher les ressources avant que toutes les requêtes soient traitées

Écrire des méthodes longues qui sont capables de s’arrêter