Changes between Version 1 and Version 2 of StrutsAlbert


Ignore:
Timestamp:
Jun 20, 2006, 6:36:52 PM (18 years ago)
Author:
Le Meur
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • StrutsAlbert

    v1 v2  
    33== Struts et la construction des sites Web dynamiques ==
    44
    5    * qu’est-ce qu’un site Web dynamique ?
    6    * pourquoi a-t-on besoin d’un produit spécial pour cela ?
    7    * qu’offre Struts ?
     5 * qu’est-ce qu’un site Web dynamique ?
     6 * pourquoi a-t-on besoin d’un produit spécial pour cela ?
     7 * qu’offre Struts ?
    88Struts est un environnement logiciel (en anglais, on utilise volontiers le terme framework)  destiné la construction de sites Web dynamiques.
    99Struts se présente comme un ensemble de bibliothèques sur lesquelles l’application Web sera construite. Mais la démarche va plus loin et c'est bien une méthode de conception de site qui est proposée, et qui, même sans Struts, gagne à être adoptée.
    1010L’idée forte est de séparer la présentation et les traitements. Pour ce faire, Struts propose :
    11    * de séparer le code HTML (présentation) du code de traitement (Java) ;
    12    * de séparer la validation des requêtes de leur traitement proprement dit ;
    13    * de séparer la navigation entre les pages de la localisation physique des fichiers sur disque.
     11 * de séparer le code HTML (présentation) du code de traitement (Java) ;
     12 * de séparer la validation des requêtes de leur traitement proprement dit ;
     13 * de séparer la navigation entre les pages de la localisation physique des fichiers sur disque.
    1414
    1515== Qu’est-ce qu’un site Web dynamique ? ==
     
    3434</verbatim>
    3535 et l’affichage des éléments à présenter ;
    36    * il est *très* difficile à faire évoluer, car il faut un développeur compétent dans le langage de programmation du script, en infographie (ou du moins dans le langage HTML), et bien sur dans le problème à résoudre ;
    37    * la simple réorganisation du site est délicate, car la navigation entre pages est le plus souvent noyée dans le code du script, et il faut relire tous les scripts et les corriger pour le moindre changement dans les noms des fichiers ou des répertoires ;
    38    * les performances sont médiocres, car les programmes sont le plus souvent exécutés sous la forme de processus extérieurs, longs à créer, même sous UNIX ;
    39    * il est difficile de maintenir un contexte entre deux requêtes puisque chaque CGI est activé comme un nouveau processus, qui n’a pas de « mémoire » explicite du passé – l’accès à une base de données, par exemple, est pénalisant car la connexion doit être ouverte à chaque requête, avec des temps d’attente importants liés à la vérification par la base des droits de l’utilisateur, l’établissement de son contexte de travail, …
     36 * il est *très* difficile à faire évoluer, car il faut un développeur compétent dans le langage de programmation du script, en infographie (ou du moins dans le langage HTML), et bien sur dans le problème à résoudre ;
     37 * la simple réorganisation du site est délicate, car la navigation entre pages est le plus souvent noyée dans le code du script, et il faut relire tous les scripts et les corriger pour le moindre changement dans les noms des fichiers ou des répertoires ;
     38 * les performances sont médiocres, car les programmes sont le plus souvent exécutés sous la forme de processus extérieurs, longs à créer, même sous UNIX ;
     39 * il est difficile de maintenir un contexte entre deux requêtes puisque chaque CGI est activé comme un nouveau processus, qui n’a pas de « mémoire » explicite du passé – l’accès à une base de données, par exemple, est pénalisant car la connexion doit être ouverte à chaque requête, avec des temps d’attente importants liés à la vérification par la base des droits de l’utilisateur, l’établissement de son contexte de travail, …
    4040
    4141== Les servlets ==
     
    4949Mais une servlet présente toute de même pas mal d’avantages sur un CGI / script :
    5050
    51    * la création d’un thread est beaucoup plus rapide que la création d’un processus, et consomme bien moins de ressources ;
    52    * la servlet et son thread peuvent restés en mémoire dans le serveur, ce qui accélère encore les temps de réponse et améliore la montée en charge;
    53    * un contexte peut être maintenu d’une requête à une autre, par exemple pour conserver les résultats d’un précédent traitement et les afficher rapidement ;
    54       * une utilisation particulièrement de cette persistance de l’information durant une session est l’accès aux bases de données qui peut être fait lors d’un premier accès et conservé par la suite ;
    55       * des serveurs comme Tomcat offre même des mécanismes de « pool de connexions », ouvertes au démarrage du serveur et immédiatement utilisables.
     51 * la création d’un thread est beaucoup plus rapide que la création d’un processus, et consomme bien moins de ressources ;
     52 * la servlet et son thread peuvent restés en mémoire dans le serveur, ce qui accélère encore les temps de réponse et améliore la montée en charge;
     53 * un contexte peut être maintenu d’une requête à une autre, par exemple pour conserver les résultats d’un précédent traitement et les afficher rapidement ;
     54   * une utilisation particulièrement de cette persistance de l’information durant une session est l’accès aux bases de données qui peut être fait lors d’un premier accès et conservé par la suite ;
     55   * des serveurs comme Tomcat offre même des mécanismes de « pool de connexions », ouvertes au démarrage du serveur et immédiatement utilisables.
    5656En outre –
    57    * le langage Java est un langage fortement typé qui évite bien des erreurs si fréquentes avec les langages de scripting ;
    58    * Java est rapide à développer grâce à son mécanisme de compilation incrémentale et ne nécessite pas d’éditions de lien (ce qui rend le cycle de développement beaucoup plus court qu’en C++) ;
    59    * Java est directement portable au niveau du code compilé sur toutes les plates-formes majeures (UNIX/Linux, Windows, Mac) ;
    60    * Java gère l’utilisation de la mémoire de l’application, ce qui interdit les fuites de mémoire, principale source de l’écroulement des performances des programmes C++ (mal écrits) ;
    61    * Java interdit le débordement des listes et des tableaux, ce qui protège le serveur et évite que son propre espace mémoire ne soit pollué par une application mal écrite ;
    62    * le support des exceptions permet au serveur de rattraper des erreurs de l’application : la servlet se plante peut-être, mais le serveur lui survit.
     57 * le langage Java est un langage fortement typé qui évite bien des erreurs si fréquentes avec les langages de scripting ;
     58 * Java est rapide à développer grâce à son mécanisme de compilation incrémentale et ne nécessite pas d’éditions de lien (ce qui rend le cycle de développement beaucoup plus court qu’en C++) ;
     59 * Java est directement portable au niveau du code compilé sur toutes les plates-formes majeures (UNIX/Linux, Windows, Mac) ;
     60 * Java gère l’utilisation de la mémoire de l’application, ce qui interdit les fuites de mémoire, principale source de l’écroulement des performances des programmes C++ (mal écrits) ;
     61 * Java interdit le débordement des listes et des tableaux, ce qui protège le serveur et évite que son propre espace mémoire ne soit pollué par une application mal écrite ;
     62 * le support des exceptions permet au serveur de rattraper des erreurs de l’application : la servlet se plante peut-être, mais le serveur lui survit.
    6363
    6464== Java Server Page ==
     
    7373L’enchaînement idéal est donc :
    7474
    75    * une page HTML propose un formulaire à l'utilisateur pour définir les critères de la requête ;
    76    * la requête transmise au serveur est dirigée vers une servlet qui traite la demande et construit un résultat qu’elle met à la disposition du serveur ;
    77       * bien qu’elle soit autorisée à le faire, une servlet idéale n’est pas supposée produire du code HTML, sauf pour assurer le chaînage vers une page de présentation des résultats ;
    78       * mais elle dialogue avec le serveur pour obtenir les paramètres de la requête, récupérer des informations sur le demandeur, et obtenir l'état d'un précédent contexte ;
    79    * une JSP est appelée pour mettre en page les résultats ;
    80    * cette JSP obtient du serveur le résultat à présenter et n’utilise que le minimum de code Java pour en afficher le contenu.
     75 * une page HTML propose un formulaire à l'utilisateur pour définir les critères de la requête ;
     76 * la requête transmise au serveur est dirigée vers une servlet qui traite la demande et construit un résultat qu’elle met à la disposition du serveur ;
     77  * bien qu’elle soit autorisée à le faire, une servlet idéale n’est pas supposée produire du code HTML, sauf pour assurer le chaînage vers une page de présentation des résultats ;
     78  * mais elle dialogue avec le serveur pour obtenir les paramètres de la requête, récupérer des informations sur le demandeur, et obtenir l'état d'un précédent contexte ;
     79 * une JSP est appelée pour mettre en page les résultats ;
     80 * cette JSP obtient du serveur le résultat à présenter et n’utilise que le minimum de code Java pour en afficher le contenu.
    8181
    8282Un « effet de bord » intéressant : une même JSP peut très bien présenter des résultats obtenus par des traitements (servlet) très différents : lecture d’un fichier, consultation d’une base de données, requêtes à un Web service, …
     
    9898Les principaux services offerts par ces balises spécialisées sont :
    9999
    100    * vérifier si un objet Java (typiquement, l’objet résultat construit par la servlet) est effectivement présent, et sinon effectué un traitement particulier (appeler une page d'erreur, par exemple) ;
    101    * accéder simplement aux attributs d’un objet complexe via un formalisme similaire à celui de HTML ;
    102    * itérer sur une structure de liste, et accéder à chacun de ces éléments (très utile lors que le résultat de la requête doit être présenté sous la forme d’une table).
     100 * vérifier si un objet Java (typiquement, l’objet résultat construit par la servlet) est effectivement présent, et sinon effectué un traitement particulier (appeler une page d'erreur, par exemple) ;
     101 * accéder simplement aux attributs d’un objet complexe via un formalisme similaire à celui de HTML ;
     102 * itérer sur une structure de liste, et accéder à chacun de ces éléments (très utile lors que le résultat de la requête doit être présenté sous la forme d’une table).
    103103Les avantages des balises Struts sur du code Java sont :
    104    * il n'y a plus de dépendance entre la JSP et l'objet Java utilisé pour transmettre les résultats
    105       * l'accès aux éléments du résultat se fait par « passage de messages » (grâce à l'introspection)
     104 * il n'y a plus de dépendance entre la JSP et l'objet Java utilisé pour transmettre les résultats
     105  * l'accès aux éléments du résultat se fait par « passage de messages » (grâce à l'introspection)
    106106      * l'objet résultat doit juste fournir les services correspondant à ces messages – le paradigme Bean est utilisé : l'attribut invoqué doit être accessible par une méthode "get + nom d'attribut"  (exemple: getEnergy( ) ) ;
    107    * le formalisme utilisé est bien accepté par les infographistes (même s'il est un peu déroutant pour les programmeurs C++ / Java), car proche de celui de HTML ;
    108    * ces balises pourraient être supportées par les éditeurs graphiques de sites Web.
     107 * le formalisme utilisé est bien accepté par les infographistes (même s'il est un peu déroutant pour les programmeurs C++ / Java), car proche de celui de HTML ;
     108 * ces balises pourraient être supportées par les éditeurs graphiques de sites Web.
    109109
    110110Côté du traitement, Struts décompose les requêtes entre la validation du formulaire et le traitement proprement dit.
     
    143143Liens
    144144
    145    * Struts :    http://struts.apache.org/
    146    * Apache :   http://apache.org/
    147    * Tomcat :    http://jakarta.apache.org/tomcat/
    148    * Servlet :   http://java.sun.com/products/servlet/index.jsp
    149    * JSP :      http://java.sun.com/products/jsp/
     145 * Struts :    http://struts.apache.org/
     146 * Apache :   http://apache.org/
     147 * Tomcat :    http://jakarta.apache.org/tomcat/
     148 * Servlet :   http://java.sun.com/products/servlet/index.jsp
     149 * JSP :      http://java.sun.com/products/jsp/