  Java CGI HOWTO
  di David H. Silber dhs@orbits.com
  v0.4, 18 Novembre 1996

  Questo HOWTO spiega come configurare il vostro server per accogliere
  programmi CGI scritti in Java e come utilizzare Java per scrivere pro
  grammi. Nonostante gli HOWTO abbiano come obiettivo l'utilizzo di
  Linux come sistema operativo, questo documento si rivolge a tutti gli
  utilizzatori indipendentemente dalla versione di unix usata.  La
  traduzione italiana  stata curata da Luca Rossetti (lukaros@tin.it).
  ______________________________________________________________________

  Indice Generale



  1. Introduzione
     1.1 Conoscenze necessarie
     1.2 Dove trovare questo Documento
     1.3 Il Pacchetto Software
     1.4 Inserzione senza Pudore

  2. Come Configurare il Vostro Server per lanciare Programmi Java CGI (con Spiegazioni)
     2.1 Requisiti di Sistema
     2.2 Il Software Add-On di Java CGI
     2.3 Come decomprimere il Pacchetto Sorgente
     2.4 Le Directory di Installazione
     2.5 Come Testare l'installazione.

  3. Come Configurare il Vostro Server per lanciare Programmi Java CGI (forma abbreviata)
  4. Come Eseguire un Programma Java CGI
     4.1 Ostacoli quando si lanciano Programmi Java sotto il Modello CGI
        4.1.1 Non si possono lanciare programmi Java come normali eseguibili.
        4.1.2 Con Java non si ha un accesso generale alle variabili d'ambiente.
     4.2 Superare i Problemi lanciando Programmi Java CGI
        4.2.1 Lo script java.cgi.
        4.2.2 Come Utilizzare il java.cgi da un form HTML.

  5. Utilizzo delle Classi Java.
     5.1 CGI
        5.1.1 Sintassi della Classe
        5.1.2 Descrizione della Classe
        5.1.3 Sommario dei membri della Classe
        5.1.4 Vedi Anche
        5.1.5 CGI()
        5.1.6 getNames()
        5.1.7 getValue()
     5.2 CGI_Test
        5.2.1 Sommario dei membri della Classe
        5.2.2 Vedi Anche
        5.2.3 main()
     5.3 Email
        5.3.1 Sintassi della Classe
        5.3.2 Descrizione della Classe
        5.3.3 Sommario dei membri della Classe
        5.3.4 Vedi Anche
        5.3.5 Email()
        5.3.6 send()
        5.3.7 sendTo()
        5.3.8 subject()
     5.4 Email_Test
        5.4.1 Sommario dei membri della Classe
        5.4.2 Vedi Anche
        5.4.3 main()
     5.5 HTML
        5.5.1 Sintassi della Classe
        5.5.2 Descrizione della Classe
        5.5.3 Sommario dei membri della Classe
        5.5.4 Vedi Anche
        5.5.5 HTML()
        5.5.6 author()
        5.5.7 definitionList()
        5.5.8 definitionListTerm()
        5.5.9 endList()
        5.5.10 listItem()
        5.5.11 send()
        5.5.12 title()
     5.6 HTML_Test
        5.6.1 Sommario dei membri della Classe
        5.6.2 Vedi Anche
        5.6.3 main()
     5.7 Text
        5.7.1 Sintassi delle Classi
        5.7.2 Descrizione delle Classi
        5.7.3 Member Summary
        5.7.4 Vedi Anche
        5.7.5 add()
        5.7.6 addLineBreak()
        5.7.7 addParagraph()

  6. Piani Futuri
  7. Varianti
     7.1 Varianti da 0.3 a 0.4
     7.2 Varianti da 0.2 a 0.3
     7.3 Varianti da 0.1 a 0.2


  ______________________________________________________________________

  11..  IInnttrroodduuzziioonnee

  A causa del metodo con cui Java  stato scritto, il programmatore non
  ha un accesso molto semplice alle variabili d'ambiente del sistema.
  Inoltre, per le modalit con cui il Java Development Kit (JDK)  stato
  costruito, per lanciare un programma  necessario utilizzare segnali
  multipli, cosa che non si addice molto alla metodologia di operazioni
  dello standard HTML forms/CGI.  Esistono vari metodi per eliminare
  queste limitazioni, ed io ho implementato uno di questi.  Il seguito
  di questo documento ne spiega tutti i dettagli.



  11..11..  CCoonnoosscceennzzee nneecceessssaarriiee

  Si assume che abbiate una conoscenza generale del linguaggio HTML e
  dei concetti legati al CGI e almeno una minima conoscenza del vostro
  server HTTP.  Dovreste anche conoscere la programmazione in Java o
  molto di quanto leggerete non avr granch senso.



  11..22..  DDoovvee ttrroovvaarree qquueessttoo DDooccuummeennttoo

  La versione pi recente di questo documento si pu trovare presso
  http://www.orbits.com/software/Java_CGI.html.



  11..33..  IIll PPaacccchheettttoo SSooffttwwaarree

  La versione pi recente del pacchetto software descritto pu essere
  scaricata mediante FTP anonimo presso
  ftp://ftp.orbits.com/pub/software/java_cgi-0.4.tgz.La distribuzione
  del pacchetto include anche un sorgente SGML di questo documento.

  Il pacchetto  distribuito nei termini della GNU Library General
  Public License.  Questo documento pu essere distribuito nei termini
  della nota di copyright degli HOWTO di Linux.

  Se utilizzate questo software, rendete disponibile un collegamento
  alla pagina http://www.orbits.com/software/Java_CGI.html, cosicch
  altre persone possano trovare le classi CGI Java.



  11..44..  IInnsseerrzziioonnee sseennzzaa PPuuddoorree

  Questo documento vi proposto viene grazie a 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.  (Visitate il nostro sito http://www.orbits.com/ per vedere
  di cosa ci occupiamo.)



  22..  CCoommee CCoonnffiigguurraarree iill VVoossttrroo SSeerrvveerr ppeerr llaanncciiaarree PPrrooggrraammmmii JJaavvaa CCGGII
  ((ccoonn SSppiieeggaazziioonnii))

  Questa sezione vi guider nella installazione dei miei pacchetti _J_a_v_a
  _C_G_I con spiegazioni approfondite per farvi capire quali siano gli
  effetti di tutte le vostre azioni. Se volete solo installare i
  programmi e non vi interessano tutti i motivi ed i perch, saltate
  alla sezione ``Come Configurare il Vostro Server per lanciare
  Programmi Java CGI (forma abbreviata)''.



  22..11..  RReeqquuiissiittii ddii SSiisstteemmaa

  Questo software dovrebbe funzionare su un qualsiasi web server unix-
  like che ha il Java Development Kit installato. Io lo utilizzo su un
  sistema con _D_e_b_i_a_n _L_i_n_u_x che usa _a_p_a_c_h_e come demone HTTP. Se non
  dovesse funzionare sul vostro server, contattatemi presso
  dhs@orbits.com.

  Sfortunatamente, l'interprete run-time di Java sembra essere veramente
  ingordo di memoria -- potreste avere la necessit di installare
  qualche altro megabyte di RAM nel vostro server se vorrete usare
  estensivamente le capacit dei programmi Java CGI.



  22..22..  IIll SSooffttwwaarree AAdddd--OOnn ddii JJaavvaa CCGGII

  Il software di cui ho scritto il codice  chiamato _J_a_v_a _C_G_I.  Potete
  scaricarlo dal sito ftp:
  ftp://www.orbits.com/pub/software/java_cgi-0.4.tgz.  (Il numero della
  versione potrebbe essere cambiato).



  22..33..  CCoommee ddeeccoommpprriimmeerree iill PPaacccchheettttoo SSoorrggeennttee

  Scegliete opportunamente una directory per decomprimere il pacchetto.
  (Se non avete ancora fissato un posto standard in cui installare i
  pacchetti software, suggerisco di utilizzare /usr/local/src.)  Per
  decomprimere il file contenente la distribuzione si utilizza il
  seguente comando:

  gzip -dc java_cgi-0.4.tgz | tar -xvf -


  Questo comando creer una directory chiamata java_cgi-0.4. All'interno
  di questa directory troverete tutti i file a cui far riferimento nel
  resto del documento.  (Se il numero della versione  cambiato, consul
  tate le istruzioni contenute nella distribuzione per continuare
  l'installazione).


  22..44..  LLee DDiirreeccttoorryy ddii IInnssttaallllaazziioonnee

  A questo punto dovete decidere dove volete che i vostri programmi Java
  CGI risiedano.  Generalmente si mettono in una directory in parallelo
  con la directory cgi-bin.  Il mio server _a_p_a_c_h_e  configurato per
  usare /var/web/cgi-bin come directory cgi-bin, per cui uso
  /var/web/javacgi come la directory in cui inserire programmi Java.
  Probabilmente  meglio non mettere i vostri programmi Java CGI nelle
  directory esistenti nel CLASSPATH.  Modificate il Makefile per fare in
  modo che esso che si adatti alla configurazion del vostro sistema.
  Come root lanciate make install.  Questo compiler i programmi Java,
  modificate lo script java.cgi per fare in modo che si adatti al vostro
  sistema ed installi i programmi nei posti giusti.  Se invece volete
  avere la versione HTML di questo documento e una pagina HTML di test
  in aggiunta, lanciate make all.



  22..55..  CCoommee TTeessttaarree ll''iinnssttaallllaazziioonnee..

  Assieme alla distribuzione trovere dei documenti HTML chiamati
  javacgitest.html, javaemailtest.html e javahtmltest.html.  Se avete
  installato tutto con make all come menzionato nella sezione
  precedente, i documenti saranno nella directory che avete specificato
  come WEBDIR nel Makefile.  Se non lo avete fatto, potrete lanciare
  make test per costruirli da javacgitest.html-dist, javaemailtest.html-
  dist e javahtmltest.html-dist.

  Quando siete sicuri che la vostra installazione sia andata a buon
  fine, potrete decidere se rimuovere CGI_Test.class, Email_Test.class e
  HTML_Test.class dalla vostra directory JAVACGI e javacgitest.html,
  javaemailtest.html e javahtmltest.html dalla vostra directory WEBDIR
  visto che essi mostrano alcune informazioni relative all'utente che
  sono normalmente disponibili solo al server.



  33..  CCoommee CCoonnffiigguurraarree iill VVoossttrroo SSeerrvveerr ppeerr llaanncciiaarree PPrrooggrraammmmii JJaavvaa CCGGII
  ((ffoorrmmaa aabbbbrreevviiaattaa))


    Scaricate il pacchetto _J_a_v_a _C_G_I dal sito ftp
     ftp://www.orbits.com/pub/software/java_cgi-0.4.tgz.  (Il numero
     della versione potrebbe essere cambiato).

    Decomprimete il file contenente la distribuzione utilizzando il
     comando:

     gzip -dc java_cgi-0.4.tgz | tar -xvf -


  (Se il numero della versione  cambiato, consultate le istruzioni con
  tenute nella distribuzione per continuare l'installazione).

    Controllate il contenuto del Makefile che troverete all'interno
     della directory java_cgi-0.4 appena creata e modificatelo
     opportunamente per il vostro sistema.

    Come root, lanciate make install.  Questo comando compiler i
     programmi Java, applicher le informazioni che avete specificato
     per il vostro sistema ed installer tutti i file.  Se invece
     desiderate consultare la documentazione in formato HTML e visionare
     un documento HTML di test, lanciate make all.

    Giunti a questo punto dovreste essere pronti per iniziare.



  44..  CCoommee EEsseegguuiirree uunn PPrrooggrraammmmaa JJaavvaa CCGGII



  44..11..  OOssttaaccoollii qquuaannddoo ssii llaanncciiaannoo PPrrooggrraammmmii JJaavvaa ssoottttoo iill MMooddeelllloo CCGGII

  Esistono due problemi principali nel lanciare un programma Java da un
  server Web:



  44..11..11..  NNoonn ssii ppoossssoonnoo llaanncciiaarree pprrooggrraammmmii JJaavvaa ccoommee nnoorrmmaallii
  eesseegguuiibbiillii..

  Bisogna lanciare l'interprete run-time di Java e fornire la classe
  iniziale (programma da eseguire) in linea di comando.  Con un form
  HTML, non esiste nessuna precauzione nell'inviare una linea di comando
  al server web.



  44..11..22..  CCoonn JJaavvaa nnoonn ssii hhaa uunn aacccceessssoo ggeenneerraallee aallllee vvaarriiaabbiillii dd''aammbbii
  eennttee..

  Ogni variabile d'ambiente necessaria al programma Java deve essere
  passata esplicitamente.  Non esiste un metodo simile alla funzione CC
  getenv().



  44..22..  SSuuppeerraarree ii PPrroobblleemmii llaanncciiaannddoo PPrrooggrraammmmii JJaavvaa CCGGII

  Per eliminare questi ostacoli, ho scritto un programma CGI di shell
  che fornisce le informazioni necessarie all'interprete Java.



  44..22..11..  LLoo ssccrriipptt jjaavvaa..ccggii..

  Questo script di shell si occupa dell'interazione tra il demone HTTP
  daemon e il programma Java CGI che dovete usare.  Estrae il nome del
  programma che volete lanciare dai dati forniti al server e raccoglie
  tutti i dati d'ambiente in un file temporaneo.  Quindi lancia
  l'interprete run-time di Java con il nome del file di informazioni
  d'ambiente e il nome del programma aggiunto alla linea di comando.

  La spiegazione di come viene configurato ed installato lo script
  java.cgi si trova nella sezione ``Le Directory di Installazione''.



  44..22..22..  CCoommee UUttiilliizzzzaarree iill jjaavvaa..ccggii ddaa uunn ffoorrmm HHTTMMLL..

  I forms che usano i programmi Java CGI specificano delle azioni come
  di seguito formalizzato:

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


  Dove /cgi-bin/  la directory locale che avete specificato per i file
  binari CGI, java.cgi  il front-end di Java che permette di lanciare
  programmi Java sul Web e CGI_Test  un esempio del nome del programma
  Java da lanciare.



  55..  UUttiilliizzzzoo ddeellllee CCllaassssii JJaavvaa..

  Attualmente sono supportate tre classi principali definite nelle
  sezioni ``CGI'', ``Email'' e ``HTML''.  Sto considerando di aggiungere
  le classi per trattare l'input e l'output MIME-formatted
  rispettivamente con MIMEin & MIMEout.

  Esistono anche classi di supporto e di test definite nelle sezioni
  ``CGI_Test'', ``Email_Test'' e ``HTML_Test''. L'utilizzo di queste
  classi  stato concepito con lo scopo di testare la vostra
  installazione.  Ciononostante possono essere utilizzate come punto di
  partenza per i vostri programmi in Java che fanno uso di questa
  libreria di classi.  La classe descritta nella sezione ``Text''  la
  superclasse per entrambe le classi Email e HTML.



  55..11..  CCGGII



  55..11..11..  SSiinnttaassssii ddeellllaa CCllaassssee

  public class CGI



  55..11..22..  DDeessccrriizziioonnee ddeellllaa CCllaassssee

  La classe CGI mantiene la variabile d'ambiente ``CGI Information''
  impostata dal server web e il nome/valore inviato da un form quando si
  decide di selezionare l'azione ssuubbmmiitt.  Tutte le informazioni sono
  memorizzate in un oggetto della classe Properties.

  Questa classe  nel pacchetto ``Orbits.net''.



  55..11..33..  SSoommmmaarriioo ddeeii mmeemmbbrrii ddeellllaa CCllaassssee



  ______________________________________________________________________
          CGI()         //  Costruttore.
          getNames()    //  Prende la lista di nomi.
          getValue()    //  Prende il valore del form specificando il nome.
  ______________________________________________________________________



  55..11..44..  VVeeddii AAnncchhee

  CGI_Test.



  55..11..55..  CCGGII(())


     OObbiieettttiivvoo
        Costruisce un oggetto che contiene i dati CGI disponibili.

     SSiinnttaassssii
        public CGI()

     DDeessccrriizziioonnee
        Quando viene costruito un oggetto CGI, tutte le informazioni
        disponibili vengono assorbite ed immagazzinate localmente al
        nuovo oggetto.



  55..11..66..  ggeettNNaammeess(())


     OObbiieettttiivvoo
        Lista i nomi che sono definiti per avere valori corrispondenti.

     SSiinnttaassssii
        public Enumeration getKeys ()

     DDeessccrriizziioonnee
        Fornisce la lista intera di nome per i quali sono definiti
        valori corrispondenti.

     RReessttiittuuiissccee
        Una Enumerazione di tutti i nomi definiti.



  55..11..77..  ggeettVVaalluuee(())


     OObbiieettttiivvoo
        Ricerca i vvaalloorrii associati al nnoommee specificato.

     SSiinnttaassssii
        public String getValue ( String name )

     DDeessccrriizziioonnee
        Questo metodo fornisce una corrispondenza tra nomi e valori
        inviati da un form HTML.
     PPaarraammeettrrii

        nnaammee
           La chiave con la quale i valori vengono selezionati.

     RReessttiittuuiissccee
        Una Stringa che contiene il valore.



  55..22..  CCGGII__TTeesstt

  Questa classe fornisce un esempio di come usare la classe CGI ed anche
  un programma di test che pu essere usato per avere la conferma che il
  pacchetto _J_a_v_a _C_G_I funzioni correttamente.



  55..22..11..  SSoommmmaarriioo ddeeii mmeemmbbrrii ddeellllaa CCllaassssee


  ______________________________________________________________________
          main()      //  Programma main().
  ______________________________________________________________________



  55..22..22..  VVeeddii AAnncchhee

  CGI.



  55..22..33..  mmaaiinn(())


     OObbiieettttiivvoo
        Fornire un metodo main().

     SSiinnttaassssii
        public static void main( String argv[] )

     DDeessccrriizziioonnee
        Questo  il punto di ingresso del programma CGI che restituisce
        una lista delle coppie nomi/valori disponibili e il loro valore
        attuale.

     PPaarraammeettrrii

        aarrggvv[[]]
           Argomenti passati al programma dallo script java.cgi.
           Attualmente inutilizzato.



  55..33..  EEmmaaiill



  55..33..11..  SSiinnttaassssii ddeellllaa CCllaassssee

  public class Email extends Text



  55..33..22..  DDeessccrriizziioonnee ddeellllaa CCllaassssee

  I Messaggi sono costruiti con la classe Text e i metodi add*() e i
  metodi specifici e-mail-specific aggiunti a da questa classe. Quando
  completo, il messaggio viene inviato ai suoi destinatari.

  Questa classe  contenuta nel pacchetto ``Orbits.net''.



  55..33..33..  SSoommmmaarriioo ddeeii mmeemmbbrrii ddeellllaa CCllaassssee


  ______________________________________________________________________
          Email()      //  Costruttore.
          send()       //  Invia un messaggio e-mail.
          sendTo()     //  Aggiunge un destinatario al messaggio.
          subject()    //  Imposta il Subject del messaggio.
  ______________________________________________________________________



  55..33..44..  VVeeddii AAnncchhee

  Email_Test, Text.



  55..33..55..  EEmmaaiill(())


     OObbiieettttiivvoo
        Costruisce un oggetto che conterr un messaggio email.

     SSiinnttaassssii
        public Email()

     DDeessccrriizziioonnee
        Costruisce un messaggio vuoto da completare da parte dei metodi
        Email.

     VVeeddii AAnncchhee
        Text.



  55..33..66..  sseenndd(())


     OObbiieettttiivvoo
        Invia un messaggio e-mail.


     SSiinnttaassssii
        public void send ()

     DDeessccrriizziioonnee
        Formatta ed invia il messaggio.  Se non viene specificato un
        indirizzo di destinazione, non viene intrapresa alcuna azione.



  55..33..77..  sseennddTToo(())


     OObbiieettttiivvoo
        Aggiunge una destinazione per questo messaggio.

     SSiinnttaassssii
        public String sendTo ( String address )

     DDeessccrriizziioonnee
        Aggiunge address alla lista delle destinazioni per questo
        metodo.  Non esiste limite al numero di destinatari che un
        messaggio e-mail pu  avere. Sono sicuro che costruendo una
        lista abbastanza grande, potreste fare in modo da superare la
        memoria oppure eccedere la dimensione della lista di parametri
        che il vostro _A_g_e_n_t_e _d_i _T_r_a_s_p_o_r_t_o _d_e_l_l_a _P_o_s_t_a  in grado di
        accettare.

     PPaarraammeettrrii

        aaddddrreessss
           Una destinazione a cui inviare il messaggio.



  55..33..88..  ssuubbjjeecctt(())


     OObbiieettttiivvoo
        Imposta l'oggetto/subject per questo messaggio.

     SSiinnttaassssii
        public void subject ( String subject )

     DDeessccrriizziioonnee
        Questo metodo imposta il testo per la riga Subject: di un
        messaggio email.  Se vengono chiamati pi di una volta, viene
        utilizzato il subject pi recente.

     PPaarraammeettrrii

        ssuubbjjeecctt
           Il testo della riga Subject: del messaggio.



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

  Questa classe fornisce sia un esempio di come utilizzare la classe
  Email sia un programma di test per verificare che il pacchetto _J_a_v_a
  _C_G_I funzioni correttamente.



  55..44..11..  SSoommmmaarriioo ddeeii mmeemmbbrrii ddeellllaa CCllaassssee


  ______________________________________________________________________
          main()      //  Programma main().
  ______________________________________________________________________



  55..44..22..  VVeeddii AAnncchhee

  Email.



  55..44..33..  mmaaiinn(())


     OObbiieettttiivvoo
        Fornisce un metodo main().

     SSiinnttaassssii
        public static void main( String argv[] )

     DDeessccrriizziioonnee
        Questo  il punto di ingresso del programma CGI che restituisce
        una lista delle coppie nomi/valori disponibili e il loro valore
        attuale.  Invier anche questa lista agli indirizzi specificati
        nella variabile Email.

     PPaarraammeettrrii

        aarrggvv[[]]
           Argomenti passati al programma dallo script java.cgi.
           Attualmente inutilizzato.



  55..55..  HHTTMMLL



  55..55..11..  SSiinnttaassssii ddeellllaa CCllaassssee

  public class HTML extends Text



  55..55..22..  DDeessccrriizziioonnee ddeellllaa CCllaassssee

  I Messaggi vengono costruiti con i metodi Text class add*() e dai
  metodi specifici-HTML aggiunti da questa classe.  Quando completo, il
  messaggio viene inviato alle sue destinazioni.

  Attualmente non esiste un controllo di errore per avere la conferma
  che i metodi di costruzione delle liste siano usati nell'ordine
  corretto: il programmatore deve prestare attenzione a non violare la
  sintassi HTML.
  Questa classe  nel pacchetto ``Orbits.net''.



  55..55..33..  SSoommmmaarriioo ddeeii mmeemmbbrrii ddeellllaa CCllaassssee


  ______________________________________________________________________
      HTML()                //  Costruttore.
      author()              //  Imposta il nome dell'autore del documento.
      definitionList()      //  Avvia una definition list.
      definitionListTerm()  //  Aggiunge un termine ad una definition list.
      endList()             //  Termina una lista.
      listItem()            //  Aggiunge una entrata ad una lista.
      send()                //  Invia un messaggio HTML.
      title()               //  Imposta il testo per il titolo del documento.
  ______________________________________________________________________



  55..55..44..  VVeeddii AAnncchhee

  HTML_Test, Text.



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


     OObbiieettttiivvoo
        Costruisce un oggetto che contiene un messaggio HTML.

     SSiinnttaassssii
        public HTML()

     DDeessccrriizziioonnee
        Costruisce un messaggio vuoto da completare con i metodi HTML.

     VVeeddii AAnncchhee
        Text.



  55..55..66..  aauutthhoorr(())


     OObbiieettttiivvoo
        Imposta il nome dell'autore del documento.

     SSiinnttaassssii
        public void author ( String author )

     DDeessccrriizziioonnee
        Imposta il nome dell'autore del documento in author.

     PPaarraammeettrrii

        aauutthhoorr
           Il testo da usare come autore di questo messaggio.

     VVeeddii AAnncchhee
        title().



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


     OObbiieettttiivvoo
        Avvia una definition list.

     SSiinnttaassssii
        public void definitionList ()

     DDeessccrriizziioonnee
        Avvia una definition list.  Una _d_e_f_i_n_i_t_i_o_n _l_i_s_t  una
        particolare lista per la quale ogni elemento di ingresso della
        lista  _t_e_r_m seguito dalla definizione _t_e_x_t per quel termine.
        L'avvio di una definition list dovrebbe essere seguito dalla
        creazione di almeno un termine/testo e una chiamata al metodo
        endList().  _D_a _n_o_t_a_r_e _c_h_e_, _a_t_t_u_a_l_m_e_n_t_e_, _l_e _l_i_s_t_e _n_o_n _p_o_s_s_o_n_o
        _e_s_s_e_r_e _n_i_d_i_f_i_c_a_t_e

     VVeeddii AAnncchhee
        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(())


     OObbiieettttiivvoo
        Aggiunge un termine alla definition list.

     SSiinnttaassssii
        public void definitionListTerm ()

     DDeessccrriizziioonnee
        Aggiunge un termine alla definition list.  Il testo
        dell'elemento lista corrente deve essere appeso al messaggio
        dopo che questo metodo viene chiamato e prima di un
        corrispondente metodo listItem venga chiamato.

     VVeeddii AAnncchhee
        definitionList(), listItem().



  55..55..99..  eennddLLiisstt(())


     OObbiieettttiivvoo
        Termina una lista.

     SSiinnttaassssii
        public void endList ()

     DDeessccrriizziioonnee
        Termina una lista.  Questo metodo elimina una lista.  _D_a _n_o_t_a_r_e
        _c_h_e _a_l _m_o_m_e_n_t_o _a_t_t_u_a_l_e_, _l_e _l_i_s_t_e _n_o_n _p_o_s_s_o_n_o _e_s_s_e_r_e _n_i_d_i_f_i_c_a_t_e_.

     VVeeddii AAnncchhee
        definitionList().
  55..55..1100..  lliissttIItteemm(())


     OObbiieettttiivvoo
        Aggiunge una voce nella lista.

     SSiinnttaassssii
        public void listItem ()

        public void listItem ( String item )

        public boolean listItem ( String term, String item )

     DDeessccrriizziioonnee
        Aggiunge una voce alla lista.  Se viene usato il primo form, il
        testo dell'elemento lista corrente deve essere accodato al
        messaggio dopo che questo metodo viene chiamato e prima che
        venga chiamata ogni altra lista di metodi.  Nel secondo e terzo
        form, il testo item  specificato come un parametro al metodo
        invece di (o in aggiunta) essere accodato al messaggio.  Il
        terzo form  specifico per le definition lists e fornisce sia i
        termini che una definizione dell'ingresso della lista.

     PPaarraammeettrrii

        iitteemm
           Il testo di questo ingresso di lista.

        tteerrmm
           Il testo di questa parte del termine di ingresso della
           definition list.

     VVeeddii AAnncchhee
        definitionList(), definitionListTerm(), endList().



  55..55..1111..  sseenndd(())


     OObbiieettttiivvoo
        Invia un messaggio HTML.

     SSiinnttaassssii
        public void send ()

     DDeessccrriizziioonnee
        Invia un messaggio HTML.



  55..55..1122..  ttiittllee(())


     OObbiieettttiivvoo
        Imposta il testo per il titolo del documento.

     SSiinnttaassssii
        public void title ( String title )

     DDeessccrriizziioonnee
        Imposta il testo per il titolo del documento.


     PPaarraammeettrrii

        ttiittllee
           Il testo del titolo del documento.

     VVeeddii AAnncchhee
        author().



  55..66..  HHTTMMLL__TTeesstt

  Questa classe fornisce sia un esempio di come usare la classe HTML sia
  un programma di test che pu essere usato per avere la conferma che il
  pacchetto _J_a_v_a _C_G_I funzioni correttamente.



  55..66..11..  SSoommmmaarriioo ddeeii mmeemmbbrrii ddeellllaa CCllaassssee


  ______________________________________________________________________
          main()      //  Programma main().
  ______________________________________________________________________



  55..66..22..  VVeeddii AAnncchhee

  HTML.



  55..66..33..  mmaaiinn(())


     OObbiieettttiivvoo
        Fornire un metodo main().

     SSiinnttaassssii
        public static void main( String argv[] )

     DDeessccrriizziioonnee
        Questo  il punto di ingresso del programma CGI che restituisce
        una lista delle coppie nomi/valori disponibili e il loro valore
        attuale.

     PPaarraammeettrrii

        aarrggvv[[]]
           Argomenti passati al programma dallo java.cgi.  Attualmente
           inutilizzato.



  55..77..  TTeexxtt



  55..77..11..  SSiinnttaassssii ddeellllee CCllaassssii

  public abstract class Text



  55..77..22..  DDeessccrriizziioonnee ddeellllee CCllaassssii

  Questa classe  la superclasse delle classi Email e HTML.  I Messaggi
  sono costruiti con i metodi di questa classe poi completati e
  formattati con i metodi delle sottoclassi.

  Questa classe  contenuta nel pacchetto ``Orbits.text''.



  55..77..33..  MMeemmbbeerr SSuummmmaarryy


  ______________________________________________________________________
          Text()            //  Costruttore.
          add()             //  Aggiunge testo a questo oggetto.
          addLineBreak()    //  Aggiunge un terminatore di riga.
          addParagraph()    //  Aggiunge un terminatore di paragrafo.
  ______________________________________________________________________



  55..77..44..  VVeeddii AAnncchhee

  Email, HTML.



  55..77..55..  aadddd(())


     OObbiieettttiivvoo
        Aggiunge del testo a questo elemento.

     SSiinnttaassssii
        public void add ( char addition )

        public void add ( String addition )

        public void add ( StringBuffer addition )

     DDeessccrriizziioonnee
        Aggiunge addition ai contenuti di questo elemento di testo.

     PPaarraammeetteerr

        aaddddiittiioonn
           Testo da aggiungere all'elemento di testo.

     VVeeddii AAnncchhee
        addLineBreak(), addParagraph().



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


     OObbiieettttiivvoo
        Forza una terminazione di riga nel punto esatto del testo.

     SSiinnttaassssii
        public void addLineBreak ()

     DDeessccrriizziioonnee
        Aggiunge una terminazione di riga al testo nel punto attuale.

     VVeeddii AAnncchhee
        add(), addParagraph().



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


     OObbiieettttiivvoo
        Comincia un nuovo paragrafo.

     SSiinnttaassssii
        public void add ()

     DDeessccrriizziioonnee
        Cominicia un nuovo paragrafo in questo punto del testo.

     VVeeddii AAnncchhee
        add(), addLineBreak().



  66..  PPiiaannii FFuuttuurrii


    Aggiungere alla classe Email:

     EEmmaaiill(( iinntt ccaappaacciittyy ))
        Usato quando conosciamo quanto spazio necessita al messaggio per
        essere allocato.

     sseennddTToo(( SSttrriinngg [[]] aaddddrreessss ))
        Aggiunge una lista di destinazioni primarie al messaggio e-mail.

     sseennddCCcc(( SSttrriinngg aaddddrreessss ))
        Aggiunge una destinazione Carbon-Copy al messaggio e-mail.

     sseennddCCcc(( SSttrriinngg [[]] aaddddrreessss ))
        Aggiunge una lista di destinazioni Carbon-Copy al messaggio e-
        mail.

     sseennddBBcccc(( SSttrriinngg aaddddrreessss ))
        Aggiunge una destinazione Blind Carbon-Copy al messaggio e-mail.

     sseennddBBcccc(( SSttrriinngg [[]] aaddddrreessss ))
        Aggiunge una lista di destinazioni Blind Carbon-Copy al
        messaggio e-mail.

    Aggiungere alla classe HTML:

     HHTTMMLL(( iinntt ccaappaacciittyy ))
        Usato quando conosciamo quanto spazio necessita al messaggio per
        essere allocato.

     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(())
        Avvia una lista non-ordinata.

     ppuubblliicc vvooiidd oorrddeerreeddLLiisstt(())
        Avvia una lista ordinata.

     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(())
        Avvia una lista di directory.

     ppuubblliicc vvooiidd mmeennuuLLiisstt(())
        Avvia una lista di 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 ))
        Specifica un anchor.

     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 ))
        Specifica un link.

     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 ))
        Specifica un link ad un applet.

    Permettere la nidificazione delle liste HTML.

    Aggiungere un codice a controllo di errore per rinforzare
     l'ordinamento corretto dei codici di formattazione delle liste
     HTML.

    Il posizionamento del file dei dati d'ambiente deve essere
     configurabile tramite la modifica del Makefile.

    Eliminare le coppie spurie di nomi/valori vuoti che appaiono nella
     lista quando si tratta il metodo di trasferimento di dati GET.

    Considerare di fare in modo che CGI implementi l'interfaccia
     java.util.Enumeration per fornire successivamente i nomi delle
     variabili.

    Aggiungere una classe Test, con la quale utilizzare ogni metodo di
     questo pacchetto.

    Documentare come CGI_Test, Email_Test e HTML_Test facciano
     affidamento l'uno sull'altro per fornire tests incrementali per
     obiettivi di debugging.

    Documentare come Test utilizzi ogni caratteristica disponibile in
     questo pacchetto.



  77..  VVaarriiaannttii



  77..11..  VVaarriiaannttii ddaa 00..33 aa 00..44


    Buttata fuori la classe HTML per fornire una minima funzionalit

    Scritta la classe HTML_Test e javahtmltest.html-dist.


    Aggiunti i metodi HTML per trattare con la definition list.



  77..22..  VVaarriiaannttii ddaa 00..22 aa 00..33


    Aggiunte le classi Text e Email.  Viene aggiunto anche l'HTML, ma 
     solo un inizio.

    Raccolte le varie classi in pacchetti.  Le classi principali sono
     in Orbits.net.*, la classe di supporto Text  in Orbits.text.Text.

    Cambiato CGItest in CGI_Test.

    Aggiunta la classe Email_Test.



  77..33..  VVaarriiaannttii ddaa 00..11 aa 00..22


    Le variabili d'ambiente vengono messe in un file temporaneo invece
     di essere stipate in linea di comando nell'interprete Java.  Le
     classi CGI e java.cgi sono state modificate.

    Il documento javacgitest.html diventa parte della distribuzione.

    I file di testo che sono modificati da make durante l'installazione
     vengono forniti con nomi che terminano con _-_d_i_s_t.



