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 :
/cgi-bin/ est votre repertoire local d'executables CGI, java.cgi est l'interface permettant de lancer les programmes Java, et CGI_Test est un exemple de programme Java a executer. 55.. UUttiilliissaattiioonn ddeess ccllaasssseess JJaavvaa CCGGII Trois classes principales sont pour l'instant supportees : ``CGI'', ``Email'' et ``HTML''. Je pense y ajouter des classes capables de gerer des entrees et des sorties formatees en MIME (respectivement MIMEin & MIMEout). Quelques classes de test et de support sont egalement disponibles : ``CGI_Test'', ``Email_Test'' et ``HTML_Test'' doivent permettre de tester votre installation. Elles peuvent aussi servir de point de depart a vos propres programmes Java bases sur cette bibliotheque de classes. La classe ``Text'' est une superclasse des classes Email et HTML. 55..11.. CCGGII 55..11..11.. SSyynnttaaxxee public class CGI 55..11..22.. DDeessccrriippttiioonn La classe CGI detient les "informations SGI" : les valeurs d'environnement initialisees par le serveur Web ainsi que le nom et la valeur issus du formulaire quand l'action ssuubbmmiitt est selectionnee. Toutes les informations sont stockees dans un objet de classe Properties. Cette classe se trouve dans le package "Orbits.net". 55..11..33.. LLiissttee ddeess mmeemmbbrreess ______________________________________________________________________ CGI() // Constructeur. getNames() // Recupere la liste de noms. getValue() // Recupere la valeur a partir du nom. ______________________________________________________________________ 55..11..44.. VVooiirr aauussssii CGI_Test. 55..11..55.. CCGGII(()) FFiinnaalliittee Construit un objet contenant les donnees CGI disponibles. SSyynnttaaxxee public CGI() DDeessccrriippttiioonn Lorsqu'un objet CGI est construit, toutes les informations CGI disponibles sont recuperees et stockees dans le nouvel objet. 55..11..66.. ggeettNNaammeess(()) FFiinnaalliittee Dresse la liste des noms definis par le formulaire. SSyynnttaaxxee public Enumeration getNames () DDeessccrriippttiioonn Fournit la liste complete des noms pour lesquels des valeurs correspondantes ont ete definies. RReettoouurrnnee Une Enumeration de tous les noms definis. 55..11..77.. ggeettVVaalluuee(()) FFiinnaalliittee Recupere la vvaalleeuurr associee au nnoomm specifie. SSyynnttaaxxee public String getValue ( String nom ) DDeessccrriippttiioonn Cette methode fournit la correspondance entre les noms et les valeurs envoyees depuis un formulaire HTML. PPaarraammeettrree nnoomm La cle par laquelle les valeurs sont choisies. RReettoouurrnnee Une String contenant la valeur. 55..22.. CCGGII__TTeesstt Cette classe fournit a la fois un exemple d'utilisation de la classe CGI, et un programme de test, qu'on pourra utiliser pour confirmer que le package _J_a_v_a _C_G_I fonctionne correctement. 55..22..11.. LLiissttee ddeess mmeemmbbrreess ______________________________________________________________________ main() // main() du programme ______________________________________________________________________ 55..22..22.. VVooiirr aauussssii CGI. 55..22..33.. mmaaiinn(()) FFiinnaalliittee Fournit une methode main(). SSyynnttaaxxee public static void main( String argv[] ) DDeessccrriippttiioonn Il s'agit du point d'entree d'un programme CGI qui ne fait rien a part retourner la liste des couples nom/valeur. PPaarraammeettrree " aarrggvv Arguments passes au programme par le script java.cgi. Non utilise pour l'instant. 55..33.. EEmmaaiill 55..33..11.. SSyynnttaaxxee public class Email extends Text 55..33..22.. DDeessccrriippttiioonn Les messages sont construits au moyen des methodes add*() de la classe Text et les methodes specifiques au courrier electronique fournies par cette classe. Une fois compose, le message est envoye vers sa destination finale. Cette classe se trouve dans le package "Orbits.net". 55..33..33.. LLiissttee ddeess mmeemmbbrreess ______________________________________________________________________ Email() // Constructeur send() // Envoie le message e-mail sendTo() // Ajoute une destination au message subject() // Initialise le champ Subject: du message ______________________________________________________________________ 55..33..44.. VVooiirr aauussssii Email_Test, Text. 55..33..55.. EEmmaaiill(()) FFiinnaalliittee Construit un objet qui contiendra un message electronique. SSyynnttaaxxee public Email() DDeessccrriippttiioonn Cree un message vide qui sera rempli par les methodes Email. VVooiirr aauussssii Text. 55..33..66.. sseenndd(()) FFiinnaalliittee Envoie le message e-mail. SSyynnttaaxxee public void send () DDeessccrriippttiioonn Formatage et envoi du message. Si aucune adresse de destination n'a ete precisee, ne fait rien. 55..33..77.. sseennddTToo(()) FFiinnaalliittee Ajoute une destination pour ce message. SSyynnttaaxxee public String sendTo ( String adresse ) DDeessccrriippttiioonn Ajoute adresse a la liste des destinations pour cette methode. Il n'existe pas de limite _a _p_r_i_o_r_i pour le nombre de destinations d'un message e-mail. Je suis sur qu'avec une liste assez grande, on peut depasser la taille acceptable pour le _M_a_i_l _T_r_a_n_s_p_o_r_t _A_g_e_n_t, voire la memoire disponible sur votre systeme. PPaarraammeettrree aaddrreessssee Une destination a laquelle envoyer ce message. 55..33..88.. ssuubbjjeecctt(()) FFiinnaalliittee Initialise le sujet du message. SSyynnttaaxxee public void subject ( String sujet ) DDeessccrriippttiioonn Cette methode remplit le champ Subject: du message. Si elle est appelee plusieurs fois, le sujet utilise sera le dernier demande. PPaarraammeettrree ssuujjeett Le texte du champ Subject: du message. 55..44.. EEmmaaiill__TTeesstt Cette classe fournit a la fois un exemple d'utilisation de la classe Email et un programme de test qu'on pourra utiliser pour s'assurer que le package _J_a_v_a _C_G_I fonctionne correctement. 55..44..11.. LLiissttee ddeess mmeemmbbrreess ______________________________________________________________________ main() // main() du programme ______________________________________________________________________ 55..44..22.. VVooiirr aauussssii Email. 55..44..33.. mmaaiinn(()) FFiinnaalliittee Fournit une methode main(). SSyynnttaaxxee public static void main( String argv[] ) DDeessccrriippttiioonn Il s'agit du point d'entree d'un programme CGI qui retourne une liste des couples nom/valeur disponibles. Cette liste sera egalement envoyee a l'adresse specifiee dans la variable Email. PPaarraammeettrree aarrggvv Arguments passes au programme par le script java.cgi. Non utilise pour l'instant. 55..55.. HHTTMMLL 55..55..11.. SSyynnttaaxxee public class HTML extends Text 55..55..22.. DDeessccrriippttiioonn Les messages sont crees a l'aide des methodes add*() de la classe Text et des methodes specifique au HTML ajoutees par cette classe. Une fois termine, le message est envoye. Aucun test n'est effectue pour l'instant pour s'asurer que les methodes de construction de liste sont utilisees dans le bon ordre. C'est donc au programmeur de faire attention a ne pas violer la syntaxe HTML. Cette classe se trouve dans le package "Orbits.net". 55..55..33.. LLiissttee ddeess mmeemmbbrreess ______________________________________________________________________ HTML() // Constructeur. author() // Initialise le nom de l'auteur du document. definitionList() // Cree une liste de definitions. definitionListTerm() // Ajoute un terme a la liste de definitions. endList() // Termine une liste. listItem() // Ajoute une entree a une liste. send() // Envoie le message HTML. title() // Initialise le titre du document. ______________________________________________________________________ 55..55..44.. VVooiirr aauussssii HTML_Test, Text. 55..55..55.. HHTTMMLL(()) FFiinnaalliittee Construit un objet qui contiendra un message HTML. SSyynnttaaxxee public HTML() DDeessccrriippttiioonn Cree un message vide qui sera rempli par les methodes HTML. VVooiirr aauussssii Text. 55..55..66.. aauutthhoorr(()) FFiinnaalliittee Initialise le nom de l'auteur du document. SSyynnttaaxxee public void author ( String auteur ) DDeessccrriippttiioonn Donne au document un nom d'auteur ayant pour valeur author. PPaarraammeettrree aauutteeuurr Texte a utiliser en tant que nom d'auteur du message. VVooiirr aauussssii title(). 55..55..77.. ddeeffiinniittiioonnLLiisstt(()) FFiinnaalliittee Cree une liste de definitions. SSyynnttaaxxee public void definitionList () DDeessccrriippttiioonn Initialise une liste de definition. Une _l_i_s_t_e _d_e _d_e_f_i_n_i_t_i_o_n_s est une liste specialisee telle que chaque entree de la liste soit un _t_e_r_m_e suivi du _t_e_x_t_e correspondant a la definition de ce terme. La creation d'une liste de definitions doit etre suivie par celle d'au moins un couple terme/texte, et d'un appel a la methode endList(). _N_o_t_o_n_s _q_u_e_, _p_o_u_r _l_e _m_o_m_e_n_t_, _l_e_s _l_i_s_t_e_s _n_e _p_e_u_v_e_n_t _p_a_s _e_t_r_e _i_m_b_r_i_q_u_e_e_s_. VVooiirr aauussssii definitionListTerm(), endList(), listItem(). 55..55..88.. ddeeffiinniittiioonnLLiissttTTeerrmm(()) FFiinnaalliittee Ajoute un terme a la liste de definitions. SSyynnttaaxxee public void definitionListTerm () DDeessccrriippttiioonn Ajoute un terme a la liste de definitions. Le texte definissant le partie terme de l'entree courante de la liste devra etre insere dans le message apres l'appel de cette methode, et avant qu'une methode listItem correspondante soit appelee. VVooiirr aauussssii definitionList(), listItem(). 55..55..99.. eennddLLiisstt(()) FFiinnaalliittee Termine une liste. SSyynnttaaxxee public void endList () DDeessccrriippttiioonn Cette methode permet de clore une liste. _N_o_t_o_n_s _q_u_e_, _p_o_u_r _l_e _m_o_m_e_n_t_, _l_e_s _l_i_s_t_e_s _n_e _p_e_u_v_e_n_t _p_a_s _e_t_r_e _i_m_b_r_i_q_u_e_e_s_. VVooiirr aauussssii definitionList(). 55..55..1100.. lliissttIItteemm(()) FFiinnaalliittee Ajoute une entree a une liste. SSyynnttaaxxee public void listItem () public void listItem ( String article ) public boolean listItem ( String terme, String article ) DDeessccrriippttiioonn Ajoute une entree a une liste. Si la premiere forme est utilisee, le texte de l'article de liste courant devra etre ajoute au message apres l'appel de cette methode, et avant tout autre appel a des methodes de liste. Dans la deuxieme et troisieme forme, le texte article est passe comme parametre a la methode, au lieu (ou en plus) d'etre ajoute au message. La troisieme forme est specifique aux listes de definitions et fournit a la fois le terme et la definition de l'entree de liste. PPaarraammeettrreess aarrttiiccllee Le texte de cette entree de liste de definitions. tteerrmmee Le texte de la partie terme de cette entree de liste de definitions. VVooiirr aauussssii definitionList(), definitionListTerm(), endList(). 55..55..1111.. sseenndd(()) FFiinnaalliittee Envoie le message HTML. SSyynnttaaxxee public void send () DDeessccrriippttiioonn Envoie le message HTML. 55..55..1122.. ttiittllee(()) FFiinnaalliittee Donne une valeur au titre du document. SSyynnttaaxxee public void title ( String titre ) DDeessccrriippttiioonn Initialise le texte du titre du document. PPaarraammeettrree ttiittrree Le texte du titre de ce message. VVooiirr aauussssii author(). 55..66.. HHTTMMLL__TTeesstt Cette classe offre a la fois un exemple d'utilisation de la classe HTML et un programme de test qui peu servir a s'assurer que le package _J_a_v_a _C_G_I fonctionne correctement. 55..66..11.. LLiissttee ddeess mmeemmbbrreess ______________________________________________________________________ main() // main() du programme. ______________________________________________________________________ 55..66..22.. VVooiirr aauussssii HTML. 55..66..33.. mmaaiinn(()) FFiinnaalliittee Fournit une methode main(). SSyynnttaaxxee public static void main( String argv[] ) DDeessccrriippttiioonn Il s'agit du point d'entree pour un programme CGI qui retourne une liste des couples nom/valeur d'un document HTML, chaque couple etant un element d'une liste de definitions. PPaarraammeettrree aarrggvv Arguments passes au programme par le script java.cgi Non utilise pour l'instant. 55..77.. TTeexxtt 55..77..11.. SSyynnttaaxxee public abstract class Text 55..77..22.. DDeessccrriippttiioonn Cette classe est la superclasse des classes Email et HTML. Les messages sont construits a l'aide des methodes de cette classe, puis completes et formates grace aux methodes des sous-classes. Cette classe se trouve dans le package "Orbits.text". 55..77..33.. LLiissttee ddeess mmeemmbbrreess ______________________________________________________________________ Text() // Constructeur. add() // Ajoute du texte a cet objet. addLineBreak() // Ajoute une rupture de ligne. addParagraph() // Ajoute une rupture de paragraphe. ______________________________________________________________________ 55..77..44.. VVooiirr aauussssii Email, HTML. 55..77..55.. aadddd(()) FFiinnaalliittee Ajoute du texte a cet article SSyynnttaaxxee public void add ( char ajout ) public void add ( String ajout ) public void add ( StringBuffer ajout ) DDeessccrriippttiioonn Ajoute le texte ajout a la suite du contenu de cet article. PPaarraammeettrree aajjoouutt Texte a ajouter. VVooiirr aauussssii addLineBreak(), addParagraph(). 55..77..66.. aaddddLLiinneeBBrreeaakk(()) FFiinnaalliittee Force une rupture de ligne a cet endroit dans le texte. SSyynnttaaxxee public void addLineBreak () DDeessccrriippttiioonn Insere une rupture de ligne dans le texte, a l'endroit du point courant. VVooiirr aauussssii add(), addParagraph(). 55..77..77.. aaddddPPaarraaggrraapphh(()) FFiinnaalliittee Debute un nouveau paragraphe. SSyynnttaaxxee public void add () DDeessccrriippttiioonn Debute un nouveau paragraphe a ce point du flot textuel. VVooiirr aauussssii add(), addLineBreak(). 66.. AAmmeelliioorraattiioonnss pprreevvuueess +o Ajouter a la classe Email : EEmmaaiill(( iinntt ccaappaacciittee )) Quand on connait a l'avance l'espace a alloue au message. sseennddTToo(( SSttrriinngg aaddrreessssee )) Ajoute une liste de destinations principales (champ To:) au message e-mail. sseennddCCcc(( SSttrriinngg aaddrreessssee )) Ajoute une destination au champ Cc: (Carbon-Copy) du message e- mail. sseennddCCcc(( SSttrriinngg aaddddrreessss )) Ajoute une liste de destinations au champ Cc: (Carbon-Copy) du message e-mail. sseennddBBcccc(( SSttrriinngg aaddrreessssee )) Ajoute une destination au champ Bcc: (Blind Carbon-Copy) du message e-mail. sseennddBBcccc(( SSttrriinngg aaddrreessssee )) Ajoute une liste de destinations au champ Bcc: (Blind Carbon- Copy) du message e-mail. +o Ajouter a la classe HTML : HHTTMMLL(( iinntt ccaappaacciittee )) Quand on connait a l'avance l'espace a alloue au message. ppuubblliicc vvooiidd uunnoorrddeerreeddLLiisstt(()) Demarre une liste non ordonnee. ppuubblliicc vvooiidd oorrddeerreeddLLiisstt(()) Demarre une liste ordonnee. ppuubblliicc vvooiidd ddiirreeccttoorryyLLiisstt(()) Demarre une liste de repertoires. ppuubblliicc vvooiidd mmeennuuLLiisstt(()) Demarre une liste de menu. vvooiidd aanncchhoorr(( SSttrriinngg aanncchhoorrNNaammee )) Specifie une ancre. vvooiidd lliinnkk(( SSttrriinngg uurrll,, SSttrriinngg tteexxtt )) Specifie un lien. vvooiidd aapppplleett(( SSttrriinngg uurrll,, SSttrriinngg aallttTTeexxtt )) Specifie un lien applet. +o Autoriser l'imbrication des listes HTML. +o Ajouter du code de gestion d'erreur pour s'assurer que le formatage des listes HTML s'effectue dans le bon ordre. +o L'emplacement du fichier des informations d'environnement devra etre configurable a partir du Makefile. +o Eliminer les couples nom/valeur vides qui apparaissent dans la liste quand la methode GET est utilisee pour le transfert des donnees. +o Reflechir a un moyen d'implementer l'interface java.util.Enumeration avec CGI pour fournir des noms de variables. +o Ajouter une classe Test, qui permettrait d'utiliser toutes les methodes de ce package. +o Documenter la maniere dont CGI_Test, Email_Test et HTML_Test se referent mutuellement pour fournir des tests incrementaux facilitant le debogage. +o Documenter la maniere dont Test se sert de toutes les fonctionnalites presentes dans le package. 77.. MMooddiiffiiccaattiioonnss 77..11.. MMooddiiffiiccaattiioonnss eennttrree lleess vveerrssiioonnss 00..33 eett 00..44 +o Developpement de la classe HTML pour qu'elle fournisse des fonctionnalites minimales. +o Ecriture de la classe HTML_Test et de javahtmltest.html-dist. +o Ajout des methodes HTML gerant les listes de definitions. 77..22.. MMooddiiffiiccaattiioonnss eennttrree lleess vveerrssiioonnss 00..22 eett 00..33 +o Ajout des classes Text et Email. HTML a ete egalement ajoute, sans qu'il soit vraiment utilisable. +o Placement des diverses classes dans des packages. Les classes principales se trouvent dans Orbits.net.*, la classe de support Text se trouve dans Orbits.text.Text. +o CGItest devient CGI_Test. +o Ajout de la classe Email_Test. 77..33.. MMooddiiffiiccaattiioonnss eennttrree lleess vveerrssiioonnss 00..11 eett 00..22 +o Les variables d'environnement sont placees dans un fichier temporaire, au lieu d'etre passees a l'interpreteur Java sur la ligne de commande. La classe CGI et le script java.cgi durent etre modifies. +o Le document javacgitest.html devient partie integrante de la distribution. +o Les fichiers texte qui sont modifies par make lors de l'installation sont fournis avec des noms termines par _-_d_i_s_t. .