  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.

  11..

  IInnttrroodduuccttiioonn

  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.

  11..11..

  PPrree--rreeqquuiiss

  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.

  11..22..

  CCee ddooccuummeenntt

  http://www.orbits.com/software/Java_CGI.html  est  l'adresse  ou  vous
  etes sur de trouver la derniere version de ce document.

  11..33..

  LLee ppaacckkaaggee lluuii--mmeemmee

  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.

  11..44..

  PPuubblliicciittee ggrraattuuiittee

  Ce document a ete mis au point avec la bienveillance de SStteellllaarr OOrrbbiittss
  TTeecchhnnoollooggyy  SSeerrvviicceess. Si vous voulez savoir ce que nous faisons, allez
  voir a http://www.orbits.com/.

  22..

  CCoonnffiigguurraattiioonn ddee vvoottrree sseerrvveeuurr ((aavveecc eexxpplliiccaattiioonnss))

  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)''.

  22..11..

  CCoonnttrraaiinntteess llooggiicciieelllleess eett mmaatteerriieelllleess

  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.

  22..22..

  JJaavvaa CCGGII

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

  22..33..

  DDeeppllooiieemmeenntt ddeess ssoouurrcceess

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

  22..44..

  CChheemmiinnss llooccaauuxx

  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.

  22..55..

  TTeesstt ddee vvoottrree iinnssttaallllaattiioonn

  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.

  33..

  CCoonnffiigguurraattiioonn dduu sseerrvveeuurr ((vveerrssiioonn ccoouurrttee))

  +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.

  44..

  EExxeeccuuttiioonn dd''uunn pprrooggrraammmmee JJaavvaa CCGGII

  44..11..

  DDiiffffiiccuulltteess dd''eexxeeccuuttiioonn ddee pprrooggrraammmmeess JJaavvaa aavveecc llee mmooddeellee CCGGII

  L'execution d'un programme Java depuis un serveur Web pose deux  types
  de problemes majeurs :

  44..11..11..

  LLeess pprrooggrraammmmeess JJaavvaa nnee ss''eexxeeccuutteenntt ppaass ccoommmmee ddeess bbiinnaaiirreess oorrddiinnaaiirreess

  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.

  44..11..22..

  JJaavvaa nn''aacccceeddee ppaass _a _p_r_i_o_r_i aauuxx vvaarriiaabblleess dd''eennvviirroonnnneemmeenntt

  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 CC .

  44..22..

  SSoolluuttiioonnss pprrooppoosseeeess

  Pour contourner ces obstacles, j'ai ecrit une script shell de CGI, qui
  fournit les informations necessaires a l'interpreteur Java.

  44..22..11..

  LLee ssccrriipptt jjaavvaa..ccggii

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

  44..22..22..

  IInnvvooccaattiioonn ddee jjaavvaa..ccggii ddeeppuuiiss uunn ffoorrmmuullaaiirree HHTTMMLL

  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.

  55..

  UUttiilliissaattiioonn ddeess ccllaasssseess JJaavvaa CCGGII

  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.

  55..11..

  CCGGII

  55..11..11..

  SSyynnttaaxxee

  public class CGI

  55..11..22..

  DDeessccrriippttiioonn

  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 ssuubbmmiitt est selectionnee.
  Toutes  les  informations  sont  stockees  dans  un  objet  de  classe
  Properties.

  Cette classe se trouve dans le package "Orbits.net".

  55..11..33..

  LLiissttee ddeess mmeemmbbrreess

  ______________________________________________________________________
         CGI()         //  Constructeur.
         getNames()    //  Recupere la liste de noms.
         getValue()    //  Recupere la valeur a partir du nom.

  ______________________________________________________________________

  55..11..44..

  VVooiirr aauussssii

  CGI_Test.

  55..11..55..

  CCGGII(())

     FFiinnaalliittee
        Construit un objet contenant les donnees CGI disponibles.

     SSyynnttaaxxee
        public CGI()

     DDeessccrriippttiioonn
        Lorsqu'un  objet  CGI est construit, toutes les informations CGI
        disponibles sont recuperees et stockees dans le nouvel objet.

  55..11..66..

  ggeettNNaammeess(())

     FFiinnaalliittee
        Dresse la liste des noms definis par le formulaire.

     SSyynnttaaxxee
        public Enumeration getNames ()

     DDeessccrriippttiioonn
        Fournit la liste complete des noms  pour  lesquels  des  valeurs
        correspondantes ont ete definies.

     RReettoouurrnnee
        Une Enumeration de tous les noms definis.

  55..11..77..

  ggeettVVaalluuee(())

     FFiinnaalliittee
        Recupere la vvaalleeuurr associee au nnoomm specifie.

     SSyynnttaaxxee
        public String getValue ( String nom )

     DDeessccrriippttiioonn
        Cette  methode  fournit  la correspondance entre les noms et les
        valeurs envoyees depuis un formulaire HTML.

     PPaarraammeettrree

        nnoomm
           La cle par laquelle les valeurs sont choisies.

     RReettoouurrnnee
        Une String contenant la valeur.

  55..22..

  CCGGII__TTeesstt

  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.
  55..22..11..

  LLiissttee ddeess mmeemmbbrreess

  ______________________________________________________________________
         main()      //   main() du programme

  ______________________________________________________________________

  55..22..22..

  VVooiirr aauussssii

  CGI.

  55..22..33..

  mmaaiinn(())

     FFiinnaalliittee
        Fournit une methode main().

     SSyynnttaaxxee
        public static void main( String argv[] )

     DDeessccrriippttiioonn
        Il s'agit du point d'entree d'un programme CGI qui ne fait  rien
        a part retourner la liste des couples nom/valeur.

     PPaarraammeettrree
        "

        aarrggvv
           Arguments  passes  au  programme par le script java.cgi.  Non
           utilise pour l'instant.

  55..33..

  EEmmaaiill

  55..33..11..

  SSyynnttaaxxee

  public class Email extends Text

  55..33..22..

  DDeessccrriippttiioonn

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

  55..33..33..

  LLiissttee ddeess mmeemmbbrreess

  ______________________________________________________________________
         Email()      //  Constructeur
         send()       //  Envoie le message e-mail
         sendTo()     //  Ajoute une destination au message
         subject()    //  Initialise le champ Subject: du message

  ______________________________________________________________________

  55..33..44..

  VVooiirr aauussssii

  Email_Test, Text.

  55..33..55..

  EEmmaaiill(())

     FFiinnaalliittee
        Construit un objet qui contiendra un message electronique.

     SSyynnttaaxxee
        public Email()

     DDeessccrriippttiioonn
        Cree un message vide qui sera rempli par les methodes Email.

     VVooiirr aauussssii
        Text.

  55..33..66..

  sseenndd(())

     FFiinnaalliittee
        Envoie le message e-mail.

     SSyynnttaaxxee
        public void send ()

     DDeessccrriippttiioonn
        Formatage  et envoi du message. Si aucune adresse de destination
        n'a ete precisee, ne fait rien.

  55..33..77..

  sseennddTToo(())

     FFiinnaalliittee
        Ajoute une destination pour ce message.

     SSyynnttaaxxee
        public String sendTo ( String adresse )

     DDeessccrriippttiioonn
        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.

     PPaarraammeettrree

        aaddrreessssee
           Une destination a laquelle envoyer ce message.

  55..33..88..

  ssuubbjjeecctt(())

     FFiinnaalliittee
        Initialise le sujet du message.

     SSyynnttaaxxee
        public void subject ( String sujet )

     DDeessccrriippttiioonn
        Cette  methode remplit le champ Subject: du message. Si elle est
        appelee  plusieurs  fois,  le  sujet  utilise  sera  le  dernier
        demande.

     PPaarraammeettrree

        ssuujjeett
           Le texte du champ Subject: du message.

  55..44..

  EEmmaaiill__TTeesstt

  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.

  55..44..11..

  LLiissttee ddeess mmeemmbbrreess

  ______________________________________________________________________
         main()      //  main() du programme

  ______________________________________________________________________

  55..44..22..

  VVooiirr aauussssii

  Email.

  55..44..33..

  mmaaiinn(())

     FFiinnaalliittee
        Fournit une methode main().

     SSyynnttaaxxee
        public static void main( String argv[] )

     DDeessccrriippttiioonn
        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.

     PPaarraammeettrree

        aarrggvv
           Arguments passes au programme par  le  script  java.cgi.  Non
           utilise pour l'instant.

  55..55..

  HHTTMMLL

  55..55..11..

  SSyynnttaaxxee

  public class HTML extends Text

  55..55..22..

  DDeessccrriippttiioonn

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

  55..55..33..

  LLiissttee ddeess mmeemmbbrreess

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

  ______________________________________________________________________

  55..55..44..

  VVooiirr aauussssii

  HTML_Test, Text.

  55..55..55..

  HHTTMMLL(())

     FFiinnaalliittee
        Construit un objet qui contiendra un message HTML.

     SSyynnttaaxxee
        public HTML()

     DDeessccrriippttiioonn
        Cree un message vide qui sera rempli par les methodes HTML.

     VVooiirr aauussssii
        Text.

  55..55..66..

  aauutthhoorr(())

     FFiinnaalliittee
        Initialise le nom de l'auteur du document.

     SSyynnttaaxxee
        public void author ( String auteur )

     DDeessccrriippttiioonn
        Donne au document un nom d'auteur ayant pour valeur author.

     PPaarraammeettrree

        aauutteeuurr
           Texte a utiliser en tant que nom d'auteur du message.

     VVooiirr aauussssii
        title().

  55..55..77..

  ddeeffiinniittiioonnLLiisstt(())

     FFiinnaalliittee
        Cree une liste de definitions.

     SSyynnttaaxxee
        public void definitionList ()

     DDeessccrriippttiioonn
        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_.

     VVooiirr aauussssii
        definitionListTerm(), endList(), listItem().

  55..55..88..

  ddeeffiinniittiioonnLLiissttTTeerrmm(())

     FFiinnaalliittee
        Ajoute un terme a la liste de definitions.

     SSyynnttaaxxee
        public void definitionListTerm ()

     DDeessccrriippttiioonn
        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.

     VVooiirr aauussssii
        definitionList(), listItem().

  55..55..99..

  eennddLLiisstt(())

     FFiinnaalliittee
        Termine une liste.

     SSyynnttaaxxee
        public void endList ()

     DDeessccrriippttiioonn
        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_.

     VVooiirr aauussssii
        definitionList().

  55..55..1100..

  lliissttIItteemm(())

     FFiinnaalliittee
        Ajoute une entree a une liste.

     SSyynnttaaxxee
        public void listItem ()

        public void listItem ( String article )

        public boolean listItem ( String terme, String article )

     DDeessccrriippttiioonn
        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.

     PPaarraammeettrreess

        aarrttiiccllee
           Le texte de cette entree de liste de definitions.

        tteerrmmee
           Le texte de la partie terme  de  cette  entree  de  liste  de
           definitions.

     VVooiirr aauussssii
        definitionList(), definitionListTerm(), endList().

  55..55..1111..

  sseenndd(())

     FFiinnaalliittee
        Envoie le message HTML.

     SSyynnttaaxxee
        public void send ()

     DDeessccrriippttiioonn
        Envoie le message HTML.

  55..55..1122..

  ttiittllee(())

     FFiinnaalliittee
        Donne une valeur au titre du document.

     SSyynnttaaxxee
        public void title ( String titre )

     DDeessccrriippttiioonn
        Initialise le texte du titre du document.

     PPaarraammeettrree

        ttiittrree
           Le texte du titre de ce message.

     VVooiirr aauussssii
        author().

  55..66..

  HHTTMMLL__TTeesstt

  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.

  55..66..11..

  LLiissttee ddeess mmeemmbbrreess

  ______________________________________________________________________
         main()      //  main() du programme.

  ______________________________________________________________________

  55..66..22..

  VVooiirr aauussssii

  HTML.

  55..66..33..

  mmaaiinn(())

     FFiinnaalliittee
        Fournit une methode main().

     SSyynnttaaxxee
        public static void main( String argv[] )

     DDeessccrriippttiioonn
        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.

     PPaarraammeettrree

        aarrggvv
           Arguments  passes  au  programme  par  le script java.cgi Non
           utilise pour l'instant.

  55..77..

  TTeexxtt

  55..77..11..

  SSyynnttaaxxee

  public abstract class Text

  55..77..22..

  DDeessccrriippttiioonn

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

  55..77..33..

  LLiissttee ddeess mmeemmbbrreess

  ______________________________________________________________________
         Text()            //  Constructeur.
         add()             //  Ajoute du texte a cet objet.
         addLineBreak()    //  Ajoute une rupture de ligne.
         addParagraph()    //  Ajoute une rupture de paragraphe.

  ______________________________________________________________________

  55..77..44..

  VVooiirr aauussssii

  Email, HTML.

  55..77..55..

  aadddd(())

     FFiinnaalliittee
        Ajoute du texte a cet article

     SSyynnttaaxxee
        public void add ( char ajout )

        public void add ( String ajout )

        public void add ( StringBuffer ajout )

     DDeessccrriippttiioonn
        Ajoute le texte ajout a la suite du contenu de cet article.

     PPaarraammeettrree

        aajjoouutt
           Texte a ajouter.

     VVooiirr aauussssii
        addLineBreak(), addParagraph().

  55..77..66..

  aaddddLLiinneeBBrreeaakk(())

     FFiinnaalliittee
        Force une rupture de ligne a cet endroit dans le texte.

     SSyynnttaaxxee
        public void addLineBreak ()

     DDeessccrriippttiioonn
        Insere une rupture de ligne dans le texte, a l'endroit du  point
        courant.

     VVooiirr aauussssii
        add(), addParagraph().

  55..77..77..

  aaddddPPaarraaggrraapphh(())

     FFiinnaalliittee
        Debute un nouveau paragraphe.

     SSyynnttaaxxee
        public void add ()

     DDeessccrriippttiioonn
        Debute un  nouveau paragraphe a ce point du flot textuel.

     VVooiirr aauussssii
        add(), addLineBreak().

  66..

  AAmmeelliioorraattiioonnss pprreevvuueess

  +o  Ajouter a la classe Email :

     EEmmaaiill(( iinntt ccaappaacciittee ))
        Quand on connait a l'avance l'espace a alloue au message.

     sseennddTToo(( SSttrriinngg  aaddrreessssee ))
        Ajoute  une  liste  de  destinations  principales (champ To:) au
        message e-mail.

     sseennddCCcc(( SSttrriinngg aaddrreessssee ))
        Ajoute une destination au champ Cc: (Carbon-Copy) du message  e-
        mail.

     sseennddCCcc(( SSttrriinngg  aaddddrreessss ))
        Ajoute  une  liste de destinations au champ Cc: (Carbon-Copy) du
        message e-mail.

     sseennddBBcccc(( SSttrriinngg aaddrreessssee ))
        Ajoute une destination au  champ  Bcc:  (Blind  Carbon-Copy)  du
        message e-mail.

     sseennddBBcccc(( SSttrriinngg  aaddrreessssee ))
        Ajoute  une  liste  de destinations au champ Bcc: (Blind Carbon-
        Copy) du message e-mail.

  +o  Ajouter a la classe HTML :

     HHTTMMLL(( iinntt ccaappaacciittee ))
        Quand on connait a l'avance l'espace a alloue au message.

     ppuubblliicc vvooiidd uunnoorrddeerreeddLLiisstt(())
        Demarre une liste non ordonnee.

     ppuubblliicc vvooiidd oorrddeerreeddLLiisstt(())
        Demarre une liste ordonnee.

     ppuubblliicc vvooiidd ddiirreeccttoorryyLLiisstt(())
        Demarre une liste de repertoires.

     ppuubblliicc vvooiidd mmeennuuLLiisstt(())
        Demarre une liste de menu.

     vvooiidd aanncchhoorr(( SSttrriinngg aanncchhoorrNNaammee ))
        Specifie une ancre.

     vvooiidd lliinnkk(( SSttrriinngg uurrll,, SSttrriinngg tteexxtt ))
        Specifie un lien.

     vvooiidd aapppplleett(( SSttrriinngg uurrll,, SSttrriinngg aallttTTeexxtt ))
        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.

  77..

  MMooddiiffiiccaattiioonnss

  77..11..

  MMooddiiffiiccaattiioonnss eennttrree lleess vveerrssiioonnss 00..33 eett 00..44

  +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.

  77..22..

  MMooddiiffiiccaattiioonnss eennttrree lleess vveerrssiioonnss 00..22 eett 00..33

  +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.

  77..33..

  MMooddiiffiiccaattiioonnss eennttrree lleess vveerrssiioonnss 00..11 eett 00..22

  +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.

