1  STIME/DT - Alain Paoli - 2000 Le Portails d’Entreprise.

Slides:



Advertisements
Présentations similaires
Le struts validator – framework de validation
Advertisements

Transformation de documents XML
DTD Sylvain Salvati
Vocabulaire pour la passage du modèle conceptuel des données au modèle relationnel des données. MCDMRD EntitéTable PropriétésChamps, attribut IdentifiantClé
Exposé de Système - Informatique et Réseau
Programmation Web Les JSP.
XHTML EXtensible HyperText Markup Language. HTML et XML HTML (HyperText Markup Language) et XML (eXtensible Markup Language) sont deux spécifications.
Les technologies XML Cours 3 : Les APIS XML Janvier Version 1.0 -
Cours 5.3 : XML et les architectures N-tiers – Tier Présentation
Cours 6 : XML et les architectures N-tiers – Tier Applicatif
Domaines nominaux XSLT
TD 1 IJA Introduction Objet, méthode, attribut Classe, instance
CURSUS DE FORMATION AUX NOUVELLES TECHNOLOGIES DE DEVELOPPEMENT UV EJB Entité Module Java Expert.
TP 3-4 BD21.
JSP Java Server Pages. Introduction Afin dimplémenter les règles métiers, coté serveur dans une application Web, larchitecture Java propose trois solutions.
Servlet JAVA.
Formulaire HTML Introduction. Définition de formulaire.
Manipulation d’XML avec XSL
Introduction à la POO: Les classes vs les objets
1 ARCHITECTURE DACCÈS la méthode générale modèle de données définitions module daccès / modules métiers construction des modèles les modules daccès, les.
Common Gateway Interface
LOG 02 Bases de Données Avancées Rappels sur JSP / Servlet
XML-Family Web Services Description Language W.S.D.L.
UNIVERSITE CHOUAIB DOUKKALI Département des mathématiques
JavaBeans Réalise par: EL KHADRAOUY TARIK AOUTIL SAFOWAN.
Les méthodes en java Une méthode est un regroupement d’instructions ayant pour but de faire un traitement bien précis. Une méthode pour être utilisée.
Struts 1 & 2 Tlohi ibtissam Tabit boutaina Ilias bouras
SERVLETS PRESENTATION
Introduction à DOM Maroua Bouzid
Xml/xslt : Extensible Stylesheet Language Transformation réalisé par: saÏd NAÏM.
Les instructions PHP pour l'accès à une base de données MySql
28 novembre 2012 Grégory Petit
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.
Introduction à la structuration des documents: les techniques M2: Gestion des connaissances.
.Net Remoting.
Notions sur le XML Réfs : manuel p 149. Introduction Le XML (eXtensible Markup Language) est un standard d'échange de données. Il fait partie comme le.
FICHIERS : Définition : Algorithme général:
Xpath XML Path language par Yves Bekkers
XSLT Langage de transformation darbre par Yves Bekkers.
Présentation Structures de Données et TDA
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.
Animateur : Med HAIJOUBI
JavaScript Nécessaire Web.
Créer des packages.
Master 1 SIGLIS Java Lecteur Stéphane Tallard Les erreurs communes en Java.
Technologies web et web sémantique TP3 - XML. XML eXtensible Markup Language (langage extensible de balisage) – Caractéristiques: méta-langage = un langage.
ANTOINE CHEVERT , PASCAL LAMY
Tutorat en bio-informatique
5ième Classe (Mercredi, 19 octobre) Prog CSI2572.
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.
 Formulaires HTML : traiter les entrées utilisateur
Master 1 SIGLIS Intégration des données dans l’entreprise Stéphane Tallard JDBC: Java Database Connectivity Master 1 SIGLIS1JDBC.
Soutenance du mémoire de synthèse
Cours 4 (14 octobre) Héritage. Chapitre III Héritage.
Module : Langage XML (21h)
Les Servlets Présentation Cycle de vie Principe de fonctionnement
eXtensible Markup Language. Généralités sur le XML.
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.
Introduction Module 1.
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.
FORMULAIRES FOMULAIRE Permet à l’utilisateur d’entrer des renseignements le concernant. Utilisation –Inscription sur un site –Mise à jour d’une base.
DREAMWEAVER MX2 - Séance 2 Les calques Les comportements Les scénarios Les formulaires Les feuilles de style Les modèles Les cadres Mise en ligne Jérôme.
Les calques Les Template (modèles) Les Comportements Les scénarios Les formulaires Les CSS Le serveur Web de l’UTC Présentation.
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.
Transcription de la présentation:

1  STIME/DT - Alain Paoli Le Portails d’Entreprise

2  STIME/DT - Alain Paoli Plan Les Portails d’Entreprise –Définition –Les problèmes à résoudre Les technologies, leur apports, leurs limitations –Servlet, –JSP –XML, DOM, DTD et Schema, XSLT, XForms –Cocoon Récapitulatif –Apports / Limitations des technologies présentées –Problèmes / Solutions Proposition

3  STIME/DT - Alain Paoli Portails d’Entreprise (EIP) Objectif: Intégrer l’information pour améliorer la productivité et la réactivité de l’entreprise –Premières applications: rapports financiers, statistiques ventes / achats Définition: Un point d’accès unique et personnalisé à des sources d’informations variées Forte croissante: –80% des 500 premières entreprises mondiales sont en train de déployer un portail (estimation Gartner Group)

4  STIME/DT - Alain Paoli

5 Degrés de variabilités Deux niveaux de personnalisation –Page Style Choix des portlets et leur mise en page (lignes, colonnes) –Portlet Contenu du Portlet (peut être dynamique) Deux types de contenus pour un Portlet –résumé –complet Deux types de pages –Bureau : montre plusieurs portlets –Zoom: montre un seul portlet + Bannière et barre de navigation

6  STIME/DT - Alain Paoli Portails d’Entreprise Fonctionnalités –Bureau personnalisé –Pages composées de modules indépendants (Portlets) –Agrégation d’informations en provenance de sources très variées Bases de données, Bases documentaires, Messagerie, Sites Web – Applications simples Formulaires de saisie Requêtes (dans annuaire LDAP, base documentaire, …) –Accessible via divers types de terminaux (Navigateur sur PC, Organiseur, Téléphone WAP, ….)

7  STIME/DT - Alain Paoli Les Problèmes à résoudre Maintenir une session Maintenir un profil utilisateur –Préférences du bureau personnalisé (liste des portlets composant la page bureau) –Droits aux diverses sources d’informations et applications (portlets) –La structure du profil doit pouvoir évoluer Agréger des sources d’informations très diverses –La composition d’une page nécessite de multiples requêtes Gérer des formulaires Composer dynamiquement les pages par un assemblage de portlets –En fonction du profil utilisateur –En fonction du type de terminal

8  STIME/DT - Alain Paoli Les technologies classiques Servlet, JSP

9  STIME/DT - Alain Paoli Servlet

10  STIME/DT - Alain Paoli Servlet - Principe Une instance d’une classe qui implémente l’interface javax.servlet.http.HttpServer reçoit les requêtes HTTP. Les requêtes HTTP transmises spécifient le nom (ou classe du Servlet) appelé. Quand l’objet javax.servlet.http.HttpServer reçoit une requête HTTP: –S'il n'existe pas encore d'instance du Servlet correspondant à la requête HTTP, il en crée une. –Il appelle une méthode de cette instance, pour traiter la requête, à l'intérieur d'un nouveau processus léger (ou "thread") qui est créé pour l'occasion: doGet (pour les requêtes HTTP GET) doPost (pour les requêtes HTTP POST)

11  STIME/DT - Alain Paoli Servlet - Idiome import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class MonServlet extends HttpServlet { public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // Utiliser l’objet "request" pour lire les headers HTTP (e.x. cookies) // et les paramètres transmis par un formulaire HTML // Utiliser l’objet "response" pour écrire la ligne HTTP réponse avec ses headers // (e.x. spécifier le MIME type, passer des cookies). PrintWriter out = response.getWriter(); // Utiliser l’objet "out" pour écrire la page réponse envoyée au navigateur out.println(" \n" + " Hello WWW \n" + " \n" + " Hello WWW \n" + " "); }

12  STIME/DT - Alain Paoli Session Session: maintenue par cookie temporaire ou insertion d ’un paramètre dans la requête. –Un contexte est maintenu pour un utilisateur HttpSession session = request.getSession(true); // récupère la session courante. En crée une si besoin est session.setAttribute("o1", objet1); // stocke un objet MaClasse o = session.getAttribute ("o1"); // retrouve l’objet Enumeration enumAttNames = session. getAttributeNames(); –Méthodes: getCreationTime(): long  Date de création de la session getId(): String  Identifiant de la session getLastAccessedTime() : long  Date dernière requête get/setMaxInactiveInterval(int): nb de millisecondes d’inactivité isNew(): boolean  vrai si la session vient d’être crée

13  STIME/DT - Alain Paoli JSP But: –Séparer les parties statiques des parties dynamiques d’une page Pouvoir utiliser les outils classiques pour la partie statiques des pages HTML –Inclusion de code Java dans les pages HTML Le code Java est inclus entre des tags ‘ ’ L’extension de la page doit être ‘.jsp’ Le code HTML et le code Java sont compilés dans un servlet dont le source est généré automatiquement lors de la première requête sur la page

14  STIME/DT - Alain Paoli Expression JSP Sert à inclure une valeur dans le flot de sortie (page réponse) Syntaxe: – Exemple: – Aujourd’hui: L’expression Java est évaluée, convertie en une string, et insérée dans la page. Cette évaluation est faite lors du traitement de la requête HTTP.

15  STIME/DT - Alain Paoli Scriptlet JSP Permet d’insérer n’importe quel code Java –Syntaxe: Vous avez gagné ! Vous avez perdu ! Sera compilé en quelque chose comme: if (Math.random() < 0.5) { out.println(”Vous avez gagné !"); } else { out.println(" Vous avez perdu !"); }

16  STIME/DT - Alain Paoli Actions jsp:useBean: – –Cette action associe un Bean, instance de la classe spécifiée par ‘class’, avec une portée spécifiée par ‘scope’, avec la référence spécifiée par ‘id’. –Si une instance associée avec la même référence n’est pas trouvée dans la portée, une nouvelle instance est crée. –Portée: quatre valeurs possibles application: bean visible de toutes les pages, pour toutes les sessions session: bean visible de toutes les pages pour une session considérée requête: bean visible de toutes les pages participant à une requête page: bean visible dans la page considérée jsp:setProperty – –Positionne toutes les propriétés du Bean avec les valeurs passées en paramètres dans la requête, de telle façon qu’un paramètre de nom ‘prop’ positionnera la valeur d’une propriété de nom ‘property’ (i.e. ce Bean est muni d’un ‘setter’ setProp()), en faisant au préalable des conversions implicites.

17  STIME/DT - Alain Paoli Exemple Gérer un formulaire d’identification –L’utilisateur doit saisir son logon et son mot de passe, puis cliquer sur ’OK’ Si pas de logon ou de mot de passe saisi: message d’erreur affiché dans la page réponse. Si utilisateur inconnu (logon ou mot de passe non enregistré): message d’erreur affiché dans la page réponse. Si erreur, on affiche à nouveau le formulaire avec valeurs saisies et message d’erreur Sinon, on affiche la page d’accueil. –Architecture Une page JSP affichant le formulaire + message d’erreur Un Bean User + un Bean Contrôleur du dialogue

18  STIME/DT - Alain Paoli Page JSP Votre "> Mot de passe ">

19  STIME/DT - Alain Paoli Bean User public class User { private String logon = ""; private String pass = ""; public User() { // constructeur } public String getLogon() { return logon; } public String getPass() { return pass; } public void setLogon(String logon) { this.logon = logon; } public void setPass(String pass) { this.pass = pass; } }

20  STIME/DT - Alain Paoli import javax.servlet.http.*; public class IdentificationControler { private String errorMessage = ""; public void process(HttpServletRequest request, HttpServletResponse response) { try { if (request.getParameter("state") == null) { // état: initialisation return; String logon = request.getParameter("logon"); String pass = request.getParameter("pass"); if (logon.equals("") || pass.equals("")) { errorMessage = " Erreur: vous n'avez pas saisi votre identifiant ou votre mot de passe "; return; } User user = (User) request.getSession().getAttribute("user"); if (!isRegistred(user)) { errorMessage = " Erreur: vous n'êtes pas enregistré comme utilisateur "; return; } response.sendRedirect("accueil.jsp"); //sendRedirect() doit être fait avant écriture du tag } // end try catch(IOException e) { errorMessage = " Erreur: Fichier " + nextJSP + " introuvable. "; } } public boolean isRegistred(User user) { // retourne true si l’utilisateur est connu, et false sinon }

21  STIME/DT - Alain Paoli Exécution (1) Affichage du formulaire pour la première fois / session: –requête HTTP GET: –Création du bean User (logon et pass initialisé à "") –Création d’une instance du contrôleur (sa portée est "page") attribut errorMessage initialisé à "" sa méthode process ne fait rien (pas de paramètre "state" dans la requête). (2) Saisie du logon et du pass et envoi –Récupération du bean User (logon et pass contiennent les valeurs saisies) –Création d’une instance du contrôleur (sa portée est "page") attribut errorMessage initialisé à "" il y a un paramètre "state" avec la valeur "control" : la méthode process vérifie les valeurs saisie et vérifie que l ’utilisateur est enregistré –Si OK: redirige la requête vers "accueil.jsp" –Sinon positionne un message d’erreur dans errorMessage. Le message sera affiché par l’exécution du l’expression :

22  STIME/DT - Alain Paoli JSP: Limitations Insertion de code Java dans du code HTML –Pas de séparation entre contenu et présentation –Le flot de contrôle du code Java doit suivre l’ordre d’écriture dans le flot de sortie –Comment gérer plusieurs types de terminaux ? Portlet 1 Code HTML de Mise en Page Portlet 2Portlet 3Portlet 4 … Portlet 1 … Portlet 2 … Portlet 3 … Portlet 4 Page Flot de contrôle Flot de sortie

23  STIME/DT - Alain Paoli Solution Deux étapes: –(1) Générer le contenu sous la forme d’une arborescence Page / Portlets, chaque Portlet ayant sa structure propre. Pouvoir construire le contenu des portlet dans n’importe quel ordre. –(2) Générer la présentation pour l’ensemble en fonction du type de terminal Page Portlet 1 Portlet 2Portlet 3Portlet 4

24  STIME/DT - Alain Paoli XML

25  STIME/DT - Alain Paoli Définition XML est une norme (recommandation) du W3C (World Wide Web Consortium): –En charge de la définition de standards du Web (HTML) –Rassemble des entreprises et des chercheurs Labos: Massachusetts Institute of Technology (MIT), Institut National de Recherche en Informatique et Automatique (INRIA), Keio University of Japan. Nombreux standards connexes à XML: –Définis par le W3C (XSL, DOM, Schema, RDF) –Définis par des entreprises ou consortiums indépendants du W3C : OASIS, Biztalk, WAP Forum –Des standards de fait : SAX

26  STIME/DT - Alain Paoli Définition XML: eXtensible Markup Language –Méta-langage permettant de définir des documents ou messages (flots) structurés. –Documents édités (sérialisés) sous forme de données encadrées par des balises (Tags). Les balises sont exprimées comme en HTML Hello World ! XML permet de définir des informations: –semi-structurées –extensibles: on peut définir ses propres balises –auto-documentées (par les balises)

27  STIME/DT - Alain Paoli Définition XML définit les règles syntaxiques que doivent respecter les documents XML bien formés. –Le document a une structure d ’arbre une seule balise (racine) au sommet à chaque balise ouvrante correspond une balise fermante tout élément fils est entièrement contenu dans son père Document bien forméDocument mal formé Data on the Web Serge Abiteboul Des relations aux données semi-structurées et XML Data on the Web Serge Abiteboul Des relations aux données semi-structurées et XML … attribut

28  STIME/DT - Alain Paoli Compréhension des informations Menu Saumon Fumé  Canard Rôti Pommes de Terres  Profiteroles Seule la présentation et le sens permettent d ’identifier la structure Saumon fumé Canard Rôti Pommes de Terre Profiteroles Des marqueurs (balises) explicitent la structure Seul le contenu est décrit (pas de présentation) Menu;Saumon Fumé;Canard Rôti... Informations non explicites

29  STIME/DT - Alain Paoli Document Object Model Le DOM est une recommandation du W3C fixant les types d’objets utilisés pour représenter en mémoire les nœuds d’une arborescence XML Dupont Alfred Document Element Attribute Text annuaire Element carte Comment carte de visite nomprenom DupontAlfred Element Text

30  STIME/DT - Alain Paoli Document Object Model Dans le modèle DOM, tout objet est un nœud de type Node. Le nœud racine du document est un objet Document. –L’objet Element représente les balises contenues dans le document XML. Le nœud Document ne peut posséder qu’un seul fils de type Element. –Le nœud Text traduit le contenu textuel d’un Element ou d’un Attribute (autre sous-classe de Node). Ces types sont définis en IDL et sous formes d’interfaces Java –Nombreuses méthodes réparties sur les différents types pour: Créer les différents types de nœuds Ajouter / Supprimer / Remplacer un fils ; obtenir la liste des fils Accéder / Positionner le père Accéder / Positionner un attribut ; obtenir la liste des attributs Cloner un nœud.

31  STIME/DT - Alain Paoli Utilisation d’un DOM Dupont Alfred Parser XML DOM Sérialiseur XMLApplication Java Le Parser fournit une implémentation du DOM Le Sérialiseur utilise une implémentation du DOM L’application Java lit, modifie, ajoute, supprime des nœuds ou crée un DOM de toute pièce

32  STIME/DT - Alain Paoli import java.io.*; import org.w3c.dom.*; import org.apache.xerces.parsers.*; import org.apache.xml.serialize.*; import org.xml.sax.*; public class UseDom { public static void main(String[] args) { try { DOMParser parser = new DOMParser(); // crée le parser parser.parse("annuaire.xml"); // parse Document doc = parser.getDocument(); // récupère le DOM Element annuaire = doc.getDocumentElement(); // récupère la racine annuaire Element carte = doc.createElement("carte"); // crée un élément carte.setAttribute("id", "12345"); // ajoute un attribut à annuaire.appendChild(carte); // ajoute le fils à Element nom = doc.createElement("nom"); // crée l’élément nom.appendChild(doc.createTextNode("Durand")); // positionne valeur de carte.appendChild(nom); // ajoute le fils à XMLSerializer serializer = new XMLSerializer(); // crée le sérialiseur FileWriter fw = new FileWriter("annuaire2.xml"); // crée le flot de sortie serializer.setOutputCharStream(fw); // positionne le flot dans le sérialiseur OutputFormat of = new OutputFormat(); // définit un format de sortie serializer.setOutputFormat(of); // positionne format de sortie dans le sérialiseur serializer.serialize(doc); // sérialise fw.close(); // clos le flot de sortie } catch(IOException e) { } catch(SAXException e) { } } }

33  STIME/DT - Alain Paoli Utilisation d’un DOM Le programme précédent produit le document XML suivant: Dupont Alfred Durand

34  STIME/DT - Alain Paoli Validation d’un Document XML Via un DTD: –Déclarer les éléments fils d’un élément, et leur cardinalité –Déclarer les noms d’attributs d ’un élément, et leur caractère obligatoire ou facultatif ou valeur par défaut Définir un attribut de type clé unique (ID) Définir un attribut de type référence à une clé (IDREF) Via un Schema: –Déclarer des types élémentaires et complexe en utilisant des constructeur de types (union, liste, séquence, agrégation) –Définir des clés et leur référence –Définir des types dérivés par extension: ajout d’éléments ou d’attributs à la structure par restriction: en rajoutant des contraintes sur un type –Utilisation des espaces de noms (namespaces)

35  STIME/DT - Alain Paoli Données semi-structurées XML Relationnel –Structure de table Le sens d’une cellule se définit par rapport au tuple auquel elle appartient et au schéma. –Algèbre fondée sur relation universelle + {dépendances} –Contraintes: Toutes les lignes d’une table possèdent la même structure Toute cellule est d’un type pré- défini atomique XML –Structure d’arbre quelconque Le sens d’un nœud se définit par rapport à ses ancêtres (contextuellement auto-descriptif) –Propositions d’algèbres (Datalog) –Contraintes: Un nœud a un nombre quelconque de fils Types pré-définis de nœuds (Document, Element, Text, …) TableDocument Ligne 2 C3 C4 C5 Ligne 1 C1 C2 C3

36  STIME/DT - Alain Paoli XSLT

37  STIME/DT - Alain Paoli Définition XSLT (XML Stylesheet Language Transformation) est un standard XML qui permet de générer un document cible à partir d’un document source –par des opérations de filtrage –par des transformations –par des calculs simples –par des appels à des objets Java Il fait partie de XSL (XML Stylesheet Language) qui se décompose en: –XSLT pour la transformation des documents XML (recommandation du W3C) –XSL-Formating Object pour la description des informations de mise en page (Working Draft)

38  STIME/DT - Alain Paoli Principe de Fonctionnement La feuille de style décrit comment le processeur XSLT doit transformer le document XML source. –Elle contient des règles décrivant les transformations à appliquer sur un nœud (sous- arbre). Le résultat de la transformation peut: –être un document XML –être un document HTML –être un document texte –respecter un format propriétaire Processeur XSLT Document XML Source Feuille de style XSLT Document Cible

39  STIME/DT - Alain Paoli Mécanisme de transformation L’application d’une règle de transformation à un nœud génère une partie du document cible Pour transformer un nœud, le processeur –Trouve la règle la plus prioritaire s’appliquant à ce nœud –applique la règle de transformation –lorsqu’une règle s’applique à un nœud, ce nœud est le contexte de référence pour les instructions XSL contenues dans le corps de la règle instructions XSLT ou texte littéral à produire ou éléments XML bien formés à insérer Partie condition Partie production

40  STIME/DT - Alain Paoli XPath Normalise la façon de localiser des parties d’un document XML Expressions XPath: –"/" sélectionne la racine – "item" sélectionne tous les nœuds sélectionne l’attribut "title" pour tous les nœuds sélectionne tous les nœuds possédant un attribut "title" avec la valeur ‘Stats’ –"item/value" sélectionne les fils pour tous les nœuds –"." identifie le nœud contexte courant –".." identifie le père du nœud contexte courant

41  STIME/DT - Alain Paoli Instructions XSLT –Cette instruction sélectionne les fils du nœud courant (contexte courant) et provoque le traitement sur chacun de ces nœuds. –Elle peut comporter un attribut select contenant une expression XPath pour ne sélectionner que certains nœuds fils. –Traduit le résultat de la requête XPath (un nœud ou un attribut), appliqué au contexte courant en une chaîne de caractères qui est insérée en lieu et place de cette balise. Insère le contenu du nœud ou la valeur de l’attribut sélectionné {requête XPath} –Idem, mais doit être utilisé lorsque la chaîne de caractères résultat doit être insérée en tant que valeur d’attribut d’un élément XML.

42  STIME/DT - Alain Paoli <?xml-stylesheet href="p5.xsl" type="text/xsl"?> <xsl:stylesheet version="1.0" xmlns:xsl=" % S <img src="o.gif" width="{./value}" height="10"/>

43  STIME/DT - Alain Paoli Code HTML Généré Stats 64% S43 16% S44

44  STIME/DT - Alain Paoli XForms

45  STIME/DT - Alain Paoli XForms XForms est la redéfinition des formulaires HTML en XML –Recommandation du W3C en cours d’élaboration –Modèle en couches, définition des types et contraintes en Schema ? Présentation Logique Données Données stockées en XML Définition des types, Données calculées et contraintes Présentations alternatives / types de média Dubois Pierre Masculin Masculin Féminin Feuilles de style XSLT

46  STIME/DT - Alain Paoli XForms Au niveau logique, un modèle décrit la structure du formulaire (Working Draft du 6 Avril 2000) –Les données sont regroupées en groupes et sous-groupes. –Données typées (string, date, durée, nombre, booléen) données mono et multi valuées –Facettes exprimant : des contraintes sur les données –min, max, integer, decimals, format, caractère obligatoire de la donnée des règles de calcul simples –extension envisagées pour intégrer des langages de scripts (javascript) Problème: –Définition incomplète et déclarée obsolète. Attente nouvelle version

47  STIME/DT - Alain Paoli Cocoon 1

48  STIME/DT - Alain Paoli Architecture Cocoon Requête HTTPDOM Chaîne de n Processeurs ProducteurFormateur Document HTML PDF WML …. Méthode service() du Servlet Cocoon Source d’information La chaîne de production de la page réponse se compose d’un Producteur, de 0 à n Processeur et d’un Formateur: –Le rôle du Producteur est de produire le DOM de la page réponse à la requête HTTP (à partir d’une ou plusieurs sources d’informations) –Le rôle d’un Processeur est de traiter le DOM fournit en entrée, et de retourner le DOM modifié ou enrichit. Les processeurs sont spécialisés (LDAP, SQL, …) –Le rôle du Formateur est d’appliquer une transformation XSLT pour fabriquer la présentation au format ad hoc (HTML, PDF, WML, …) Feuille de style XSLT Réponse à la requête HTTP

49  STIME/DT - Alain Paoli Cocoon: Fonctionnalités Producteurs, Processeurs et Formateur sont des objets Java –Implémentent une interface donnée. On peut définir ses propres classes. –Le nom du Producteur est spécifié dans le fichier paramètre ou bien est passé en paramètre dans la requête HTTP –Les noms des Processeurs et Formateur sont spécifiés dans le document XML retourné par le producteur. Les processeurs sont exécutés dans l’ordre de leur déclaration dans ce DOM XSP: c’est le ‘JSP’ de Cocoon pour traiter les parties dynamiques –Syntaxe purement XML. –Chaque page contenant des balises XSP est compilée sous la forme d’un objet Java qui est utilisé par le processeur XSP. Système de cache mémoire –Feuilles de style XSLT parsées une fois, leur DOM est stocké dans le cache. –Une seule instance de Producteur, Processeur et Formateur par classe, mémorisée dans le cache. Idem pour le parseur XML (Xercès) et le processeur XSLT (Xalan). –La page réponse produite est stockée dans le cache. Si la même requête est traitée, avec les mêmes paramètres, Cocoon retourne la page stockée dans le cache.

50  STIME/DT - Alain Paoli Cocoon: Limitations Peu adapté à la personnalisation: –Cache de type tout ou rien (version 1.8): si les pages sont personnalisées, il y a peu de chances qu’on réutilise une même page. Et de plus toute nouvelle page produite est stockée dans le cache (risque de dépassement de capacité mémoire). –L’unité de la chaîne de production est la page et non le portlet : L’unité stockée dans le cache est la page Compilation de la page en classe Java si utilisation de balises XSP dans la page. Conséquence: si n pages dynamiques, alors il y a n compilations. Conséquences, si personnalisation: –On ne peut utiliser le cache (nuit aux performances) –On ne peut utiliser le mécanisme XSP.

51  STIME/DT - Alain Paoli Publication / Composition Définitions –La publication consiste à mettre à jour des sources d’informations. –La composition consiste à fabriquer une page qui agrège des informations en provenance de sources diverses. Constat: –Les sources d’informations sont rafraîchies à des intervalles de temps très divers (de la seconde à plusieurs jours). La plupart des informations ont une fréquence basse de rafraîchissement (plusieurs heures à plusieurs jours) –Les processus de publication et de compositions ne sont donc pas synchrones. Ex: arrivée d’un  publication de l’ sous format XML ad hoc (1 fois), puis n composition de pages affichant le contenu de cet .

52  STIME/DT - Alain Paoli Récapitulatif Problèmes / Solution

53  STIME/DT - Alain Paoli Apports / Limitations

54  STIME/DT - Alain Paoli Problèmes / Solutions

55  STIME/DT - Alain Paoli Proposition Pour un Portail d’Information d’Entreprise

56  STIME/DT - Alain Paoli Mécanisme =

57  STIME/DT - Alain Paoli Mécanisme (0) A l’initialisation du serveur, tous les portlets sont parsés et les DOM résultats sont chargés dans un cache mémoire commun à tous les utilisateurs. –Contrainte: les portlets ont le même état persistant pour tous les utilisateurs. (1) Suite à la réception d’une demande de page (requête HTTP), le Producteur: –Parse le fichier XML décrivant la page et charge le DOM dans la session utilisateur. –Remplace les balises de la page par les balises correspondantes (copie / coller). Suivant la valeur de l’attribut "content" de la balise n’insère que la partie "résumé" ou la partie "complète". (2) Si besoin les processeurs traitent le DOM retourné par le Producteur –Un processeur peut être définit pour un portlet donné. Si l’on utilise XSP dans le portlet, c’est le processeur du portlet qui appelle le processeur XSP. (3) Le formateur recherche dans le cache session le flot de caractères HTML. –Si non trouvé, crée la présentation et la stocke dans la session –Si le contenu d’un des portlets à changé reconstruit la présentation que pour ce portlet

58  STIME/DT - Alain Paoli Implémentation XForms Masculin Féminin Formulaire XForms Formulaire HTML Une classe abstraite FormProcessor: –Récupérer la liste des paramètres/valeurs dans la requête HTTP Pour chaque paramètre, contrôler la valeur par rapport aux contraintes définies dans le formulaire, et construire le nœud correspondant dans le DOM Data. –Appeler la méthode abstraite process() Un formulaire doit avoir une classe héritant de FormProcessor et implémentant la méthode process() pour traiter le DOM Data. Correspondances des noms

59  STIME/DT - Alain Paoli Architecture