La présentation est en train de télécharger. S'il vous plaît, attendez

La présentation est en train de télécharger. S'il vous plaît, attendez

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

Présentations similaires


Présentation au sujet: "J2EE : Java Enterprise Edition Servlets. Plan zContenu dynamique yServlets et alternatives zServlets yClasses de base yServlets et threads yCycle de vie."— Transcription de la présentation:

1 J2EE : Java Enterprise Edition Servlets

2 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

3 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

4 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

5 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

6 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

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

8 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.

9 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

10 Le cycle de vie d’une servlet

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

12 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.

13 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);

14 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()).

15 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.

16 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

17

18 ServletContext

19 Exemple : librairie

20 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

21

22

23 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é.

24 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

25 z.z.

26

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

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

29

30 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

31 Attributs partagées hitCounter, orderCounter

32 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

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

34

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

36 Les requêtes HTTP

37 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.

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

39 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()

40 Obtenir l’information des requêtes http://[host]:[port][request-path]?[query-string] zDans la page web Add To Cart.  Dans CatalogServlet String bookId = request.getParameter(« bookId"); if (bookId != null) { Book book = bookDB.getBook(bookId);

41 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().

42

43 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 http://www.iana.org/assignments/media-types/.http://www.iana.org/assignments/media-types/

44 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.

45 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.

46 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

47 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

48 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

49 L’interface Filtre

50

51 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

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

53

54 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)

55

56 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

57

58 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

59 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

60 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

61

62 zDans les servlets qui veulent utiliser la bannière

63 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

64 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

65

66 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

67 Exemple shopping cart

68 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

69 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

70

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

72

73 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

74 Suivre les traitements de requête

75

76 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

77

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


Télécharger ppt "J2EE : Java Enterprise Edition Servlets. Plan zContenu dynamique yServlets et alternatives zServlets yClasses de base yServlets et threads yCycle de vie."

Présentations similaires


Annonces Google