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