Introduction aux applications Web
Avant de démarrer dans les configurations et déploiements d’une application Web, commençons par faire un point sur ce qu’est une application Web et quelle est la place de ce type d’application dans les spécifications J2EE/JEE. Une application Web est une application qui utilise HTTP (Hyper Text Transport Protocol) comme couche de transport. Cela veut dire que le client d’une telle application est un navigateur et que l’application ellemême est sur le serveur. Le navigateur devient donc un client universel, présent sur toute plateforme, non spécialisé dans une application mais sachant interprété un langage de présentation, le HTML (HyperText Markup Language) et ses enrichissements : CSS, JavaScript. 1. Protocole HTTP Il est important de ne pas perdre de vue comment fonctionne le protocole HTTP pour bien mesurer les éventuels risques de sécurité et failles que pourrait présenter une application. Le navigateur va se connecter à une URL, qui correspond à une machine ayant une adresse IP sur le réseau Internet, ou un réseau interne. ● http://www.editions.eni.fr/ : permet d’atteindre l’application par défaut sur le serveur correspondant au domaine editions.eni.fr. Le serveur écoute par défaut, le port 80. ● http://localhost:8080/jmxconsole : permet d’atteindre l’application jmx-console sur la machine où est le navigateur. Le serveur écoute sur le port 8080, qui est précisé ici, car il n’est pas le port par défaut. Il est donc question d’application par défaut lorsqu’uniquement le domaine est précisé. Et au sein d’une application, il sera question de ressource par défaut. ● http://localhost:8080/secu : atteint la ressource par défaut de l’application. Cette ressource par défaut est souvent une page appelée index.html, index.jsp, default.html ou default.htm. Elle est aussi appelée page d’accueil et nous verrons comment la configurer. ● http://localhost:8080/secu/admin.jsp : atteint la ressource de type page JSP qui s’appelle admin.jsp. ● http://localhost:8080/secu/controleur : atteint la ressource de type servlet qui est associée à l’URL controleur. Il aurait pu s’agir aussi de la ressource par défaut du répertoire controleur de l’application secu, si aucune servlet n’était associée à l’URL. Lors de la demande de ressource, le navigateur émet une requête HTTP (request). Lors de l’envoi de la ressource, le serveur émet vers le navigateur une réponse HTTP (response). Il est important de voir que les messages HTTP, requête et réponse, sont constitués de :● un entête qui donne des renseignements au destinataire du message sur l’émetteur et la ressource demandée. Cette entête est textuelle, donc lisible très facilement. ● un corps de message qui peut être textuel si la réponse est du HTML, mais qui peut être binaire s’il s’agit d’une image par exemple. L’entête et le corps sont séparés par une ligne vide. Certains outils nous permettent de visualiser les entêtes des messages. Sous Firefox par exemple, vous pouvez utiliser le plugin « Live HTTP Headers ». Voici l’entête de la requête envoyée vers http://localhost:8080/jmxconsole. GET /jmx-console/ HTTP/1.1 Host: localhost:8080 User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fr; rv:1.9.0.1) Gecko/2008070208 Firefox/3.0.1 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Et voici l’entête de la réponse du serveur : HTTP/1.x 200 OK Server: Apache-Coyote/1.1 X-Powered-By: Servlet 2.4; JBoss-4.2.2.GA (build: SVNTag=JBoss_4_2_2_GA date=200710221139)/Tomcat-5.5 Set-Cookie: JSESSIONID=5F2D27F3BF97925CA22C0FCB521C290B; Path=/ Content-Type: text/html;charset=ISO-8859-1 Transfer-Encoding: chunked Date: Fri, 05 Sep 2008 06:53:43 GMT Une requête HTTP commence par une méthode HTTP. Dans l’exemple précédent, la requête du navigateur a utilisé la méthode HTTP GET. Attention, lorsque nous parlons de méthode HTTP, il ne s’agit nullement d’une méthode comme nous l’entendons dans le langage Java, mais d’une commande. Les méthodes HTTP spécifient le type de requête, donc quelle action doit être effectuée par le serveur : ● GET : la méthode HTTP la plus utilisée, demande une ressource au serveur et permet aussi d’envoyer un formulaire en mode GET. Le contenu du formulaire est alors ajouté à l’URL : http://localhost/login.jsp? nom=toto&id=1234.
Architecture Web pour J2EE/JEE
Sun définit dans les spécifications servlet 2.2 ce qu’est une application Web. C’est une collection de ressources : servlets, pages HTML, classes et autres pouvant être packagées et pouvant s’exécuter sur des conteneurs provenant de fournisseurs multiples. Les éléments d’une application Web sont : ● des servlets ; ● des pages JSP ; ● des ressources statiques : images, pages HTML, documents PDF… ; ● des applets ; ● des composants Java Bean ; ● des descripteurs de déploiement ; ● des classes utilitaires Java. L’ensemble de toutes ces ressources sont packagées dans une archive de type jar, dont l’extension est war. Cette archive sera placée dans le répertoire de déploiement des conteneurs pour être automatiquement déployée. La structure d’une archive war est la suivante : Cette archive est prise en compte sur tous les conteneurs servlet/JSP. Il arrive que lors de la migration de l’archive d’un système d’exploitation à un autre le répertoire WEBINF passe en minuscule. Ainsi, les fichiers de déploiement ne sont plus pris en compte par le conteneur. Nous avons eu ce problème avec des transferts d’archive entre Ubuntu et RedHat. Il faut alors ouvrir l’archive et corriger l’erreur.
Configuration du conteneur Web
Le service de déploiement Web est un service JBoss qui est déployé dans le répertoire deploy de votre configuration serveur. Le répertoire jbossweb.deployer contient l’ensemble des librairies et des fichiers de configuration de base. Le service est visible dans la console JMX, via http://localhost:8080/jmxconsole. Il est identifié par JBossWeb/2.0.1.GA qui est un sousprojet JBoss contenant la version 5.5 de Tomcat : Le contenu du répertoire jbossweb.deployer est le suivant : ● répertoire conf contenant un fichier web.xml de base pour les applications Web. Ce fichier contient, entre autres, la liste des types MIME. ● répertoire jsflibs contenant les librairies pour les composants JSF (Java Server Face). ● répertoire METAINF contenant : ● le fichier jbossservice.xml qui configure le service WebServer ; ● le fichier webservermbean.xml qui configure le déploiement des archives war. ● le répertoire ROOT.war qui est une archive décompressée, correspondant à la page d’accueil de JBoss : l’application web par défaut, accessible par http://localhost:8080/ ● des librairies jar nécessaires au fonctionnement du service et la prise en charge des JSTL (Java Standard TagLib). ● le fichier server.xml qui configure le service. Ce fichier contient les configurations des connecteurs d’écoute : port 8080, port sécurisé 8443. ● le fichier context.xml de base pour chaque application Web. Ce fichier contient la prise en compte ou non de la sérialisation des sessions et un écouteur (listener) JBoss pour le cycle de vie des servlets. Il peut être important, pour la mise en place de certains projets, de connaître la version de Tomcat utilisée. Voici un tableau récapitulatif des versions de spécification, par rapport aux versions de Tomcat.