DATABASE IN RETE E
PROGRAMMAZIONE LATO SERVER
L’architettura CLIENT – SERVER è l’architettura standard dei sistemi di rete,
dove i computer detti SERVER forniscono servizi, e computer detti CLIENT,
richiedono e utilizzano tali servizi .
In questo ambiente consideriamo i protocolli della famiglia TCP/IP che sono
protocolli aperti, cioè con descrizioni tecniche che appaiono in documenti
pubblici (RFC), facilmente reperibili su Internet. Sul protocollo TCP/IP si basa
il protocollo http, che si trova ad un livello più alto.
Le pagine Internet, scritte nel linguaggio HTML, sono visualizzate dai
BROWSER, che sono visti come CLIENT UNIVERSALI, mentre i computer
server hanno bisogno di un Web Server per poter fornire i servizi. Infatti:
il Web Server è il software che implementa la parte server del
protocollo http ed è in grado di ricevere le richieste dal client, inviate
secondo lo standard http, di elaborarle e di fornire risposte sotto forma
di documento HTML.
Consideriamo il Web Server come server universale e deve essere configurato
per offrire una serie di servizi ai client, come la sicurezza dei documenti, i
diritti di accesso agli stessi, la gestione di file particolari.
PROGRAMMA LATO CLIENT E LATO SERVER
Dato un ambiente client/server, con architettura di protocolli TCP/IP e http,
intendiamo per PROGRAMMAZIONE LATO SERVER lo sviluppo di programmi
applicativi eseguiti sul server, accettando richieste dal client e fornendo a
quest’ultimo i risultati dell’elaborazione sotto forma di pagine HTML.
La PROGRAMMAZIONE LATO CLIENT è lo sviluppo di applicativi eseguiti sul
client, inviando eventuali richieste al server e gestendo i risultati ricevuti da
quest’ultimo. Esempi si programmazione lato client sono le Applet Java, il
codice JavaScript e VBScript.
Definiamo PROGRAMMAZIONE ORIENTATA AL WEB, l’insieme di tecniche e
metodologie che si utilizzano in un ambiente client/server con architettura
TCP/IP – http, per far interagire programmi lato client e server, al fine di
realizzare sistemi che possano essere eseguiti In Internet e Intranet.
Conviene usare la parte client per:
1)
2)
3)
4)
5)
6)
Convalidare l’input dell’utente se è valido.
Richiedere all’utente una conferma.
Visualizzare messaggi informativi o di errore.
Eseguire calcoli o recupero dati.
Porre condizioni nel codice HTML.
Usare altre funzioni che non richiedono l’utilizzo del server.
Conviene usare la parte server per:
1)
2)
3)
4)
5)
Mantenere le informazioni tra un accesso e l’altro da parte del client.
Mantenere i dati tra i diversi client.
Accedere ad un database ai file sul server.
Richiamare librerie di altri linguaggi.
Accedere genericamente a risorse sul server.
LINGUAGGI DI SCRIPTING E PROGRAMMAZIONE
Dobbiamo distinguere tra:
1) Linguaggi di programmazione lato server, come ad esempio Java e C.
2) Linguaggi di scripting lato server, come PHP, Perl, ASP.
Introduciamo uno pseudolinguaggio lato server detto Pserv,che useremo più
avanti, e supponiamo che esso sia un linguaggio procedurale di scripting lato
server.
CONFIGURARE IL WEB SERVER
3) La configurazione serve per permettere l’esecuzione di programmi lato
server. Ogni Web Server deve fare riferimento ad una DIRECTORY
ROOT VIRTUALE creata su disco fisso e che sarà in grado di
visualizzare le pagine web. Nel caso del nostro Pserv, occorrerà
configurare il Web Server affinchè possa interagire con Pserv e cioè:
1) Il Web Server deve riconoscere l’estensione *.Pserv dei file da eseguire.
2) Il Web Server deve saper dove si trova l’interprete Pserv da richiamare
per eseguire i file di estensione .pserv.
3) Il Web Server deve conoscere la directory del server che contiene i file
*.pserv che possono essere eseguiti.
ESECUZIONE DEI PROGRAMMI LATO SERVER
Una volta installato e configurato il Web Server, possiamo scrivere ed eseguire
le istruzione in Pserv. Supponiamo di sapere dove è posizionato l’interprete
Pserv che chiamiamo pserv.exe, e quale è la directory virtuale che conterrà i
file *.pserv. Le istruzioni Pserv possono:
1) Essere inserite all’interno di file HTML tramite opportuni tag
(embedded Pserv).
2) Far parte di file di soli comandi Pserv.
In entrambi i casi, per poter scrivere un file Pserv ed eseguirlo, occorre:
1) Scrivere un file con un comune editor di testo (Blocco Note di Windows),
come se si trattasse di un file HTML.
2) Salvare tale file con estensione *.pserv.
3) Inserirlo nella directory concordata con il Web Server.
4) Per poter inserire istruzioni Pserv in un file HTML, si utilizzano i tag
<?pserv e ?>.
Es: <?pserv
istruzioni Pserv
?>
Es: file di prova.pserv
<HTML>
<HEAD>
<TITLE> Prova con Pserv </TITLE>
</HEAD>
<BODY>
<?pserv
SCRIVI(“Prima riga stampata con Pserv”)
SCRIVI(“Seconda riga stampata con Pserv”)
?>
</BODY>
</HTML>
Per mandare tale file in esecuzione da qualsiasi browser, si digita il seguente
indirizzo:
http: // <URL Server> / >NomeFilePserv.pserv>, come ad esempio:
http: //www.minervaitalica.it/prova.pserv
Il risultato che otterremo sarà la stampa sul browser delle due righe di testo
inserite nell’istruzione SCRIVI. Verrà quindi creata dinamicamente una
pagina HTML contenente le due righe da visualizzare. Questa pagina sarà
inviata al client. Nello pseudolinguaggio si faranno precedere i nomi delle
variabili dal simbolo $.
Es: <?pserv
$Messaggio
“Ciao a tutti”
SCRIVI (Messaggio)
?>
INVIARE VALORI AL SERVER
I dati inseriti dall’utente in una pagina HTML vengono trasmesse al lato
server (Pserv) attraverso due modalità di passaggio:
1) Metodo GET
2) Metodo POST
Il primo metodo consiste nell’accodare i parametri all’indirizzo della pagina
richiesta. La sintassi è la seguente:
http: // <URL PaginaPserv> / >NomeProgamma.pserv> ?
<NomeParametro1> = <Valore Parametro1> & ……
<NomeParametroN> = <Valore ParametroN>
Al programma Pserv, i parametri possono essere passati direttamente
all’interno di un link HTML (HREF), che contiene l’indirizzo della pagina Pserv
da richiamare e i valori dei due parametri.
<HTML>
esempio1
<HEAD>
<TITLE> Passaggio di parametri in un link con metodo GET </TITLE>
</HEAD>
<BODY>
<A HREF = http://localhost/visualizza.pserv?Nome = Paolo&Cognome =
“Rossi
Visualizza </A>
</BODY>
</HTML>
Il nome e il cognome saranno visualizzati cliccando sul link “Visualizza”
presente sulla pagina Web.
Possiamo migliorare il tutto creando due campi testo di input in un form
facendo in modo che la pagina HTML funga da interfaccia utente grafica:
<HTML>
esempio2
<HEAD>
<TITLE> Passaggio di parametri al server </TITLE>
</HEAD>
<BODY>
<FORM METHOD = GET ACTION = http://localhost/visualizza.pserv>
Nome: <INPUT TYPE = “text” NAME = “Nome”> <BR>
Cognome: <INPUT TYPE = “text” NAME = “Nome”> <BR>
<INPUT TYPE = “submit” VALUE = “Invia”>
</FORM>
</BODY>
</HTML>
Il risultato su Web sarà il seguente:
Figura1: esempio1
Figura 2: esempio2
Nel secondo caso, l’attributo ACTION dell’elemento FORM specifica il nome del
file Pserv da eseguire sul server. Non appena si preme il pulsante Invia
(submit), i dati contenuti nei campi del form vengono inviati attraverso il
protocollo http al Web Server, al quale arriverà la richiesta di esecuzione dalla
pagina Visualizza.pserv, seguita dai nome e dai valori dei parametri.
In seguito l’attributo METHOD indica la modalità di trasferimento di tipo GET,
e l’attributo NAME di ogni campo testo serve per dare il nome ai parametri. Il
metodo GET presenta alcuni svantaggi come ad esempio il fatto di non essere
adatto ad effettuare i login, poiché la password sarebbe visibile, e la
limitatezza della lunghezza dell’URL.
Il metodo POST viene usato specificando il valore POST per l’attributo
METHOD e consentendo che i dati inviati non siano visibili all’utente.
L’esempio è lo stesso della pagina precedente ma con POST al posto di GET.
Per recuperare, con entrambi i metodi, si usa la notazione: $NomeParametro
<?pserv
SCRIVI (“Ciao”, $Nome, “ “ $Cognome);
?>
ACCESSO AI DATI IN AMBIENTE
INTERNET
È necessario individuare come integrare i database in un ambiente
client/server. Il Web Server accetta richieste di interrogazione di un database e
restituisce pagine HTML. Chiamiamo CLIENT SQL la parte di interfaccia
grafica che sottopone alla parte server le istruzioni SQL. Le interazioni con un
database possono essere basate:
1)
2)
3)
4)
Su TRIGGER
Su WEB SERVER
Su CLIENT
Su ODBC
Nel caso 1 abbiamo che un trigger è una procedura automatica che viene
eseguita non appena si verificano determinati eventi. Si possono creare trigger
da inserire in un database, in modo che ad ogni variazione di alcuni dati, un
opportuno trigger entri in esecuzione, estragga questi dati e crei una pagina
HTML da trasferire al client. Le pagine così create sono statiche.
Nel caso 2 bisogna disporre di un programma applicativo sul server che invia
un comando SQL al server SQL. A questo punto si crea automaticamente una
pagina HTML che rende leggibile il risultato del browser. Riassumendo, il
programma applicativo deve inviare comandi SQL al server SQL, ricevere una
risposta dal server SQL, creare una pagina HTML, restituire tale pagina al
Web Server, che poi invierà la stessa al client.
Nel caso 3, il Web Server invia al client un applicativo tipo Applet che
interagisce direttamente con il server SQL del database remoto, quindi
l’interazione avviene solo con tale server.
Nel caso 4 si usa l’ODBC (Open Database Coonnectivity) che è un’interfaccia
software standard in tutti gli ambienti e consente ai programmatori di
interfacciarsi a qualsiasi database creato da altri, purchè siano stati scritti i
driver ODBC per quel database. Per configurare tali driver bisogna specificare
il DNS cioè il tipo di database che si vuole usare e i driver per quel database.
Tale approccio non ha bisogno di un browser, non è basato su HTML e non
richiede che il database si trovi su una rete TCP/IP.
INTERAZIONE TRA WEB SERVER E SERVER SQL
La parte di DBMS che si occupa di fornire un servizio in rete si chiama server
SQL. Il programma lato server, dopo aver interagito con il server SQL e aver
ottenuto il risultato della query si può scegliere se:
Formattare direttamente sul server la pagina HTML che dovrà presentare il
risultato e poi restituirla al client.
1) Restituire al client il risultato della query con in aggiunta le relative
istruzioni per la formattazione di tale risultato. Tutto ciò, in questo caso,
avverrà sul client. L’interazione dell’utente finale è di solito limitata alla
visualizzazione dei dati già presenti nel database, e all’inserimento di
nuovi dati.
L’interazione dell’amministratore serve invece per:
a) Creare un nuovo database o modificare o modificare uno schema già
esistente per adattarlo e migliorarlo.
b) Impostare gli account per gli utenti accreditati.
c) Configurare le politiche di sicurezza dei dati e in particolare si
possono creare due diversi livelli di sicurezza: un primo livello
mediante il quale si identificano, e si permette l’accesso per gli utenti
al Web Server mediante login, e un secondo livello in cui si
identificano e si permette l’accesso per gli utenti al database
mediante login dello stesso. Può anche esistere il login di rete, che
permette l’accesso agli utenti alla particolare rete nella quale è
presente il Web Server.
PROGRAMMAZIONE LATO SERVER E
DATABASE
Consideriamo l’esempio di un piccolo negozio on line. In questo contesto
creiamo il database Negozio e la tabella Prodotti, e assegniamo i permessi di
accesso attraverso l’inserimento di username e password.
Il nostro obiettivo è quello di realizzare una semplice applicazione che consenta
di:
1) Inserire un nuovo prodotto nel database.
2) Visualizzare gli articoli presenti nel database
3) Modificare o cancellare un prodotto inserito.
La videata iniziale dell’applicazione apparirà così, assieme ai relativi file:
INSERIMENTO DI UN NUOVO PRODOTTO
In questo caso il listato sarà il seguente:
Il file produce il seguente risultato:
Nel listato precedente abbiamo che l’attributo ACTION dell’elemento FORM
specifica il nome del file Pserv da invocare sul server. Non appena si preme il
pulsante Inserisci il nuovo prodotto, i dati contenuti nei campi del form
verranno inviati attraverso il protocollo http al Web Server. Quest’ultimo
eseguirà la pagina NuovoProdotto.pserv, alla quale trasmetterà i parametri
relativi al codice del prodotto, alla categoria, descrizione, prezzo e quantità.
Vediamo ora il file NuovoProdotto.pserv, che alimenta la tabella Prodotti con i
valori ricevuti dal form.
I passi da eseguire sono i seguenti:
Stabilire una connessione con il server SQL attraverso la pseudo istruzione:
PseudoSQLConnetti (<URL Server>, <Utente>, <Password>)
Questa pseudoistruzione restituisce un intero detto identificativo o ID
di connessione che individua la connessione aperta: se viene restituito
– 1 vuol dire che il collegamento non è andato a buon fine. In molti
linguaggi lato server la connessione può essere persistente cioè viene
lasciata aperta per un certo tempo, al fine di poterla poi riutilizzare.
1) Selezionare un database attraverso la seguente pseudoistruzione:
SelezionaDB (<IDConnessione>,<NomeDatabase>)
Anche SelezionaDB restituisce – 1 se l’operazione fallisce. Nel nostro
caso ci connettiamo al database Negozio.
2) Impostare la query memorizzandola all’interno di una variabile. Nel
nostro caso la variabile $Query contiene la query da eseguire:
3) Eseguire la query tramite la pseudoistruzione:
Esegui (<IDConnessione>, <Query>)
4) Chiudere la connessione con il server SQL attraverso la pseudo
istruzione:
Chiudi (<IDConnessione>)
VISUALIZZARE I PRODOTTI PRESENTI IN NEGOZIO
Supponiamo di eseguire una query
per vedere il listino completo dei
prodotti in catalogo. La pagina
HTML conterrà una tabella nella
quale vedremo gli articoli in negozio
pronti per la vendita.
La pseudoistruzione:
PrelevaOggetto (<NomeTabellaRisultato>, <NumRiga>)
restituisce
la
riga
di
un
numero
<NumRiga>
della
tabella
(<NomeTabellaRisultato>. Nel nostro caso PrelevaOggetto restituisce nella
variabile $Dati una riga alla volta, prelevandola dalla tabella contenente il
risultato della query. Dopo di ciò, si formatta il risultato dell’interrogazione,
aggiungendo ad esempio le immagini relative ad un prodotto, un elenco di
fornitori relativi ad un prodotto, dati in formato grafico in formato XML.
Tutto ciò è possibile modificando il frammento di codice relativo al ciclo
“MENTRE”.
Se vogliamo visualizzare un elenco con link legati
ad altre query, dobbiamo anche in questo caso,
modificare il corpo del ciclo MENTRE. All’interno
della tabella deve essere visualizzato un link sul
codice del prodotto come mostrato in figura
La modifica del ciclo MENTRE è mostrata qui sotto:
Il file che si occuperà di effettuare la query per la selezione dei fornitori di un
certo articolo è il seguente:
L’output prodotto è il
seguente: