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

Composants web (web tiers)

Présentations similaires


Présentation au sujet: "Composants web (web tiers)"— Transcription de la présentation:

1 Composants web (web tiers)

2 Plan (1/3) Composants web (web tiers) Composants web (web tiers) Les rôles du serveur web Les rôles du serveur web Technologies utilisées sur le serveur web Technologies utilisées sur le serveur web Technologies web spécifiques à J2EE Technologies web spécifiques à J2EE Le conteneur web Le conteneur web Servlets Java Servlets Java JavaServer Pages (JSP) JavaServer Pages (JSP) Syntaxe XML pour les JSP Syntaxe XML pour les JSP Balises personnalisées Balises personnalisées Bibliothèques de balises standard (standard tag libraries) Bibliothèques de balises standard (standard tag libraries) Java Standard Tag Library (JSTL) Java Standard Tag Library (JSTL)

3 Plan (2/3) Règles de conception des composants web Règles de conception des composants web Quand utiliser des servlets ? Quand utiliser des servlets ? Utilisation de servlets comme contrôleurs Utilisation de servlets comme contrôleurs Exemple de Servlet contrôleur Exemple de Servlet contrôleur Utiliser des servlets pour générer du contenu binaire Utiliser des servlets pour générer du contenu binaire Exemple de servlet génératrice de contenu binaire Exemple de servlet génératrice de contenu binaire Eviter les servlets qui génèrent du texte statique Eviter les servlets qui génèrent du texte statique Exemple de Servlet utilisée à mauvais escient pour générer du texte Exemple de Servlet utilisée à mauvais escient pour générer du texte Utiliser les redirections et inclusions à bon escient Utiliser les redirections et inclusions à bon escient

4 Plan (3/3) Où utiliser les JSP ? Où utiliser les JSP ? Utiliser les JSP pour la présentation des données Utiliser les JSP pour la présentation des données Utiliser les JSP pour générer du XML Utiliser les JSP pour générer du XML Utiliser les JSP pour générer du texte non-structuré Utiliser les JSP pour générer du texte non-structuré Utiliser les JSP comme modèles (templates) Utiliser les JSP comme modèles (templates) Encodage des pages JSP Encodage des pages JSP Eviter d'utiliser trop de balises logiques Eviter d'utiliser trop de balises logiques Utiliser les directives d'inclusion et les balises d'inclusion JSP à bon escient Utiliser les directives d'inclusion et les balises d'inclusion JSP à bon escient Exemple Exemple Utiliser des balises personnalisées pour éviter les éléments de script Utiliser des balises personnalisées pour éviter les éléments de script Mauvais exemple de JSP se comportant comme un contrôleur Mauvais exemple de JSP se comportant comme un contrôleur Résumé Résumé

5 Composants web (web tiers) Le serveur web dune application J2EE (web tiers) rend disponible la logique d'une application sur le web. Le serveur web dune application J2EE (web tiers) rend disponible la logique d'une application sur le web. Cest le serveur web qui gère la communication avec les clients web et qui répond à leurs requêtes. Cest le serveur web qui gère la communication avec les clients web et qui répond à leurs requêtes. Cette section décrit les technologies utilisées sur le serveur web dans le cadre dune application J2EE. Cette section décrit les technologies utilisées sur le serveur web dans le cadre dune application J2EE.

6 Les rôles du serveur web (1/2) Un serveur web traite des requêtes http. Dans le cadre dune application J2EE le serveur web (web tiers) gère les relations entre les clients web et lapplication. Un serveur web traite des requêtes http. Dans le cadre dune application J2EE le serveur web (web tiers) gère les relations entre les clients web et lapplication. Le serveur web produit typiquement du contenu HTML ou XML, bien quil puisse générer dautres types de contenu. Le serveur web produit typiquement du contenu HTML ou XML, bien quil puisse générer dautres types de contenu. Larchitecture J2EE préconise dimplémenter la logique métier dans le serveur dEJB mais il est possible dimplémenter la logique métier directement sur le serveur web. Larchitecture J2EE préconise dimplémenter la logique métier dans le serveur dEJB mais il est possible dimplémenter la logique métier directement sur le serveur web.

7 Les rôles du serveur web (2/2) Le serveur web assure les fonctions suivantes dans une application J2EE : Le serveur web assure les fonctions suivantes dans une application J2EE : mise à disposition de la logique métier sur le web: le serveur web gère les relations entre les clients web et la logique métier de lapplication mise à disposition de la logique métier sur le web: le serveur web gère les relations entre les clients web et la logique métier de lapplication création dynamique de contenu: le serveur web génère dynamiquement du contenu, dans nimporte quel type de format: HTML, images, sons, video,… création dynamique de contenu: le serveur web génère dynamiquement du contenu, dans nimporte quel type de format: HTML, images, sons, video,… présentation et collecte des données: le serveur web transforme les requêtes HTTP PUT et GET dans une forme compréhensible par la couche métier de lapplication et présente les résultats présentation et collecte des données: le serveur web transforme les requêtes HTTP PUT et GET dans une forme compréhensible par la couche métier de lapplication et présente les résultats contrôle du flux de navigation: la logique implantée dans le serveur web détermine quel écran de lapplication envoyer au client. En effet cest souvent le serveur web qui adapte la présentation et lenchaînement des écrans en fonction des capacités du client contrôle du flux de navigation: la logique implantée dans le serveur web détermine quel écran de lapplication envoyer au client. En effet cest souvent le serveur web qui adapte la présentation et lenchaînement des écrans en fonction des capacités du client maintien des informations détat: le serveur web dispose dun mécanisme simple et flexible pour conserver des informations durant toute la durée dune session utilisateur maintien des informations détat: le serveur web dispose dun mécanisme simple et flexible pour conserver des informations durant toute la durée dune session utilisateur support de plusieurs clients: par le biais des types MIME un serveur web peut envoyer de linformation vers nimporte quel type de client et étendre les capacités de publication support de plusieurs clients: par le biais des types MIME un serveur web peut envoyer de linformation vers nimporte quel type de client et étendre les capacités de publication implémentation de la logique métier implémentation de la logique métier

8 Technologies utilisées sur le serveur web Technologies traditionnelles comme CGI : la génération de contenu dynamique sur le web a dabord utilisé la technologie Common Gateway Interface (CGI). Technologies traditionnelles comme CGI : la génération de contenu dynamique sur le web a dabord utilisé la technologie Common Gateway Interface (CGI). Cette technologie permet de déclencher des programmes lors de requêtes HTTP, le résultat du programme étant alors renvoyé comme réponse. Cette technologie permet de déclencher des programmes lors de requêtes HTTP, le résultat du programme étant alors renvoyé comme réponse. Linconvénient de cette technologie est quà chaque appel du CGI, le programme externe doit être rechargé ce qui représente une perte de temps non-négligeable. Linconvénient de cette technologie est quà chaque appel du CGI, le programme externe doit être rechargé ce qui représente une perte de temps non-négligeable. Les limitations des CGIs ont ensuite été palliées en utilisant des extensions propres à chaque serveur web. Les limitations des CGIs ont ensuite été palliées en utilisant des extensions propres à chaque serveur web. On parle de NSAPI (pour les serveurs Netscape), de modules dextension pour le serveur Apache Apache), et dISAPI (pour Microsoft Internet Information Server). On parle de NSAPI (pour les serveurs Netscape), de modules dextension pour le serveur Apache Apache), et dISAPI (pour Microsoft Internet Information Server). Linconvénient de ces techniques est quelles sont spécifiques à chaque serveur et donc non-portables. Linconvénient de ces techniques est quelles sont spécifiques à chaque serveur et donc non-portables.

9 Technologies web spécifiques à J2EE (1/2) Les technologies web utilisées sur un serveur J2EE sont portables, sécurisées et standardisées. Les technologies web utilisées sur un serveur J2EE sont portables, sécurisées et standardisées. Une application web est un assemblage de composants de serveurs web, de contenu et dinformations de configuration. Une application web est un assemblage de composants de serveurs web, de contenu et dinformations de configuration. Lenvironnement dexécution dune application web est appelé le conteneur web (web container). Lenvironnement dexécution dune application web est appelé le conteneur web (web container). Tous les fichiers dune application web sont contenus un fichier Web Application Archive (WAR) qui contient également un fichier de description de dépliement rédigé en XML. Tous les fichiers dune application web sont contenus un fichier Web Application Archive (WAR) qui contient également un fichier de description de dépliement rédigé en XML. Les spécifications de la plate-forme J2EE définissent un contrat entre le conteneur web et les composants web, qui définit le cycle de vie des composants, les comportements que le composant implémente et les services que le serveur rend aux composants. Les spécifications de la plate-forme J2EE définissent un contrat entre le conteneur web et les composants web, qui définit le cycle de vie des composants, les comportements que le composant implémente et les services que le serveur rend aux composants.

10 Technologies web spécifiques à J2EE (2/2) Les spécifications J2EE définissent 2 types de composants web : Les spécifications J2EE définissent 2 types de composants web : les Servlets Java (servlets) les Servlets Java (servlets) et les JavaServer Pages (pages JSP) et les JavaServer Pages (pages JSP) Une servlet est une classe Java qui étend un serveur J2EE, produisant du contenu dynamique en réponse aux requêtes du serveur. Une servlet est une classe Java qui étend un serveur J2EE, produisant du contenu dynamique en réponse aux requêtes du serveur. Le serveur transmet les requêtes de services à la servlet via linterface standard javax.servlet, que chaque servlet doit implémenter. Le serveur transmet les requêtes de services à la servlet via linterface standard javax.servlet, que chaque servlet doit implémenter. Une page JSP est une page HTML qui comporte des balises spéciales qui produisent du contenu dynamique personnalisé en fonction de la requête. Une page JSP est une page HTML qui comporte des balises spéciales qui produisent du contenu dynamique personnalisé en fonction de la requête. Les pages JSP sont habituellement transformées en servlets lors du déploiement. Les pages JSP sont habituellement transformées en servlets lors du déploiement. La technologie JSP permet davoir une approche centrée sur le document (document centric) plutôt que sur la programmation lors de la conception dune application. La technologie JSP permet davoir une approche centrée sur le document (document centric) plutôt que sur la programmation lors de la conception dune application.

11 Le conteneur web Une application J2EE est exécutée à lintérieur dun conteneur web. Une application J2EE est exécutée à lintérieur dun conteneur web. Le conteneur web gère le cycle de vie des composants web et distribue les requêtes aux composants. Le conteneur web gère le cycle de vie des composants web et distribue les requêtes aux composants. Il fournit aussi des interfaces standards pour accéder au contexte, notamment aux informations de session et aux informations sur la requête courante. Il fournit aussi des interfaces standards pour accéder au contexte, notamment aux informations de session et aux informations sur la requête courante. Le conteneur web fournit une interface consistante aux composants, indépendamment du serveur web, cest ce qui permet de porter et déployer un composant sur différents serveurs web Java sans modification du code. Le conteneur web fournit une interface consistante aux composants, indépendamment du serveur web, cest ce qui permet de porter et déployer un composant sur différents serveurs web Java sans modification du code.

12 Servlets Java (1/2) Les servlets Java sont des classes qui étendent les serveurs web compatibles J2EE. Les servlets Java sont des classes qui étendent les serveurs web compatibles J2EE. Une servlet produit du contenu dynamique en réponse aux requêtes portant sur une ou plusieurs URLs. Une servlet produit du contenu dynamique en réponse aux requêtes portant sur une ou plusieurs URLs. Les servlets sont des classes Java compilées portables tant au niveau du code source (car elles respectent les spécifications sur les Servlets Java) quau niveau binaire (car elles sont compilées en byte-code Java, par définition portable dune plate-forme à lautre sans modification). Les servlets sont des classes Java compilées portables tant au niveau du code source (car elles respectent les spécifications sur les Servlets Java) quau niveau binaire (car elles sont compilées en byte-code Java, par définition portable dune plate-forme à lautre sans modification). En plus de produire du contenu dynamiquement, les servlets supportent plusieurs fonctionnalités applicatives. En plus de produire du contenu dynamiquement, les servlets supportent plusieurs fonctionnalités applicatives.

13 Servlets Java (2/2) On peut ainsi déclencher des servlets en fonction dévènements, en implémentant linterface listener, ou déclencher un ou plusieurs servlets filters, des classes chargées de pré- ou post- traiter la requête ou la réponse dune servlet lors de lappel à sa méthode service. On peut ainsi déclencher des servlets en fonction dévènements, en implémentant linterface listener, ou déclencher un ou plusieurs servlets filters, des classes chargées de pré- ou post- traiter la requête ou la réponse dune servlet lors de lappel à sa méthode service. Les servlets peuvent aussi être distribuables, le serveur web peut alors supporter des mécanismes déquilibrage de charge et transmettre les informations de sessions entre les différents nœuds dun cluster ; pour cela les servlets doivent être marquées comme distributable dans le descripteur de déploiement de lapplication web et respecter des contraintes propres aux servlets distribuables. Les servlets peuvent aussi être distribuables, le serveur web peut alors supporter des mécanismes déquilibrage de charge et transmettre les informations de sessions entre les différents nœuds dun cluster ; pour cela les servlets doivent être marquées comme distributable dans le descripteur de déploiement de lapplication web et respecter des contraintes propres aux servlets distribuables. Ces contraintes assurent que le code de la servlet continue à fonctionner correctement lors du déplacement dun nœud de cluster à lautre. Ces contraintes assurent que le code de la servlet continue à fonctionner correctement lors du déplacement dun nœud de cluster à lautre.

14 JavaServer Pages (JSP) (1/2) Les JSP sont la technologie la plus appropriée pour les applications web qui produisent des pages HTML dynamiquement en modifiant uniquement les champs de données et pas la structure de base de la page. Les JSP sont la technologie la plus appropriée pour les applications web qui produisent des pages HTML dynamiquement en modifiant uniquement les champs de données et pas la structure de base de la page. Une page JSP contient un modèle de document statique et des balises spécifiques pour inclure du texte ou exécuter une partie de la logique applicative. Une page JSP contient un modèle de document statique et des balises spécifiques pour inclure du texte ou exécuter une partie de la logique applicative. Le contenu statique est servi comme du HTML normal. Le contenu statique est servi comme du HTML normal. Les balises JSP sont de 3 types: Les balises JSP sont de 3 types: des directives: ce sont des instructions qui contrôlent le comportement du compilateur de pages JSP, et qui sont donc évaluées avant la compilation, des directives: ce sont des instructions qui contrôlent le comportement du compilateur de pages JSP, et qui sont donc évaluées avant la compilation, des éléments de scripts: ce sont des blocs dinstructions Java inclus dans la page JSP entre des délimiteurs. des éléments de scripts: ce sont des blocs dinstructions Java inclus dans la page JSP entre des délimiteurs. des balises personnalisées (custom tags ou custom actions): elles sont définies par le programmeur et génèrent du contenu dynamique lorsque la page est demandée. des balises personnalisées (custom tags ou custom actions): elles sont définies par le programmeur et génèrent du contenu dynamique lorsque la page est demandée.

15 JavaServer Pages (JSP) (2/2) Les spécifications JSP définissent un jeu de balises standards implémentées par toutes les implémentations de serveurs web Java. Les spécifications JSP définissent un jeu de balises standards implémentées par toutes les implémentations de serveurs web Java. Les balises personnalisées et les éléments de script génèrent du contenu dynamique inclus dans la page lorsquelle est demandée. Les balises personnalisées et les éléments de script génèrent du contenu dynamique inclus dans la page lorsquelle est demandée. Les pages JSP peuvent générer nimporte quel type de contenu textuel,mais sont à lorigine prévues pour générer du contenu structuré tel que du HTML, XML, XHTML,…. Les pages JSP peuvent générer nimporte quel type de contenu textuel,mais sont à lorigine prévues pour générer du contenu structuré tel que du HTML, XML, XHTML,…. Les pages JSP sont plus faciles à écrire que les servlets car elles ressemblent à des documents structurés classiques et sont manipulable dans des environnements dédition web classiques (Macromedia Dreamweaver MX par exemple). Les pages JSP sont plus faciles à écrire que les servlets car elles ressemblent à des documents structurés classiques et sont manipulable dans des environnements dédition web classiques (Macromedia Dreamweaver MX par exemple). En général les pages JSP sont compilées en servlets lors du déploiement. En général les pages JSP sont compilées en servlets lors du déploiement.

16 Syntaxe XML pour les JSP Les spécifications JSP définissent une syntaxe XML alternative pour les pages JSP. Les pages en syntaxe JSP standard ne sont en effet pas conformes à XML. Les spécifications JSP définissent une syntaxe XML alternative pour les pages JSP. Les pages en syntaxe JSP standard ne sont en effet pas conformes à XML. Les pages JSP écrites en syntaxe XML peuvent être validées avec un schéma XML pour vérifier les erreurs les plus fréquentes. Les pages JSP écrites en syntaxe XML peuvent être validées avec un schéma XML pour vérifier les erreurs les plus fréquentes. Ce type de syntaxe peut aussi faciliter l'intégration avec les outils de développement. Ce type de syntaxe peut aussi faciliter l'intégration avec les outils de développement. Un fichier JSP ne peut pas mélanger les 2 types de syntaxe. Un fichier JSP ne peut pas mélanger les 2 types de syntaxe. Ecrire les pages JSP en XML n'est pas la même chose que de générer du XML à partir de pages JSP. Ecrire les pages JSP en XML n'est pas la même chose que de générer du XML à partir de pages JSP. La syntaxe XML pour JSP n'est qu'une manière différente d'écrire une page JSP, le contenu généré par une page JSP en XML est en tout point identique à celui d'une page JSP traditionnelle équivalente. La syntaxe XML pour JSP n'est qu'une manière différente d'écrire une page JSP, le contenu généré par une page JSP en XML est en tout point identique à celui d'une page JSP traditionnelle équivalente.

17 Balises personnalisées (1/2) La technologie JSP permet au programmeur de définir leurs propres bibliothèques de balises, ce type de balises est remplacé par du contenu dynamique lorsque la page est envoyée au client. La technologie JSP permet au programmeur de définir leurs propres bibliothèques de balises, ce type de balises est remplacé par du contenu dynamique lorsque la page est envoyée au client. Le contenu dynamique est crée par un gestionnaire de balises, que le programmeur crée et distribue dans un fichier archive de bibliothèque de balises. Le contenu dynamique est crée par un gestionnaire de balises, que le programmeur crée et distribue dans un fichier archive de bibliothèque de balises. Le programmeur définit la syntaxe pour chaque balises et implémente le comportement à effectuer pour chaque balise dans la classe de gestion des balises (tag handler class). Le programmeur définit la syntaxe pour chaque balises et implémente le comportement à effectuer pour chaque balise dans la classe de gestion des balises (tag handler class). Les auteurs de pages peuvent ensuite importer et utiliser les balises définies dans les bibliothèques de balises comme s'ils utilisaient des balises traditionnelles. Les auteurs de pages peuvent ensuite importer et utiliser les balises définies dans les bibliothèques de balises comme s'ils utilisaient des balises traditionnelles.

18 Balises personnalisées (2/2) Les balises personnalisées procurent plusieurs avantages dans la conception d'une application J2EE : Les balises personnalisées procurent plusieurs avantages dans la conception d'une application J2EE : les balises personnalisées sont réutilisables alors que les éléments de script ne le sont pas en général les balises personnalisées sont réutilisables alors que les éléments de script ne le sont pas en général les bibliothèques de balises personnalisées permettent de définir des services de haut niveau portables entre conteneur de JSP les bibliothèques de balises personnalisées permettent de définir des services de haut niveau portables entre conteneur de JSP les balises personnalisées facilitent la maintenance d'une application, en évitant de répéter du code de pages en pages. Il suffit de modifier en un endroit le comportement d'une balise pour que toutes les pages contenant la balise soient modifiées les balises personnalisées facilitent la maintenance d'une application, en évitant de répéter du code de pages en pages. Il suffit de modifier en un endroit le comportement d'une balise pour que toutes les pages contenant la balise soient modifiées les balises personnalisées permettent aux développeurs de se focaliser sur leur métier de base. Les auteurs de page peuvent utiliser des balises standards et personnalisées plutôt que d'avoir à jongler avec des balises et des éléments de scripts qui leurs sont étrangers. les balises personnalisées permettent aux développeurs de se focaliser sur leur métier de base. Les auteurs de page peuvent utiliser des balises standards et personnalisées plutôt que d'avoir à jongler avec des balises et des éléments de scripts qui leurs sont étrangers. les balises personnalisées offrent aux auteurs de pages un moyen simple d'utiliser la logique métier dans leurs pages les balises personnalisées offrent aux auteurs de pages un moyen simple d'utiliser la logique métier dans leurs pages les balises personnalisées permettent une séparation plus claire entre présentation des données et logique métier, ce qui simplifie la maintenance, montre plus clairement l'utilité de chaque composant et permet aux programmeurs et auteurs de pages de travailler plus indépendamment. les balises personnalisées permettent une séparation plus claire entre présentation des données et logique métier, ce qui simplifie la maintenance, montre plus clairement l'utilité de chaque composant et permet aux programmeurs et auteurs de pages de travailler plus indépendamment.

19 Bibliothèques de balises standard (standard tag libraries) Les bibliothèques de balises standard sont des jeux de balises qui fournissent un jeu de fonctionnalités basiques pour les pages JSP. Les bibliothèques de balises standard sont des jeux de balises qui fournissent un jeu de fonctionnalités basiques pour les pages JSP. Les balises standards fournissent typiquement des fonctions de : Les balises standards fournissent typiquement des fonctions de : inclusion de ressources web, inclusion de ressources web, chaînage de requête (request forwarding), chaînage de requête (request forwarding), logique conditionnelle, logique conditionnelle, itérations sur des collections d'objets, itérations sur des collections d'objets, transformations XSLT, transformations XSLT, internationalisation, internationalisation, gestion des informations d'état, gestion des informations d'état, formulaires HTML. formulaires HTML. Certaines compagnies ont produit leurs propres bibliothèques de balises profondément intégrées dans leurs outils de développement et J2EE. Certaines compagnies ont produit leurs propres bibliothèques de balises profondément intégrées dans leurs outils de développement et J2EE. D'autres organisations produisent des bibliothèques de balises génériques pour les applications J2EE. C'est le cas par exemple de l'Apache Taglibs, qui est une bibliothèque Open source contenant des douzaines de balises personnalisées. D'autres organisations produisent des bibliothèques de balises génériques pour les applications J2EE. C'est le cas par exemple de l'Apache Taglibs, qui est une bibliothèque Open source contenant des douzaines de balises personnalisées.

20 Java Standard Tag Library (JSTL) La Java Standard Tag Library (JSTL) fait maintenant partie du Java Community Process (sous la référence JSR-52, A Standard Tag Library for JavaServer Pages). La Java Standard Tag Library (JSTL) fait maintenant partie du Java Community Process (sous la référence JSR-52, A Standard Tag Library for JavaServer Pages). Après sa standardisation, JSTL fournira une riche couche de fonctionnalités de haut niveau et portables pour tous les conteneurs web compatibles JSP. Après sa standardisation, JSTL fournira une riche couche de fonctionnalités de haut niveau et portables pour tous les conteneurs web compatibles JSP. Les librairies standard fournissent souvent la plupart des fonctionnalités requises pour le développement de pages JSP et sont testées et optimisées par la communauté des développeurs. Les librairies standard fournissent souvent la plupart des fonctionnalités requises pour le développement de pages JSP et sont testées et optimisées par la communauté des développeurs. Utiliser une librairie de balises standard de haute qualité permet ainsi de gagner un précieux temps en développement. Utiliser une librairie de balises standard de haute qualité permet ainsi de gagner un précieux temps en développement.

21 Règles de conception des composants web

22 Quand utiliser des servlets ? Les servlets sont la plupart du temps utilisées pour implémenter la logique de l'application et générer des données binaires. Les servlets sont la plupart du temps utilisées pour implémenter la logique de l'application et générer des données binaires. Utiliser les servlets pour implémenter des services : les servlets ne sont habituellement pas des composants visuels, à l'exception de certaines qui génèrent du contenu binaire. En fait les servlets sont surtout utilisées comme un service d'accès aux informations de l'application. Utiliser les servlets pour implémenter des services : les servlets ne sont habituellement pas des composants visuels, à l'exception de certaines qui génèrent du contenu binaire. En fait les servlets sont surtout utilisées comme un service d'accès aux informations de l'application. Une servlet peut ainsi rendre n'importe quel service (application de modèles, sécurité, personnalisation, contrôle de l'application) et ensuite choisir un composant de présentation (souvent une page JSP) pour lui transmettre la requête et s'occuper de sa présentation. Une servlet peut ainsi rendre n'importe quel service (application de modèles, sécurité, personnalisation, contrôle de l'application) et ensuite choisir un composant de présentation (souvent une page JSP) pour lui transmettre la requête et s'occuper de sa présentation. Comme une servlet peut être assimilée à un service, un filtre de servlet peut être assimilé à une extension ou une personnalisation du service fournit par la servlet. Comme une servlet peut être assimilée à un service, un filtre de servlet peut être assimilé à une extension ou une personnalisation du service fournit par la servlet.

23 Utilisation de servlets comme contrôleurs Les servlets sont la technologie de prédilection pour implémenter un contrôleur sur le tiers web, qui déterminera comment traiter une requête et choisira la prochaine vue à afficher. Les servlets sont la technologie de prédilection pour implémenter un contrôleur sur le tiers web, qui déterminera comment traiter une requête et choisira la prochaine vue à afficher. Un contrôleur active les opérations d'une application et prend des décisions, qui sont essentiellement des tâches procédurales bien adaptées à l'intégration dans le code d'une servlet. Un contrôleur active les opérations d'une application et prend des décisions, qui sont essentiellement des tâches procédurales bien adaptées à l'intégration dans le code d'une servlet. Les pages JSP ne doivent pas être utilisées comme contrôleur car si l'on mélange les balises et le code du programme, elles deviennent difficiles à lire et à maintenir, particulièrement pour les concepteurs web, qui ne sont pas des programmeurs. Les pages JSP ne doivent pas être utilisées comme contrôleur car si l'on mélange les balises et le code du programme, elles deviennent difficiles à lire et à maintenir, particulièrement pour les concepteurs web, qui ne sont pas des programmeurs.

24 Exemple de Servlet contrôleur public class extends HttpServlet { protected void doPost(HttpServletRequest req, HttpServletResponse res)throws...{ protected void doPost(HttpServletRequest req, HttpServletResponse res)throws...{ String creditCard = req.getParameter("creditCard"); String creditCard = req.getParameter("creditCard"); String jspPage ="/process"+creditCard +".jsp"; String jspPage ="/process"+creditCard +".jsp"; ServletContext sc =getServletContext(); ServletContext sc =getServletContext(); RequestDispatcher rd =getRequestDispatcher(jspPage); RequestDispatcher rd =getRequestDispatcher(jspPage); rd.forward(req,res); rd.forward(req,res); }}

25 Utiliser des servlets pour générer du contenu binaire Le contenu binaire doit être généré par des servlets. Le contenu binaire doit être généré par des servlets. Les servlets qui génèrent ce type de contenu doivent définir l'entête HTTP Content-Type pour préciser le type MIME du contenu généré. Les servlets qui génèrent ce type de contenu doivent définir l'entête HTTP Content-Type pour préciser le type MIME du contenu généré. Une servlet peut écrire soit sur un objet OutputStream soit sur un objet PrintWriter, mais pas les deux. Une JSP ne peut pas créer du contenu binaire. Une servlet peut écrire soit sur un objet OutputStream soit sur un objet PrintWriter, mais pas les deux. Une JSP ne peut pas créer du contenu binaire. Une servlet écrit ses données binaires dans un objet OutputStream récupéré à partir de l'objet ServletRequest, comme montré dams l'exemple de code suivant. Une servlet écrit ses données binaires dans un objet OutputStream récupéré à partir de l'objet ServletRequest, comme montré dams l'exemple de code suivant.

26 Exemple de servlet génératrice de contenu binaire public class JpgWriterServlet extends HttpServlet { public void service(HttpServletRequest req, HttpServletResponse rsp)throws...{ public void service(HttpServletRequest req, HttpServletResponse rsp)throws...{ rsp.setHeader("Content-type","image/jpg"); rsp.setHeader("Content-type","image/jpg"); OutputStream os =rsp.getOutputStream(); OutputStream os =rsp.getOutputStream(); //...now write binary data to the OutputStream... //...now write binary data to the OutputStream... }}

27 Eviter les servlets qui génèrent du texte statique Les servlets composées principalement d'instructions println sont de préférence implémentées sous forme de pages JSP. Les servlets composées principalement d'instructions println sont de préférence implémentées sous forme de pages JSP. Il faut utiliser des pages JSP pour créer du contenu textuel et le combiner avec un modèle et des valeurs obtenues dynamiquement. Il est en effet beaucoup plus aisé de maintenir une JSP qu'une servlet pour ce genre de tâches. Il faut utiliser des pages JSP pour créer du contenu textuel et le combiner avec un modèle et des valeurs obtenues dynamiquement. Il est en effet beaucoup plus aisé de maintenir une JSP qu'une servlet pour ce genre de tâches.

28 Exemple de Servlet utilisée à mauvais escient pour générer du texte public class PopulateServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res)throws...{ public void doGet(HttpServletRequest req, HttpServletResponse res)throws...{ if (dbConnectionClosed){ if (dbConnectionClosed){ PrintWriter out =response.getWriter(); PrintWriter out =response.getWriter(); out.println(" "); out.println(" "); out.println(" Can't connect "); out.println(" Can't connect "); out.println(" Confirm your database is running"); out.println(" Confirm your database is running"); out.println(" "); out.println(" "); }}

29 Exemple de Servlet utilisée à mauvais escient pour générer du texte La bonne technique est de détecter l'erreur dans la servlet et de rediriger la requête vers une page JSP si c'est le cas. La bonne technique est de détecter l'erreur dans la servlet et de rediriger la requête vers une page JSP si c'est le cas. Ce principe permet de maintenir une bonne séparation entre les fonctions et la présentation. Ce principe permet de maintenir une bonne séparation entre les fonctions et la présentation.PopulateServlet.java: public class PopulateServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse res)throws...{ protected void doGet(HttpServletRequest req, HttpServletResponse res)throws...{ if (dbConnectionClosed){ if (dbConnectionClosed){ ServletContext ctx =getServletContext(); ServletContext ctx =getServletContext(); ctx.getRequestDispatcher("/db_failed.jsp").forward(req,res); ctx.getRequestDispatcher("/db_failed.jsp").forward(req,res); }}db_failed.jsp: Unable to Connect Unable to Connect Confirm that your database is running Confirm that your database is running

30 Utiliser les redirections et inclusions à bon escient Une servlet peut utiliser deux méthodes de l'objet RequestDispatcher, forward et include, pour créer une réponse en faisant appel à d'autres composants. Une servlet peut utiliser deux méthodes de l'objet RequestDispatcher, forward et include, pour créer une réponse en faisant appel à d'autres composants. Ces deux méthodes sont conçues avec des intentions fondamentalement différentes : Ces deux méthodes sont conçues avec des intentions fondamentalement différentes : RequestDispatcher.forward() délégue totalement le traitement d'une requête à un autre composant. Dans ce cas il faut veiller à ce que le corps de la servlet soit vide sinon une exception est générée, RequestDispatcher.forward() délégue totalement le traitement d'une requête à un autre composant. Dans ce cas il faut veiller à ce que le corps de la servlet soit vide sinon une exception est générée, RequestDispatcher.include() construit une réponse contenant les résultats à partir de plusieurs ressources web RequestDispatcher.include() construit une réponse contenant les résultats à partir de plusieurs ressources web

31 Où utiliser les JSP ? Les pages JSP sont habituellement utilisées pour créer du contenu structuré ou des données textuelles non-structurées. Les pages JSP sont habituellement utilisées pour créer du contenu structuré ou des données textuelles non-structurées. Elles sont particulièrement adaptées lorsque la valeur des données change entre les requêtes mais que leur structuration ne change pas (ou peu). Elles sont particulièrement adaptées lorsque la valeur des données change entre les requêtes mais que leur structuration ne change pas (ou peu).

32 Utiliser les JSP pour la présentation des données Les pages JSP sont particulièrement appropriées pour produire du contenu structuré. Les pages JSP sont particulièrement appropriées pour produire du contenu structuré. Les vues pour visualiser les données d'une application d'entreprise sont traditionnellement en HTML, XHTML et DHTML. Les vues pour visualiser les données d'une application d'entreprise sont traditionnellement en HTML, XHTML et DHTML. Les pages JSP sont utilisées lorsque le contenu est partiellement statique, avec quelques éléments remplis dynamiquement à l'exécution. Une page JSP contient une partie fixe appelée "template data" (à ne pas confondre avec les mécanismes de modèles décrits par la suite). Les pages JSP sont utilisées lorsque le contenu est partiellement statique, avec quelques éléments remplis dynamiquement à l'exécution. Une page JSP contient une partie fixe appelée "template data" (à ne pas confondre avec les mécanismes de modèles décrits par la suite). Les balises personnalisées ou les éléments de script sont peuvent être placés à divers endroits des données statiques et sont substitués à l'exécution par du contenu dynamique. Les balises personnalisées ou les éléments de script sont peuvent être placés à divers endroits des données statiques et sont substitués à l'exécution par du contenu dynamique. Les pages JSP ne peuvent pas produire de contenu binaire et ne sont pas très adaptées à la production de contenu à grande variabilité ou à la direction de requêtes, on préférera utiliser des servlets dans ce cas. Les pages JSP ne peuvent pas produire de contenu binaire et ne sont pas très adaptées à la production de contenu à grande variabilité ou à la direction de requêtes, on préférera utiliser des servlets dans ce cas. Les pages JSP peuvent accéder facilement à la logique métier d'une application, en incluant des beans par exemple. Les pages JSP peuvent accéder facilement à la logique métier d'une application, en incluant des beans par exemple.

33 Utiliser les JSP pour générer du XML Les pages JSP sont une bonne technologie pour générer du XML avec une structure fixe. Les pages JSP sont une bonne technologie pour générer du XML avec une structure fixe. Elles sont particulièrement adaptées pour générer des messages XML dans des formats standards, où les balises sont fixes et où seules les valeurs d'attribut ou les données brutes varient entre les appels à la page. Elles sont particulièrement adaptées pour générer des messages XML dans des formats standards, où les balises sont fixes et où seules les valeurs d'attribut ou les données brutes varient entre les appels à la page. Les documents XML peuvent aussi être générés à partir de modèles, en agrégeant par exemple plusieurs documents XML pour constituer un seul document composite. Les documents XML peuvent aussi être générés à partir de modèles, en agrégeant par exemple plusieurs documents XML pour constituer un seul document composite.

34 Utiliser les JSP pour générer du texte non-structuré Il est tout à fait possible de générer du texte brut (ASCII, Postscript) à partir d'une JSP. Il est tout à fait possible de générer du texte brut (ASCII, Postscript) à partir d'une JSP. Par exemple une JSP peut générer les mails à envoyer aux clients d'une application. Par exemple une JSP peut générer les mails à envoyer aux clients d'une application.

35 Utiliser les JSP comme modèles (templates) Les JSP peuvent aussi être utilisées pour agréger du contenu provenant de plusieurs sources, comme cela est expliqué par la suite. Les JSP peuvent aussi être utilisées pour agréger du contenu provenant de plusieurs sources, comme cela est expliqué par la suite.

36 Encodage des pages JSP Les JSPs utilisent la classe javax.servlet.jsp.JSPWriter pour écrire le contenu sur le flux de sortie (la réponse envoyée au client). Les JSPs utilisent la classe javax.servlet.jsp.JSPWriter pour écrire le contenu sur le flux de sortie (la réponse envoyée au client). Cette classe s' assure que le contenu envoyé au client est correctement encodé, mais cela à un impact : l'encodage automatique du texte empêche de produire du contenu bianire à partir d'une JSP. Cette classe s' assure que le contenu envoyé au client est correctement encodé, mais cela à un impact : l'encodage automatique du texte empêche de produire du contenu bianire à partir d'une JSP.

37 Eviter d'utiliser trop de balises logiques Les bibliothèques de balises standard fournissent des balises dites logic tags qui permettent de faire des boucles, des itérations, d'évaluer des expressions et de prendre des décisions conditionnelles. Les bibliothèques de balises standard fournissent des balises dites logic tags qui permettent de faire des boucles, des itérations, d'évaluer des expressions et de prendre des décisions conditionnelles. Il faut éviter ce genre de balises qui finalement apportent peu de bénéfices car elles entraînent une séparation moins claire entre la présentation et la logique de l'application. Il faut éviter ce genre de balises qui finalement apportent peu de bénéfices car elles entraînent une séparation moins claire entre la présentation et la logique de l'application. A la place, il vaut mieux implémenter la logique dans une balise personnalisée qui fait appel à un entreprise beans. Ainsi une fine couche de code (le gestionnaire de balises ou tag handler) lie la balise personnalisée à un beans et utilise ses méthodes. Cette approche permet de lier la vue (page JSP ou servlet) à un accès direct au modèle de données (contenu dans le beans), permettant ainsi de conserver la logique et la présentation séparées. A la place, il vaut mieux implémenter la logique dans une balise personnalisée qui fait appel à un entreprise beans. Ainsi une fine couche de code (le gestionnaire de balises ou tag handler) lie la balise personnalisée à un beans et utilise ses méthodes. Cette approche permet de lier la vue (page JSP ou servlet) à un accès direct au modèle de données (contenu dans le beans), permettant ainsi de conserver la logique et la présentation séparées.

38 Utiliser les directives d'inclusion et les balises d'inclusion JSP à bon escient La directive include des JSP et la balise jsp:include ont la même syntaxe mais des buts différents. La directive include des JSP et la balise jsp:include ont la même syntaxe mais des buts différents. Une directive d'inclusion incluse le texte littéralement dans la page et ne permet pas de traiter du contenu dynamique. L'inclusion a lieu lorsque la page JSP est compilée. Une directive d'inclusion incluse le texte littéralement dans la page et ne permet pas de traiter du contenu dynamique. L'inclusion a lieu lorsque la page JSP est compilée. Par exemple l'instruction suivante inclut une page dans la JSP lors de la compilation : Par exemple l'instruction suivante inclut une page dans la JSP lors de la compilation : La balise JSP include inclut du contenu dynamique ou statique à chaque fois que la page est servie et permet donc d'inclure du contenu dynamique à l'exécution (à chaque fois que la page est servie). La balise JSP include inclut du contenu dynamique ou statique à chaque fois que la page est servie et permet donc d'inclure du contenu dynamique à l'exécution (à chaque fois que la page est servie).

39 Exemple La directive JSP d'inclusion sert plutôt pour réutiliser du contenu et rendre modulaire ses pages web, tout en réduisant leur taille. La directive JSP d'inclusion sert plutôt pour réutiliser du contenu et rendre modulaire ses pages web, tout en réduisant leur taille. Il faut prendre en compte que le fait que le fichier est inclus à la compilation et donc la servlet résultante est plus grosse qu'une servlet qui inclut les pages à l'exécution (mais cette dernière solution réclame plus de temps). Il faut prendre en compte que le fait que le fichier est inclus à la compilation et donc la servlet résultante est plus grosse qu'une servlet qui inclut les pages à l'exécution (mais cette dernière solution réclame plus de temps). A chaque fois qu'une page JSP est demandée dans le cas d'un inclusion par la balise JSP include, les pages liées ont recompilées. A chaque fois qu'une page JSP est demandée dans le cas d'un inclusion par la balise JSP include, les pages liées ont recompilées. De plus les composants utilisés (par exemple des JavaBeans ou d'autres objets fournis par le conteneur) doivent être re-déclarés dans chacune des pages inclues et partagés entre les pages via l'utilisation de l'objet HttpSession. De plus les composants utilisés (par exemple des JavaBeans ou d'autres objets fournis par le conteneur) doivent être re-déclarés dans chacune des pages inclues et partagés entre les pages via l'utilisation de l'objet HttpSession. Les directives d'inclusion peuvent être problématiques pour supporter l'internationalisation. Ainsi le header HTTP contentType:charset des pages inclues ne peut être assigné différemment dans les pages inclues et la page qui inclut. (le contentType de cette page l'emporte) Les directives d'inclusion peuvent être problématiques pour supporter l'internationalisation. Ainsi le header HTTP contentType:charset des pages inclues ne peut être assigné différemment dans les pages inclues et la page qui inclut. (le contentType de cette page l'emporte) Note d'implémentation: certains conteneurs web comme Tomcat ne prennent pas automatiquement en compte les modifications faites aux fichiers inclus par la directive include. Si vous changez un fichier inclus, il faut "toucher" (modifier la date de dernière modification) les documents parents qui incluent le fichier. Note d'implémentation: certains conteneurs web comme Tomcat ne prennent pas automatiquement en compte les modifications faites aux fichiers inclus par la directive include. Si vous changez un fichier inclus, il faut "toucher" (modifier la date de dernière modification) les documents parents qui incluent le fichier.

40 Utiliser des balises personnalisées pour éviter les éléments de script Il est préférable d'utiliser des balises personnalisées plutôt que des éléments de script (scriptlets) pour les raisons suivantes : Il est préférable d'utiliser des balises personnalisées plutôt que des éléments de script (scriptlets) pour les raisons suivantes : le code scriplet n'est pas réutilisable le code scriplet n'est pas réutilisable le code scriptlet mélange logique et présentation de l'application dans la même page le code scriptlet mélange logique et présentation de l'application dans la même page le code scriptlet ne permet pas de bien séparer les rôles entre les développeurs de pages web et de code Java Un concepteur web aura par exemple du mal à modifier du code Java pour lui appliquer une présentation : "+text);%> le code scriptlet ne permet pas de bien séparer les rôles entre les développeurs de pages web et de code Java Un concepteur web aura par exemple du mal à modifier du code Java pour lui appliquer une présentation : "+text);%> le code scriptlet est plus difficile à lire et à maintenir que des balises personnalisées le code scriptlet est plus difficile à lire et à maintenir que des balises personnalisées Les informations de débogage d'une scriptlet peuvent être difficiles à interpréter, en définissant du code associé à une balise personnalisée on peut localiser plus facilement l'erreur Les informations de débogage d'une scriptlet peuvent être difficiles à interpréter, en définissant du code associé à une balise personnalisée on peut localiser plus facilement l'erreur Le code de scriptlet est plus difficile à tester, avec des balises personnalisées, on dispose de composants personnalisés prêt à subir des tests unitaires Le code de scriptlet est plus difficile à tester, avec des balises personnalisées, on dispose de composants personnalisés prêt à subir des tests unitaires Éviter de rediriger des requêtes à partir de pages JSP Éviter de rediriger des requêtes à partir de pages JSP Quand une page JSP appelle RequestDispatcher.forward elle se comporte comme un contrôleur. Quand une page JSP appelle RequestDispatcher.forward elle se comporte comme un contrôleur. Les contrôleurs sont de préférence implémentés dans des servlets, pas dans des composants de présentation. Les contrôleurs sont de préférence implémentés dans des servlets, pas dans des composants de présentation.

41 Mauvais exemple de JSP se comportant comme un contrôleur <%String creditCard =request.getParameter("creditCard"); if (creditCard.equals("Visa")){%> <%}%>

42 Résumé (1/3) Le serveur web dune application J2EE rend disponible les applications sur le World Wide Web. Le serveur web dune application J2EE rend disponible les applications sur le World Wide Web. Les pages JSPs et les servlets sont des composants web qui succèdent aux anciennes technologies côté serveur telles que les CGIs et qui assurent une portabilité inégalée. Les pages JSPs et les servlets sont des composants web qui succèdent aux anciennes technologies côté serveur telles que les CGIs et qui assurent une portabilité inégalée. Le conteneur web fournit des services de haut niveau aux composants web en matière de transactions,accès aux données, gestion des états, sécurité et distribution. Le conteneur web fournit des services de haut niveau aux composants web en matière de transactions,accès aux données, gestion des états, sécurité et distribution. Lutilisation de bibliothèques de balises personnalisées améliore la qualité du code source et facilite la maintenance des applications. Lutilisation de bibliothèques de balises personnalisées améliore la qualité du code source et facilite la maintenance des applications. Le patron de conception Modèle-Vue-Contrôleur est recommandé pour la plupart des applications web interactives car il permet de créer des applications réutilisables, et dajouter de nouveaux types de clients, processus et vues facilement. Le patron de conception Modèle-Vue-Contrôleur est recommandé pour la plupart des applications web interactives car il permet de créer des applications réutilisables, et dajouter de nouveaux types de clients, processus et vues facilement.

43 Résumé (2/3) Le serveur web dune application est une couche de service neutre, habituellement conçu sur le modèle MVC, qui simplifie la création dapplications web interactives. Le serveur web dune application est une couche de service neutre, habituellement conçu sur le modèle MVC, qui simplifie la création dapplications web interactives. Le modèle de conception le plus simple a un seul contrôleur qui reçoit les requêtes des navigateurs, les distribue dans lapplication et affiche les résultats. Le modèle de conception le plus simple a un seul contrôleur qui reçoit les requêtes des navigateurs, les distribue dans lapplication et affiche les résultats. Il est possible dutiliser plusieurs contrôleurs web pour gérer nativement des clients web utilisant des protocoles différents. Il est possible dutiliser plusieurs contrôleurs web pour gérer nativement des clients web utilisant des protocoles différents. Un mécanisme de modèles (templates) permet daméliorer la mise en page des écrans de lapplication. Un mécanisme de modèles (templates) permet daméliorer la mise en page des écrans de lapplication. Le mécanisme de modèle permet dutiliser un fichier modèle pour assembler des vues individuelles en une vue composée sur lapplication. Le mécanisme de modèle permet dutiliser un fichier modèle pour assembler des vues individuelles en une vue composée sur lapplication. Les servlets sont principalement utilisées pour générer des données binaires et contrôler lapplication. Les servlets sont principalement utilisées pour générer des données binaires et contrôler lapplication. Les pages JSP sont principalement utilisées pour créer du contenu textuel et des références à des données externes. Les pages JSP sont principalement utilisées pour créer du contenu textuel et des références à des données externes. Les filtres de servlets peuvent être utilisés pour étendre les fonctionnalités dune servlet existante, dun JSP ou dun autre filtre de servlet. Les filtres de servlets peuvent être utilisés pour étendre les fonctionnalités dune servlet existante, dun JSP ou dun autre filtre de servlet.

44 Résumé (3/3) Les états dune application web ont 4 types de portées : portée application, portée session, portée requête et portée page. Les états dune application web ont 4 types de portées : portée application, portée session, portée requête et portée page. Les états de portée session ont le plus dimpact sur la charge engendrée par une application web car ils sont proportionnels au nombre dutilisateurs. Les états de portée session ont le plus dimpact sur la charge engendrée par une application web car ils sont proportionnels au nombre dutilisateurs. Il est recommandé dutiliser des beans de session avec états pour conserver les données de session. Il est recommandé dutiliser des beans de session avec états pour conserver les données de session. Les applications uniquement web peuvent stocker les informations de session dans les attributs de session HTTP. Les applications uniquement web peuvent stocker les informations de session dans les attributs de session HTTP. Certains produits J2EE permettent à une application dêtre distribuée pour augmenter sa disponibilité et sa scalabilité mais cette possibilité nest pas encore standardisée. Certains produits J2EE permettent à une application dêtre distribuée pour augmenter sa disponibilité et sa scalabilité mais cette possibilité nest pas encore standardisée. Les servlets, JSP et balises personnalisées dune application web distribuable doivent respecter des contraintes supplémentaires. Les servlets, JSP et balises personnalisées dune application web distribuable doivent respecter des contraintes supplémentaires.


Télécharger ppt "Composants web (web tiers)"

Présentations similaires


Annonces Google