Si possono presentare casi in cui una pagina,
creata con un CGI (pagina dinamica),
- viene accessa ad alta frequenza
- implica un processo non trascurabile per la sua costruzione,
con il risultato di avere un tempo di risposta troppo lungo
- ed il suo contenuto può variare
in tempi imprevedibili
Per fare qualche esempio:
- La la nostra pagina sugli
iscritti ad asy400.net
- e comunque tutte le pagine contenenti dati statistici
Un modo interessante di servire tali richieste
è quello di costruire dei processi dinamici
per generare delle pagine statiche:
- il tempo di risposta è estremamente migliore
- il carico macchina si riduce sostanzialmente
- la generazione della pagina statica può essere
agganciata ad un evento oppure programmata
ad intervalli regolari.
La realizzazione di un tale processo è molto semplice.
Si tratta di scrivere un programma batch simile ad un CGI
e di agganciarlo a qualche evento o ad una
pianificazione temporale.
Ecco come si costruisce un tale programma:
- Si sviluppi l'HTML esterno al solito modo,
come si farebbe per un programma CGI, ma
- si eviti di generare la testata http iniziale
Content-type: text/html
(dato che si vuole generare una pagina statica)
- Si sviluppi il programma come se fosse un CGI
utilizzando il nostro service program CGISRVPGM2
(si può utilizzare il nostro comando
per creare un esempio di sorgente CGI)
- si eviti di leggere e di fare il parsing
della stringa di input
(si cancelli lo statement
/copy .../qrpglesrc,prolog1/2/3
generato dal comando cgidev2/crtcgisrc)
- invece di spedire il buffer di html al browser
con l'istruzione
callp wrtsection('*fini')
lo si salvi come stream file IFS
con l'istruzione
WrtHtmlToStmf():
D Stmf s 512 inz('/web/dynapage1.html')
D CodePage s 10i 0 inz(819)
D rc s 10i 0 inz(819)
* If "codepage" parameter omitted, code page is assigned by the
* system
C if codepage > 0
C eval rc = WrtHtmlToStmf(%trim(Stmf):CodePage)
C else
C eval rc = WrtHtmlToStmf(%trim(Stmf))
C endif
C callp ClrHtmlBuffer |
Note:
- La parte "nome del file" nella variabile "stream file"
non deve superare i 245 byte di lunghezza.
- Si crei il programma con
actgrp(*new).
- Se lo stesso programma viene utilizzato per creare pił di uno stream file,
occorre assicurarsi di chiamare la procedura ClrHtmlBuffer (clear the output buffer) subito dopo
ogni chiamata alla procedura WrtHtmlToStmf. In questo modo si evitano orrende sovrapposizioni
tra le varie immagini degli stream file depositate nel buffer di output.
- Se invece si vuole aggiungere il buffer html
in coda ad uno stream file già esistente,
occorre usare la procedura AppHtmlToStmf():
D Stmf s 512 varying
D inz('/web/dynapage1.html')
D rc s 10i 0
C eval rc = AppHtmlToStmf(Stmf) |
Esempio di una pagina dinamica/statica:
- Si
visualizzi il sorgente
del nostro programma di esempio. Esso genera una pagina
contenente dei numeri a caso. Per eseguire tale programma
- addlible cgidev2
- immetti il comando
CGIDEV2/RANDOMNBRS STMF('/cgidev/randomnbrs.htm') CODEPAGE(819)
- Si visualizzi quindi la
pagina statica generata.
|