Java CGI HOWTO David H. Silber dhs@orbits.com. v0.4, 18 Novembre 1996. _________________________________________________________________ _Ce document vous explique comment convaincre votre serveur WWW d'utiliser des programmes de CGI écrits en Java, et montre l'emploi de Java dans l'écriture de programmes de CGI. Bien que les HOWTO se restreignent en principe au système Linux, celui-ci est indépendant de la version d'Unix utilisée. Traduction : Xavier Cazin, le 27 novembre 1997. _ _________________________________________________________________ 1. Introduction Par construction du language, les variables d'environnement du système ne sont pas facilement accessibles au programmeur Java. Par ailleurs, le JDK (Java Development Kit) rend impossible l'invocation directe d'un programme, ce qui ne facilite pas le traitement standard par CGI des formulaires HTML. On peut contourner ces limitations de plusieurs façons. Vous saurez comment j'ai implémenté l'une d'elles en poursuivant votre lecture. 1.1 Pré-requis Je considère que vous êtes familiarisé avec les principes qui sous-tendent HTML et CGI, et que vous possédez un minimum de connaissances de votre serveur HTTP. La programmation Java ne devra pas non plus vous être étrangère, à défaut de quoi ce qui va suivre ne vous sera pas très parlant. 1.2 Ce document http://www.orbits.com/software/Java_CGI.html est l'adresse où vous êtes sûr de trouver la dernière version de ce document. 1.3 Le package lui-même L'archive ftp://ftp.orbits.com/pub/software/java_cgi-0.4.tgz contient la dernière version du package décrit ici. Vous y trouverez également le source SGML de ce document (en anglais bien sûr). La distribution du package suit les recommandations de la LGPL (GNU Library General Public License). Ce document peut être distribué selon les termes gouvernant le copyright des Linux HOWTO. Merci de bien vouloir mentionner le document http://www.orbits.com/software/Java_CGI.html si vous utilisez ce logiciel. Vous permettrez ainsi à d'autres d'accéder aux classes Java CGI. 1.4 Publicité gratuite Ce document a été mis au point avec la bienveillance de _Stellar Orbits Technology Services_. Si vous voulez savoir ce que nous faisons, allez voir à http://www.orbits.com/. 2. Configuration de votre serveur (avec explications) Cette section vous conduira à travers l'installation de mon package _Java CGI_, et sera agrémentée d'explications généreuses qui vous permettront de mesurer les conséquences de vos actes. Si vous souhaitez simplement installer les programmes, sans vous soucier du pourquoi et du comment, sautez directement à la section Configuration du serveur (version courte). 2.1 Contraintes logicielles et matérielles Ce logiciel devrait fonctionner sur n'importe quel système à la Unix sur lequel se trouvent au moins installés le JDK et un serveur Web. J'utilise pour ma part un _Linux Debian_ sur lequel tourne le démon HTTP _apache_. Si cela ne fonctionne pas sur votre installation, n'hésitez pas à me contacter à dhs@orbits.com. Malheureusement, l'interpréteur Java n'est pas particulièrement économe en mémoire ; si vous devez utiliser souvent des programmes de CGI en Java, quelques mégaoctets de RAM supplémentaires ne seront pas de trop. 2.2 Java CGI Le logiciel que j'ai écrit s'appelle _Java CGI_ (Note: au cas où vous ne l'auriez pas encore remarqué (NdT)). Vous pouvez le récupérer par ftp anonyme à l'adresse ftp://www.orbits.com/pub/software/java_cgi-0.4.tgz. (Le numéro de version peut avoir changé.) 2.3 Déploiement des sources Choisissez un répertoire où vous pourrez tranquillement déployer l'archive du package. Je suggère généralement /usr/local/src. Désarchivez ensuite à l'aide de la commande (Note : les "lignuxeurs" préfèreront sans doute le plus élégant tar xzvf java_cgi-0.4.tgz (NdT).) : gzip -dc java_cgi-0.4.tgz | tar -xvf - Cela aura pour effet de créer un répertoire de nom java_cgi-0.4. Vous y trouverez les fichiers auxquels nous feront référence dans la suite. (Si le numéro de version a changé, suivez les instructions qui s'y trouvent à partir de maintenant). 2.4 Chemins locaux Vous allez devoir décider de l'endroit où vous souhaitez que les programmes Java CGI résident. La plupart du temps, vous aurez intérêt à les placer dans un répertoire parallèle au répertoire cgi-bin. La configuration de mon serveur _apache_ indiquait /var/web/cgi-bin comme répertoire cgi-bin par défaut. J'ai donc placé mes programmes Java CGI dans le répertoire /var/web/javacgi. Il n'est pas conseillé de placer ces programmes dans l'un des répertoires référencés par CLASSPATH. Éditez le Makefile pour refléter la configuration de votre système. En tant qu'utilisateur root, lancez make install. Cela aura pour effet de compiler vos programmes Java, modifier le script java.cgi pour qu'il s'adapte à votre système, et installer les programmes au bon endroit. Si vous souhaitez également disposer d'une version HTML de ce document, et d'un document test en HTML, lancez plutôt make all. 2.5 Test de votre installation Les documents javacgitest.html, javaemailtest.html et javahtmltest.html devraient maintenant être installés. Si vous avez choisi make all, ils se trouveront dans le répertoire spécifié par la variable WEBDIR du Makefile. Dans le cas contraire, vous pouvez lancer make test pour les créer à partir de javacgitest.html-dist, javaemailtest.html-dist et javahtmltest.html-dist. Après vous être assuré que votre installation s'était déroulée correctement, vous pouvez supprimer les fichiers CGI_Test.class, Email_Test.class et HTML_Test.class de votre répertoire JAVACGI, ainsi que javacgitest.html, javaemailtest.html et javahtmltest.html de votre répertoire WEBDIR. Ils montrent les informations utilisateurs auxquelles le serveur est normalement seul à avoir accès. 3. Configuration du serveur (version courte) * Récupérez le package _Java CGI_ à partir de ftp://www.orbits.com/pub/software/java_cgi-0.4.tgz. (Le numéro de version peut avoir changé.) * Déployez la distribution à l'aide de la commande gzip -dc java_cgi-0.4.tgz | tar -xvf - (Si le numéro de version de la distribution a changé, utilisez les instructions qui s'y trouvent à partir de maintenant.) * Éditez le Makefile que vous trouverez dans le nouveau répertoire java_cgi-0.4 pour qu'il reflète la configuration de votre système. * En tant que root, lancez make install. Cela aura pour effet de compiler les programmes Java, prendre en compte les informations propres à votre système, et installer les divers fichiers. Si vous souhaitez disposer d'une version HTML de ce document, ainsi que d'un document test en HTML, lancez plutôt make all. * Vous devriez maintenant être paré. 4. Exécution d'un programme Java CGI 4.1 Difficultés d'exécution de programmes Java avec le modèle CGI L'exécution d'un programme Java depuis un serveur Web pose deux types de problèmes majeurs : Les programmes Java ne s'exécutent pas comme des binaires ordinaires Il faut lancer l'interpréteur Java et fournir la classe principale (le programme à exécuter) sur la ligne de commande. Les formulaires HTML ne permettent pas d'envoyer directement une ligne de commande au serveur Web. Java n'accède pas _a priori_ aux variables d'environnement Toutes les variables d'environnement requises par le programme Java doivent lui être passées explicitement. Il n'existe pas de méthode similaire à la fonction getenv() de _C_ . 4.2 Solutions proposées Pour contourner ces obstacles, j'ai écrit une script shell de CGI, qui fournit les informations nécessaires à l'interpréteur Java. Le script java.cgi Ce script de shell se charge de l'interaction entre le démon HTTP et le programme Java CGI que vous souhaitez utiliser. Il extrait le nom du programme que vous souhaitez lancer à partir des données fournies par le serveur. Il récupère ensuite toutes les valeurs d'environnement dans un fichier temporaire. Enfin, il lance l'interpréteur Java en lui passant le nom du fichier contenant les informations d'environnement, ainsi que le nom du programme à exécuter. Le script java.cgi a été configuré et installé selon les procédure décrites à la section Decide On Your Local Path Policies. Invocation de java.cgi depuis un formulaire HTML Mes formulaires qui utilisent les programmes Java CGI spécifient l'action à effectuer de la façon suivante :