Switch to American English
Giovanni's logo Scrivi l'HTML in uno stream file
(Pagine dinastatiche)
this means Version 2
indice analitico
M
power search
blue line
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:

  1. Si sviluppi l'HTML esterno al solito modo, come si farebbe per un programma CGI, ma
    1. si eviti di generare la testata http iniziale
      Content-type: text/html
      (dato che si vuole generare una pagina statica)
  2. 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)
    1. 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)
    2. 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:
    1. La parte "nome del file" nella variabile "stream file" non deve superare i 245 byte di lunghezza.
    2. Si crei il programma con actgrp(*new).
    3. 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.
    4. 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
    1. addlible cgidev2
    2. immetti il comando
      CGIDEV2/RANDOMNBRS STMF('/cgidev/randomnbrs.htm') CODEPAGE(819)
  • Si visualizzi quindi la pagina statica generata.