Switch to American English
Giovanni's logo
Ricevi l'input dal browser client
questo significa Versione 2
indice analitico
M
power search
blue line



1. La stringa di input

Un browser remoto (client) ha tre modi per spedire input ad un programma CGI:

  1. 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>
    Il tuo nome:
    Il tuo cognome:
    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.

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

  3. 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.
blue line


2. I metodi GET e POST

Due sono le modalità di spedizione di una stringa di input ad un programma CGI.

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

Se vuoi, puoi richiamare un Programma dimostrativo sui metodi GET e POST.
Questo programma ti consente di scegliere tra il metodo GET ed il metodo POST, in modo tale che tu possa vedere la differenza dell'URL.
Inoltre questo programma ti insegna come costruire dinamicamente nel tuo CGI un link da emettere nella pagina WEB di output.

blue line


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

Dopo aver eseguito la procedura ZhbGetInput il programma può iniziare a ricevere le variabili in input alla transazione CGI utilizzando la procedura ZhbGetVar.

Nota importante su ZhbGetInput. Quando si usa il metodo POST, la procedura ZhbGetInput può essere usata una volta solo nel programma. Se la si usa una seconda volta, le variabili di input non possono più essere ricevute. Ad esempio: se si usa il metodo POST, la transazione è elaborata da un programma composto da due moduli/programmi A e B, dove A e B lanciano entrambi la procedure ZhbGetInput, A non ha problemi nel ricevere le variabili di input, mentre B - dopo aver emesso la ZhbGetInput - riceverà valori in bianco per tutte le variabili. Se tuttavia si rimuove la ZhbGetinput di B, anche B riceve le variabili. Questo problema deriva dalla API QzhbCgiParse dell'IBM System i, vedi questa pagina IBM.

Come esempio pratico, si veda il sorgente del programma template3.