1. La stringa di input
Un browser remoto (client) ha tre modi per spedire input
ad un programma CGI:
- Tramite un form HTML. Per esempio:
| script html |
che si presenta così |
<form method="post" action="/cgidev2p/hello1.pgm">
Il tuo nome:
<input type="text" name="firstname"
 
size="10" maxlength="30"><br>
Il tuo cognome:
<input type="text" name="lastname"
 
size="10" maxlength="30"><br>
<center>
<input type="submit" value="Invio">
</center>
</form>
|
|
In questo caso, quando l'utente remoto,
dopo aver immesso i dati nei due campi di input,
preme il bottone di Invio, al programma
hello1
viene spedita la stringa:
firstname=George&lastname=Brown
dove George e Brown sono i valori
immessi nei due campi di input del form.
- Da una tag anchor (<a>...</a>)
di uno script HTML. Per esempio, l'anchor seguente
<a href="/cgidev2p/hello1.pgm?firstname=George&lastname=Brown">Dì
ciao a George Brown</a>
spedisce la stessa stringa al programma
hello1.
- Dalla riga comandi del browser (riga location)
Per esempio, se in questa riga si immettesse
http://.../cgidev2/hello1.pgm?firstname=George&lastname=Brown
si spedirebbe ancora la stessa stringa al programma
hello1.
2. I metodi GET e POST
Due sono le modalità di spedizione di una stringa di input
ad un programma CGI.
- Tramite il metodo GET.
Ciò si realizza implicitamente quando la spedizione
avviente tramite una tag anchor
(<a> href=...</a>)
oppure attraverso la linea comandi del browser.
Il metodo GET può anche essere utilizzato
in un
form.
Ciò generalmente si fa a fini di test.
Infatti, quando si utilizza il metodo GET
la stringa di input è sempre visualizzata
nella riga comandi del browser.
- Con il metodo POST.
Questo è quanto comunemente si fa in un
form.
Infatti, quando si utilizza il metodo POST
la stringa di input non viene mai visualizzata
all'utente finale.
Usare un metodo o l'altro ha implicazioni diverse
sul reperimento della stringa da parte del CGI.
Tuttavia, uno dei tanti meriti del service program
di Mel Rothman, è proprio quello di rendere
la scrittura del CGI indipendente dal metodo (GET o POST)
utilizzato dal browser.
Le procedure di "lettura" della stringa,
qui di seguito esposte, provvedono da sole a
determinare in quale modo la stringa sia stata inviata
e quindi a reperirla nel modo appropriato.
Ribadiamo quindi che i programmi CGI sviluppati con il
metodo Rothman non sono sensibili
al metodo (GET o POST) utilizzato dal browser
per l'invio della stringa.
3. Procedura per leggere la stringa di input
Per acquisire il buffer di input spedito dal browser del client, il programma CGI deve utilizzare la sottoprocedura
zhbGetInput.
zhbGetInput
usa l'API QzhbCgiParse per reperire l'input dal browser
e per sistemarlo in un insieme di schiere interne
ed allocate dinamicamente.
Queste schiere saranno poi usate con ottime prestazioni
dalle procedure di parsing
ZhbGetVarCnt,
ZhbGetVar e
ZhbGetVarUpper.
Attenzione.
Per poter funzionare correttamente, l'API QzhbCgiParse
necessita che la variabile d'ambiente (environment variable) CGIConvMode contenga il valore
%%EBCDIC/EBCDIC%% (non il valore %%MIXED/MIXED%%). In caso negativo, ZhbGetInput
scriverebbe un messaggio di errore nel file di debug
CGIDEBUG e consentirebbe al programma di continuare
fintantochè fallisce.
Per poter usare ZhbGetInput correttamente, e necessario aggiungere la seguente direttiva alle direttive
della istanza HTTP:
|
| | CGIConvMode %%EBCDIC/EBCDIC%% |
L'esempio seguente ilustra come usare ZhbGetInput in un programma CGI:
* Definizione dei prototipi e della DS standard per i codici errore delle API
/copy CGIDEV2/qrpglesrc,prototypeb
/copy CGIDEV2/qrpglesrc,usec
* Numero di variabili di input ricevute
DnbrVars s 10i 0
*
* Query string ricevuta
Dsavedquerystring...
D s 32767 varying
*
... etc. ...
* Acquisisci il buffer di input spedito dal browser del client
C eval nbrVars =
C zhbGetInput(savedquerystring:qusec)
|
In alternativa si puņ utilizzare il codice seguente:
* Definizione dei prototipi e della DS standard per i codici errore delle API
/copy CGIDEV2/qrpglesrc,prototypeb
/copy CGIDEV2/qrpglesrc,usec
* Variabili predefinite
/copy CGIDEV2/qrpglesrc,variables3
... etc. ...
* Acquisisci il buffer di input spedito dal browser del client
/copy CGIDEV2/qrpglesrc,prolog3
|
Come esempio pratico, si veda il sorgente del programma
template3.
|