700 likes | 802 Views
Basi di dati e Web. Prof. Stefano Paraboschi Prof. Barbara Pernici. GATEWAY. I server Web possono richiamare qualunque programma trasmettendo anche eventuali parametri collegamento tra ambiente web e altri ambienti chiamata dei programmi: http, URL, eventuali parametri. Web server e file.
E N D
Basi di dati e Web Prof. Stefano Paraboschi Prof. Barbara Pernici
GATEWAY • I server Web possono richiamare qualunque programma • trasmettendo anche eventuali parametri • collegamento tra ambiente web e altri ambienti • chiamata dei programmi: http, URL, eventuali parametri
Web server e file FILE SYSTEM - pagine statiche A.html D.html B.html C.html Web client (browser) HTTP Web server CGI Cgi-bin Xyz.exe abc.exe Pagine eseguibili
? ? Common Gateway Interface • Meccanismo che consente al Web Server di eseguire applicazioni esterne in grado di creare pagine dinamicamente
%&£$$ pp*&£$ Caratteristiche di CGI • Non e’: • un linguaggio di programmazione • un protocollo di comunicazione • Definisce solo un insieme di variabili di ambiente utili alla applicazione (ad es. parametri inviati dal client)
http://mio.server.web/cgi-bin/xyz.exe ? Esecuzione 1.Il server riconosce dall’URl che la risorsa richiesta dal cliente e’ un eseguibile
http://mio.server.web/cgi-bin/xyz.exe?#^@@ ? #^@@ P$&*£ Esecuzione • 2.Il server decodifica i parametri inviati dal cliente e riempie le variabili d’ambiente • es: request_method, query_string, content_length, content_type
#^@@ P$&*£ Esecuzione 3.Il server lancia in esecuzione l’applicazione richiesta
Esecuzione 4. L’applicazione stampa la sua risposta sullo standard output (la risposta puo’ essere una pagina web o di altro tipo - il tipo e’ dichiarato nella risposta)
Esecuzione 5.Il server ridireziona lo standard output sulla rete e quindi verso il client
Invio di parametri a un programma CGI • Il client puo’ usare due metodi: • GET • POST • GET: i parametri sono codificati nell’URLhttp://www.mioserver.it/cgi-bin/xyz?par=val • POST : i parametri sono spediti al server separatamente, usando il body del messaggio di richiesta HTTP • NB: il metodo POST richiede l’uso di un costrutto HTML chiamato FORM
Form (moduli) • Input dall’utente • Come: con parametri (<INPUT type=): • text boxes (text) • buttons (submit) • radio buttons (radio) • password (password) • hidden (valore fisso, non visibile all’utente) • i parametri hanno un nome a cui si associa un valore compilando la form • submit: si invia il contenuto del modulo al server come parte di un’altra richiesta http di una pagina speciale (eseguibile)
FORM HTML Esempio: invio al server il nome dell’utente <form action=http://www.mysrvr.it/cgi-bin/xyz.exe method=post> <p>Dimmi il tuo nome: <inputtype=“text” name=“chisei” ></p> <inputtype=“submit” > </form>
FORM HTML <HTML> <BODY> <form action=http://www.mysrvr.it/cgi-bin/xyz.exe method=post> <p>Dimmi il tuo nome: <input type="text" name=“chisei” ></p> <input type="hidden" name=“sessione” value="123" > <p>Password: <input type="password" name=“pwd” ></p> <p> <input type="radio" name="tipo" value="doc">docente</p> <p> <input type="radio" name="tipo" value="stud">studente</p><input type="submit" value="VAI"> <input type="reset"> </form> </BODY> </HTML>
stampa codice HTML Struttura di un programma CGI leggi le variabili d’ambiente elabora cout << “Content-type: text/html” << endl << endl; stampa intestazione MIME
Valore? GET POST leggi la variabile Query_string leggi la variabile content_length leggi content_length caratteri da standard input Decodifica dei parametri leggi la variabile Request_method
Programmi eseguibili • per selezionare pagine • Per accedere a pagine riservate • per accedere a servizi • per accedere a basi di dati
A “unique” page-scheme: ProfessorListPage ProfessorListPage ProfessorList Name ToProfP
An ADM Scheme ProfessorListPage ProfessorPage ProfessorList Name Name ToProfP Position Address EMail ResearchList Area ToResP
Name Submit Name U ProfessorList Position Name Address ToProfP EMail ResearchList Area ToResP Heterogeneous Union and Forms in ADM SearchProfPage ProfessorListPage ProfessorPage
Maintenance • The Schemes help designers to maintain the hypertext structure • Maintenance activities correspond to apply scheme transformations: • introduce multilevel lists • introduce forms • split pages • ...
Web & basi di dati • Obiettivi: • ottenere la generazione dinamica di pagine a partire da dati contenuti in una base di dati • sfruttare i pregi di Web e basi di dati, aggirandone i difetti
Web basi di dati Pregi e difetti di basi di dati e Web pro contro • semplice • portabile • a basso costo • indipendente dalle interfacce • ipermediale • basato su file • statico • modelli dei dati • linguaggi di interrogazione • funzioni di amministazione • complesse • proprietarie • navigazione e presentazione assenti
CGI via DBMS API, embedded SQL, ODBC ... DBMS Programma CGI Web server gateway gateway
http://mio.server.web/cgi-bin/xyz.exe ? root cgi-bin xyz.exe Invocazione • Il cliente specifica nell’URL il nome del programma da eseguire • Il programma deve stare in una posizione precisa (di solito il direttorio cgi-bin)
Esempio di CGI per accesso a DB main(char Cognome[]) { char Nome[20], Dipartimento[20], Citta[20]; char Indirizzo[60]; int Age, Stipendio; $ open connection to NewCompanyDB $ select Nome, Dipart, Citta, Indirizzo, Stipendio into :Nome, :Dipart, :Citta, :Indirizzo, :Stipendio from Impiegato I, Sede S where I.Sede = S.Citta and Cognome = :Cognome ; $ close connection ...
if (sqlcode == 0){ printf("<html>\n<head><title> %s %s",Nome,Cognome, "</title></head>\n<body>\n"); printf("<H3> %s %s",Nome,Cognome,"</H3>\n"); printf("<table>\n"); printf("<tr><td><em>Dipartimento</em>:</td><td>%s", Dipartimento,"</td></tr>\n"); printf("<tr><td><em>Citta</em>:</td><td>%s",Citta,“ </td></tr>\n"); printf("<tr><td><em>Indirizzo</em>:</td><td>%s", Indirizzo,"</td></tr>\n"); printf("<tr><td><em>Stipendio</em>:</td><td>%u", Stipendio,"</td></tr>\n"); printf("<tr><td><a href=\"/cgi-bin/ProjOfEmp?Cognome=%s", Cognome,"\">Progetti in corso</a></td><td> </td></tr>\n"); printf("</table>\n</body>\n</html>"); } else { printf("<html>\n<head><title>Error</title></head>\n<body>\n"); printf("niente impiegato %s\n",Cognome,"</body>\n</html>"); } }
Programma CGI per l’accesso a DB • PRO • portabilità: usa solo standard aperti: URL, HTTP, CGI, HTML (attenzione però all’accesso al DB) • CONTRO • prestazioni: creazione di un sotto-processo per ogni richiesta • aperture e chiusure ripetute della connessione con la base di dati
Form e CGI come interfacce di applicazioni • Per applicazioni di qualsiasi tipo • Problemi: • identificazione utente, sicurezza • affidabilita’, transazioni • sessioni • numero di processi attivati, operazioni di apertura e chiusura
Simulazione sessioni • HTTP consente di richiedere una pagina alla volta • Simulazione di sessioni: • con hidden parameters nelle form • con cookie (max 4KB) (inviato nell’intestazione della risposta e memorizzato come parte della configurazione del browser) e dizionario stato clienti
Processo CGI: FAST-CGIhttp://www.fastcgi.com • Il web server genera il processo fast-cgi in fase di inizializzazione • Il processo esegue una routine di inizializzazione e si pone in attesa • Ad ogni richiesta, il web server apre una connessione verso il processo fast-cgi • Il processo genera output sulla connessione http con il client passatagli dal server http • Il processo fast-cgi chiude la connessione e rimane in attesa di nuove connessioni
FAST-CGI: vantaggi • Migliori prestazioni: creazione di processi fast-cgi solo in fase di inizializzazione • Mantenimento dello stato: la persistenza del processo fast-cgi consente di superare la natura stateless di http • Disponibilita’: distribuito gratuitamente da Open Market come fast-cgi library
CGI Processo CGI Web server dispatcher dispatcher Applicazione server gateway DBMS
Processo CGI • PRO • evita apertura e chiusura della connessione ad ogni richiesta • sfrutta le ottimizzazioni del DBMS • basato su standard CGI • CONTRO • prestazioni: tempo di commutazione tra processi diversi (dispatcher - server) • complessita’ realizzativa dell’interfaccia tra dispatcher e applicazione server
Gateway Web-base di dati CLIENT HTTP server DBMS GATEWAY
Una gerarchia di soluzioni Gateway su Server su client basato su API basato su CGI proprietario estensione interna estensione esterna programma CGI processo CGI
Architetture di servizi on linebasati su Web • Architettura di base • clienti dinamici • web applications • soluzioni complesse
Architettura di base LOCAL FILE SYSTEM WEB SERVER BROWSER
Clienti dinamiciscripting lato client DOM DOM BROWSER HTML Script Compiled modules
Applicazioni su web (server side) JAVA SERVLET, API DATABASE Scripting lato server ASP JSP PHP BROWSER Scripted page WEB SERVER HTML page
Applicazioni complesse:un esempio di modulo intelligente Richiesta form client Web server Risposta 3 minuti Risposta con form con inclusione script per completare citta’ da CAP CAP
Seconda soluzione Sottomissione form invocata da script Java 00198 Web server CAP Risposta 3 secondi Risposta con form ricostruito con completamento citta’ da CAP ROMA 00198 CAP
Terza soluzione L’oggetto comunica direttamente con l’application server Application server Risposta < sec Web server 00198 CAP Oggetto distribuito che comunica direttamente con un oggetto sul lato server e restituisce la citta’ dato il CAP
API Server API Web server API = interfaccia per estendere il server con servizi non standard Gateway DBMS