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 ecrits en Java, et montre l'emploi de Java dans l'ecriture de programmes de CGI. Bien que les HOWTO se restreignent en principe au systeme Linux, celui-ci est independant de la version d'Unix utilisee. _T_r_a_d_u_c_t_i_o_n _: _X_a_v_i_e_r _C_a_z_i_n_, _l_e _2_7 _n_o_v_e_m_b_r_e _1_9_9_7. 11.. IInnttrroodduuccttiioonn Par construction du language, les variables d'environnement du systeme 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 facons. Vous saurez comment j'ai implemente l'une d'elles en poursuivant votre lecture. 11..11.. PPrree--rreeqquuiiss Je considere que vous etes familiarise avec les principes qui sous- tendent HTML et CGI, et que vous possedez un minimum de connaissances de votre serveur HTTP. La programmation Java ne devra pas non plus vous etre etrangere, a defaut de quoi ce qui va suivre ne vous sera pas tres parlant. 11..22.. CCee ddooccuummeenntt http://www.orbits.com/software/Java_CGI.html est l'adresse ou vous etes sur de trouver la derniere version de ce document. 11..33.. LLee ppaacckkaaggee lluuii--mmeemmee L'archive ftp://ftp.orbits.com/pub/software/java_cgi-0.4.tgz contient la derniere version du package decrit ici. Vous y trouverez egalement le source SGML de ce document (en anglais bien sur). La distribution du package suit les recommandations de la LGPL (GNU Library General Public License). Ce document peut etre distribue 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 a d'autres d'acceder aux classes Java CGI. 11..44.. PPuubblliicciittee ggrraattuuiittee Ce document a ete mis au point avec la bienveillance de SStteellllaarr OOrrbbiittss TTeecchhnnoollooggyy SSeerrvviicceess. Si vous voulez savoir ce que nous faisons, allez voir a http://www.orbits.com/. 22.. CCoonnffiigguurraattiioonn ddee vvoottrree sseerrvveeuurr ((aavveecc eexxpplliiccaattiioonnss)) Cette section vous conduira a travers l'installation de mon package _J_a_v_a _C_G_I, et sera agrementee d'explications genereuses qui vous permettront de mesurer les consequences de vos actes. Si vous souhaitez simplement installer les programmes, sans vous soucier du pourquoi et du comment, sautez directement a la section ``Configuration du serveur (version courte)''. 22..11.. CCoonnttrraaiinntteess llooggiicciieelllleess eett mmaatteerriieelllleess Ce logiciel devrait fonctionner sur n'importe quel systeme a la Unix sur lequel se trouvent au moins installes le JDK et un serveur Web. J'utilise pour ma part un _L_i_n_u_x _D_e_b_i_a_n sur lequel tourne le demon HTTP _a_p_a_c_h_e. Si cela ne fonctionne pas sur votre installation, n'hesitez pas a me contacter a dhs@orbits.com. Malheureusement, l'interpreteur Java n'est pas particulierement econome en memoire ; si vous devez utiliser souvent des programmes de CGI en Java, quelques megaoctets de RAM supplementaires ne seront pas de trop. 22..22.. JJaavvaa CCGGII Le logiciel que j'ai ecrit s'appelle _J_a_v_a _C_G_I (Note: au cas ou vous ne l'auriez pas encore remarque (NdT)). Vous pouvez le recuperer par ftp anonyme a l'adresse ftp://www.orbits.com/pub/software/java_cgi-0.4.tgz. (Le numero de version peut avoir change.) 22..33.. DDeeppllooiieemmeenntt ddeess ssoouurrcceess Choisissez un repertoire ou vous pourrez tranquillement deployer l'archive du package. Je suggere generalement /usr/local/src. Desarchivez ensuite a l'aide de la commande (Note : les "lignuxeurs" prefereront sans doute le plus elegant tar xzvf java_cgi-0.4.tgz (NdT).) : gzip -dc java_cgi-0.4.tgz | tar -xvf - Cela aura pour effet de creer un repertoire de nom java_cgi-0.4. Vous y trouverez les fichiers auxquels nous feront reference dans la suite. (Si le numero de version a change, suivez les instructions qui s'y trouvent a partir de maintenant). 22..44.. CChheemmiinnss llooccaauuxx Vous allez devoir decider de l'endroit ou vous souhaitez que les programmes Java CGI resident. La plupart du temps, vous aurez interet a les placer dans un repertoire parallele au repertoire cgi-bin. La configuration de mon serveur _a_p_a_c_h_e indiquait /var/web/cgi-bin comme repertoire cgi-bin par defaut. J'ai donc place mes programmes Java CGI dans le repertoire /var/web/javacgi. Il n'est pas conseille de placer ces programmes dans l'un des repertoires references par CLASSPATH. Editez le Makefile pour refleter la configuration de votre systeme. 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 a votre systeme, et installer les programmes au bon endroit. Si vous souhaitez egalement disposer d'une version HTML de ce document, et d'un document test en HTML, lancez plutot make all. 22..55.. TTeesstt ddee vvoottrree iinnssttaallllaattiioonn Les documents javacgitest.html, javaemailtest.html et javahtmltest.html devraient maintenant etre installes. Si vous avez choisi make all, ils se trouveront dans le repertoire specifie par la variable WEBDIR du Makefile. Dans le cas contraire, vous pouvez lancer make test pour les creer a partir de javacgitest.html-dist, javaemailtest.html-dist et javahtmltest.html-dist. Apres vous etre assure que votre installation s'etait deroulee correctement, vous pouvez supprimer les fichiers CGI_Test.class, Email_Test.class et HTML_Test.class de votre repertoire JAVACGI, ainsi que javacgitest.html, javaemailtest.html et javahtmltest.html de votre repertoire WEBDIR. Ils montrent les informations utilisateurs auxquelles le serveur est normalement seul a avoir acces. 33.. CCoonnffiigguurraattiioonn dduu sseerrvveeuurr ((vveerrssiioonn ccoouurrttee)) +o Recuperez le package _J_a_v_a _C_G_I a partir de ftp://www.orbits.com/pub/software/java_cgi-0.4.tgz. (Le numero de version peut avoir change.) +o Deployez la distribution a l'aide de la commande gzip -dc java_cgi-0.4.tgz | tar -xvf - (Si le numero de version de la distribution a change, utilisez les instructions qui s'y trouvent a partir de maintenant.) +o Editez le Makefile que vous trouverez dans le nouveau repertoire java_cgi-0.4 pour qu'il reflete la configuration de votre systeme. +o En tant que root, lancez make install. Cela aura pour effet de compiler les programmes Java, prendre en compte les informations propres a votre systeme, 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 plutot make all. +o Vous devriez maintenant etre pare. 44.. EExxeeccuuttiioonn dd''uunn pprrooggrraammmmee JJaavvaa CCGGII 44..11.. DDiiffffiiccuulltteess dd''eexxeeccuuttiioonn ddee pprrooggrraammmmeess JJaavvaa aavveecc llee mmooddeellee CCGGII L'execution d'un programme Java depuis un serveur Web pose deux types de problemes majeurs : 44..11..11.. LLeess pprrooggrraammmmeess JJaavvaa nnee ss''eexxeeccuutteenntt ppaass ccoommmmee ddeess bbiinnaaiirreess oorrddiinnaaiirreess Il faut lancer l'interpreteur Java et fournir la classe principale (le programme a executer) sur la ligne de commande. Les formulaires HTML ne permettent pas d'envoyer directement une ligne de commande au serveur Web. 44..11..22.. JJaavvaa nn''aacccceeddee ppaass _a _p_r_i_o_r_i aauuxx vvaarriiaabblleess dd''eennvviirroonnnneemmeenntt Toutes les variables d'environnement requises par le programme Java doivent lui etre passees explicitement. Il n'existe pas de methode similaire a la fonction getenv() de CC . 44..22.. SSoolluuttiioonnss pprrooppoosseeeess Pour contourner ces obstacles, j'ai ecrit une script shell de CGI, qui fournit les informations necessaires a l'interpreteur Java. 44..22..11.. LLee ssccrriipptt jjaavvaa..ccggii Ce script de shell se charge de l'interaction entre le demon HTTP et le programme Java CGI que vous souhaitez utiliser. Il extrait le nom du programme que vous souhaitez lancer a partir des donnees fournies par le serveur. Il recupere ensuite toutes les valeurs d'environnement dans un fichier temporaire. Enfin, il lance l'interpreteur Java en lui passant le nom du fichier contenant les informations d'environnement, ainsi que le nom du programme a executer. Le script java.cgi a ete configure et installe selon les procedure decrites a la section ``Decide On Your Local Path Policies''. 44..22..22.. IInnvvooccaattiioonn ddee jjaavvaa..ccggii ddeeppuuiiss uunn ffoorrmmuullaaiirree HHTTMMLL Mes formulaires qui utilisent les programmes Java CGI specifient l'action a effectuer de la facon suivante :