Java CGI HOWTO
 David H. Silber [email protected].
 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 [email protected].

 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 :

  <form action="/cgi-bin/java.cgi/CGI_Test" method="POST">

 /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.