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 ______________________________________________________________________ 11.. IInnttrroodduuzziioonnee 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. 11..11.. CCoonnoosscceennzzee nneecceessssaarriiee 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. 11..22.. DDoovvee ttrroovvaarree qquueessttoo DDooccuummeennttoo La versione più recente di questo documento si può trovare presso http://www.orbits.com/software/Java_CGI.html. 11..33.. IIll PPaacccchheettttoo SSooffttwwaarree 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. 11..44.. IInnsseerrzziioonnee sseennzzaa PPuuddoorree Questo documento vi proposto viene grazie a SStteellllaarr OOrrbbiittss TTeecchhnnoollooggyy SSeerrvviicceess. (Visitate il nostro sito http://www.orbits.com/ per vedere di cosa ci occupiamo.) 22.. CCoommee CCoonnffiigguurraarree iill VVoossttrroo SSeerrvveerr ppeerr llaanncciiaarree PPrrooggrraammmmii JJaavvaa CCGGII ((ccoonn SSppiieeggaazziioonnii)) 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)''. 22..11.. RReeqquuiissiittii ddii SSiisstteemmaa 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. 22..22.. IIll SSooffttwwaarree AAdddd--OOnn ddii JJaavvaa CCGGII 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). 22..33.. CCoommee ddeeccoommpprriimmeerree iill PPaacccchheettttoo SSoorrggeennttee 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). 22..44.. LLee DDiirreeccttoorryy ddii IInnssttaallllaazziioonnee 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. 22..55.. CCoommee TTeessttaarree ll''iinnssttaallllaazziioonnee.. 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. 33.. CCoommee CCoonnffiigguurraarree iill VVoossttrroo SSeerrvveerr ppeerr llaanncciiaarree PPrrooggrraammmmii JJaavvaa CCGGII ((ffoorrmmaa aabbbbrreevviiaattaa)) · 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. 44.. CCoommee EEsseegguuiirree uunn PPrrooggrraammmmaa JJaavvaa CCGGII 44..11.. OOssttaaccoollii qquuaannddoo ssii llaanncciiaannoo PPrrooggrraammmmii JJaavvaa ssoottttoo iill MMooddeelllloo CCGGII Esistono due problemi principali nel lanciare un programma Java da un server Web: 44..11..11.. NNoonn ssii ppoossssoonnoo llaanncciiaarree pprrooggrraammmmii JJaavvaa ccoommee nnoorrmmaallii eesseegguuiibbiillii.. 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. 44..11..22.. CCoonn JJaavvaa nnoonn ssii hhaa uunn aacccceessssoo ggeenneerraallee aallllee vvaarriiaabbiillii dd''aammbbii­­ eennttee.. Ogni variabile d'ambiente necessaria al programma Java deve essere passata esplicitamente. Non esiste un metodo simile alla funzione CC getenv(). 44..22.. SSuuppeerraarree ii PPrroobblleemmii llaanncciiaannddoo PPrrooggrraammmmii JJaavvaa CCGGII Per eliminare questi ostacoli, ho scritto un programma CGI di shell che fornisce le informazioni necessarie all'interprete Java. 44..22..11.. LLoo ssccrriipptt jjaavvaa..ccggii.. 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''. 44..22..22.. CCoommee UUttiilliizzzzaarree iill jjaavvaa..ccggii ddaa uunn ffoorrmm HHTTMMLL.. I forms che usano i programmi Java CGI specificano delle azioni come di seguito formalizzato:
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. 55.. UUttiilliizzzzoo ddeellllee CCllaassssii JJaavvaa.. 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. 55..11.. CCGGII 55..11..11.. SSiinnttaassssii ddeellllaa CCllaassssee public class CGI 55..11..22.. DDeessccrriizziioonnee ddeellllaa CCllaassssee 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 ssuubbmmiitt. Tutte le informazioni sono memorizzate in un oggetto della classe Properties. Questa classe è nel pacchetto ``Orbits.net''. 55..11..33.. SSoommmmaarriioo ddeeii mmeemmbbrrii ddeellllaa CCllaassssee ______________________________________________________________________ CGI() // Costruttore. getNames() // Prende la lista di nomi. getValue() // Prende il valore del form specificando il nome. ______________________________________________________________________ 55..11..44.. VVeeddii AAnncchhee CGI_Test. 55..11..55.. CCGGII(()) OObbiieettttiivvoo Costruisce un oggetto che contiene i dati CGI disponibili. SSiinnttaassssii public CGI() DDeessccrriizziioonnee Quando viene costruito un oggetto CGI, tutte le informazioni disponibili vengono assorbite ed immagazzinate localmente al nuovo oggetto. 55..11..66.. ggeettNNaammeess(()) OObbiieettttiivvoo Lista i nomi che sono definiti per avere valori corrispondenti. SSiinnttaassssii public Enumeration getKeys () DDeessccrriizziioonnee Fornisce la lista intera di nome per i quali sono definiti valori corrispondenti. RReessttiittuuiissccee Una Enumerazione di tutti i nomi definiti. 55..11..77.. ggeettVVaalluuee(()) OObbiieettttiivvoo Ricerca i vvaalloorrii associati al nnoommee specificato. SSiinnttaassssii public String getValue ( String name ) DDeessccrriizziioonnee Questo metodo fornisce una corrispondenza tra nomi e valori inviati da un form HTML. PPaarraammeettrrii nnaammee La chiave con la quale i valori vengono selezionati. RReessttiittuuiissccee Una Stringa che contiene il valore. 55..22.. CCGGII__TTeesstt 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. 55..22..11.. SSoommmmaarriioo ddeeii mmeemmbbrrii ddeellllaa CCllaassssee ______________________________________________________________________ main() // Programma main(). ______________________________________________________________________ 55..22..22.. VVeeddii AAnncchhee CGI. 55..22..33.. mmaaiinn(()) OObbiieettttiivvoo Fornire un metodo main(). SSiinnttaassssii public static void main( String argv[] ) DDeessccrriizziioonnee Questo è il punto di ingresso del programma CGI che restituisce una lista delle coppie nomi/valori disponibili e il loro valore attuale. PPaarraammeettrrii aarrggvv[[]] Argomenti passati al programma dallo script java.cgi. Attualmente inutilizzato. 55..33.. EEmmaaiill 55..33..11.. SSiinnttaassssii ddeellllaa CCllaassssee public class Email extends Text 55..33..22.. DDeessccrriizziioonnee ddeellllaa CCllaassssee 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''. 55..33..33.. SSoommmmaarriioo ddeeii mmeemmbbrrii ddeellllaa CCllaassssee ______________________________________________________________________ Email() // Costruttore. send() // Invia un messaggio e-mail. sendTo() // Aggiunge un destinatario al messaggio. subject() // Imposta il Subject del messaggio. ______________________________________________________________________ 55..33..44.. VVeeddii AAnncchhee Email_Test, Text. 55..33..55.. EEmmaaiill(()) OObbiieettttiivvoo Costruisce un oggetto che conterrà un messaggio email. SSiinnttaassssii public Email() DDeessccrriizziioonnee Costruisce un messaggio vuoto da completare da parte dei metodi Email. VVeeddii AAnncchhee Text. 55..33..66.. sseenndd(()) OObbiieettttiivvoo Invia un messaggio e-mail. SSiinnttaassssii public void send () DDeessccrriizziioonnee Formatta ed invia il messaggio. Se non viene specificato un indirizzo di destinazione, non viene intrapresa alcuna azione. 55..33..77.. sseennddTToo(()) OObbiieettttiivvoo Aggiunge una destinazione per questo messaggio. SSiinnttaassssii public String sendTo ( String address ) DDeessccrriizziioonnee 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. PPaarraammeettrrii aaddddrreessss Una destinazione a cui inviare il messaggio. 55..33..88.. ssuubbjjeecctt(()) OObbiieettttiivvoo Imposta l'oggetto/subject per questo messaggio. SSiinnttaassssii public void subject ( String subject ) DDeessccrriizziioonnee 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. PPaarraammeettrrii ssuubbjjeecctt Il testo della riga Subject: del messaggio. 55..44.. EEmmaaiill__TTeesstt 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. 55..44..11.. SSoommmmaarriioo ddeeii mmeemmbbrrii ddeellllaa CCllaassssee ______________________________________________________________________ main() // Programma main(). ______________________________________________________________________ 55..44..22.. VVeeddii AAnncchhee Email. 55..44..33.. mmaaiinn(()) OObbiieettttiivvoo Fornisce un metodo main(). SSiinnttaassssii public static void main( String argv[] ) DDeessccrriizziioonnee 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. PPaarraammeettrrii aarrggvv[[]] Argomenti passati al programma dallo script java.cgi. Attualmente inutilizzato. 55..55.. HHTTMMLL 55..55..11.. SSiinnttaassssii ddeellllaa CCllaassssee public class HTML extends Text 55..55..22.. DDeessccrriizziioonnee ddeellllaa CCllaassssee 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''. 55..55..33.. SSoommmmaarriioo ddeeii mmeemmbbrrii ddeellllaa CCllaassssee ______________________________________________________________________ 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. ______________________________________________________________________ 55..55..44.. VVeeddii AAnncchhee HTML_Test, Text. 55..55..55.. HHTTMMLL(()) OObbiieettttiivvoo Costruisce un oggetto che contiene un messaggio HTML. SSiinnttaassssii public HTML() DDeessccrriizziioonnee Costruisce un messaggio vuoto da completare con i metodi HTML. VVeeddii AAnncchhee Text. 55..55..66.. aauutthhoorr(()) OObbiieettttiivvoo Imposta il nome dell'autore del documento. SSiinnttaassssii public void author ( String author ) DDeessccrriizziioonnee Imposta il nome dell'autore del documento in author. PPaarraammeettrrii aauutthhoorr Il testo da usare come autore di questo messaggio. VVeeddii AAnncchhee title(). 55..55..77.. ddeeffiinniittiioonnLLiisstt(()) OObbiieettttiivvoo Avvia una definition list. SSiinnttaassssii public void definitionList () DDeessccrriizziioonnee 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 VVeeddii AAnncchhee definitionListTerm(), endList(), listItem(). 55..55..88.. ddeeffiinniittiioonnLLiissttTTeerrmm(()) OObbiieettttiivvoo Aggiunge un termine alla definition list. SSiinnttaassssii public void definitionListTerm () DDeessccrriizziioonnee 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. VVeeddii AAnncchhee definitionList(), listItem(). 55..55..99.. eennddLLiisstt(()) OObbiieettttiivvoo Termina una lista. SSiinnttaassssii public void endList () DDeessccrriizziioonnee 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_. VVeeddii AAnncchhee definitionList(). 55..55..1100.. lliissttIItteemm(()) OObbiieettttiivvoo Aggiunge una voce nella lista. SSiinnttaassssii public void listItem () public void listItem ( String item ) public boolean listItem ( String term, String item ) DDeessccrriizziioonnee 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. PPaarraammeettrrii iitteemm Il testo di questo ingresso di lista. tteerrmm Il testo di questa parte del termine di ingresso della definition list. VVeeddii AAnncchhee definitionList(), definitionListTerm(), endList(). 55..55..1111.. sseenndd(()) OObbiieettttiivvoo Invia un messaggio HTML. SSiinnttaassssii public void send () DDeessccrriizziioonnee Invia un messaggio HTML. 55..55..1122.. ttiittllee(()) OObbiieettttiivvoo Imposta il testo per il titolo del documento. SSiinnttaassssii public void title ( String title ) DDeessccrriizziioonnee Imposta il testo per il titolo del documento. PPaarraammeettrrii ttiittllee Il testo del titolo del documento. VVeeddii AAnncchhee author(). 55..66.. HHTTMMLL__TTeesstt 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. 55..66..11.. SSoommmmaarriioo ddeeii mmeemmbbrrii ddeellllaa CCllaassssee ______________________________________________________________________ main() // Programma main(). ______________________________________________________________________ 55..66..22.. VVeeddii AAnncchhee HTML. 55..66..33.. mmaaiinn(()) OObbiieettttiivvoo Fornire un metodo main(). SSiinnttaassssii public static void main( String argv[] ) DDeessccrriizziioonnee Questo è il punto di ingresso del programma CGI che restituisce una lista delle coppie nomi/valori disponibili e il loro valore attuale. PPaarraammeettrrii aarrggvv[[]] Argomenti passati al programma dallo java.cgi. Attualmente inutilizzato. 55..77.. TTeexxtt 55..77..11.. SSiinnttaassssii ddeellllee CCllaassssii public abstract class Text 55..77..22.. DDeessccrriizziioonnee ddeellllee CCllaassssii 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''. 55..77..33.. MMeemmbbeerr SSuummmmaarryy ______________________________________________________________________ Text() // Costruttore. add() // Aggiunge testo a questo oggetto. addLineBreak() // Aggiunge un terminatore di riga. addParagraph() // Aggiunge un terminatore di paragrafo. ______________________________________________________________________ 55..77..44.. VVeeddii AAnncchhee Email, HTML. 55..77..55.. aadddd(()) OObbiieettttiivvoo Aggiunge del testo a questo elemento. SSiinnttaassssii public void add ( char addition ) public void add ( String addition ) public void add ( StringBuffer addition ) DDeessccrriizziioonnee Aggiunge addition ai contenuti di questo elemento di testo. PPaarraammeetteerr aaddddiittiioonn Testo da aggiungere all'elemento di testo. VVeeddii AAnncchhee addLineBreak(), addParagraph(). 55..77..66.. aaddddLLiinneeBBrreeaakk(()) OObbiieettttiivvoo Forza una terminazione di riga nel punto esatto del testo. SSiinnttaassssii public void addLineBreak () DDeessccrriizziioonnee Aggiunge una terminazione di riga al testo nel punto attuale. VVeeddii AAnncchhee add(), addParagraph(). 55..77..77.. aaddddPPaarraaggrraapphh(()) OObbiieettttiivvoo Comincia un nuovo paragrafo. SSiinnttaassssii public void add () DDeessccrriizziioonnee Cominicia un nuovo paragrafo in questo punto del testo. VVeeddii AAnncchhee add(), addLineBreak(). 66.. PPiiaannii FFuuttuurrii · Aggiungere alla classe Email: EEmmaaiill(( iinntt ccaappaacciittyy )) Usato quando conosciamo quanto spazio necessita al messaggio per essere allocato. sseennddTToo(( SSttrriinngg [[]] aaddddrreessss )) Aggiunge una lista di destinazioni primarie al messaggio e-mail. sseennddCCcc(( SSttrriinngg aaddddrreessss )) Aggiunge una destinazione Carbon-Copy al messaggio e-mail. sseennddCCcc(( SSttrriinngg [[]] aaddddrreessss )) Aggiunge una lista di destinazioni Carbon-Copy al messaggio e- mail. sseennddBBcccc(( SSttrriinngg aaddddrreessss )) Aggiunge una destinazione Blind Carbon-Copy al messaggio e-mail. sseennddBBcccc(( SSttrriinngg [[]] aaddddrreessss )) Aggiunge una lista di destinazioni Blind Carbon-Copy al messaggio e-mail. · Aggiungere alla classe HTML: HHTTMMLL(( iinntt ccaappaacciittyy )) Usato quando conosciamo quanto spazio necessita al messaggio per essere allocato. ppuubblliicc vvooiidd uunnoorrddeerreeddLLiisstt(()) Avvia una lista non-ordinata. ppuubblliicc vvooiidd oorrddeerreeddLLiisstt(()) Avvia una lista ordinata. ppuubblliicc vvooiidd ddiirreeccttoorryyLLiisstt(()) Avvia una lista di directory. ppuubblliicc vvooiidd mmeennuuLLiisstt(()) Avvia una lista di menu. vvooiidd aanncchhoorr(( SSttrriinngg aanncchhoorrNNaammee )) Specifica un anchor. vvooiidd lliinnkk(( SSttrriinngg uurrll,, SSttrriinngg tteexxtt )) Specifica un link. vvooiidd aapppplleett(( SSttrriinngg uurrll,, SSttrriinngg aallttTTeexxtt )) 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. 77.. VVaarriiaannttii 77..11.. VVaarriiaannttii ddaa 00..33 aa 00..44 · 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. 77..22.. VVaarriiaannttii ddaa 00..22 aa 00..33 · 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. 77..33.. VVaarriiaannttii ddaa 00..11 aa 00..22 · 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.