Lezione Precedente
Lezione Successiva

Laboratorio di Sistemi Informativi

Architettura a 3 livelli e server web

Strutture a due e tre livelli

Finora abbiamo visto come adoperare MySQL utilizzando dei client generici (come il monitor di MySQL) che consentivano l'accesso a tutte le funzioni del DBMS. In realtà, soltanto gli sviluppatori dei sistemi informativi hanno bisogno di accedere direttamente a MySQL, mentre tutti gli altri utenti accederanno al database tramite una opportuna interfaccia, realizzata dallo sviluppatore delle applicazioni. In questo modo l'utente non ha bisogno di conoscere SQL, la teoria dei database relazionali e la struttura logica della base di dati che utilizza.

Ci sono due approcci diversi allo sviluppo di applicazioni sui database. Un approccio è quello client-server puro. Abbiamo il server (MySQL) che esegue tutte le operazioni sulla base di dati per conto di una applicazione client (la nostra interfaccia utente). I due componenti dialogano direttamente, tramite la rete, per cui client e server possono anche risiedere su macchine diverse. Il client traduce le richieste dell'utente in comandi SQL che invia al server, il quale risponde aggiornando la base di dati ed eventualmente restituendo il risultato delle query. 

Struttura Client-Server

Schema connessione client-server

In una architettura client-server il client svolge in effetti due funzioni diverse:
Ad esempio, l'interfaccia utente fornisce un menù a video con i vari tipi di report possibili, e la parte di logica dell'applicazione traduce la scelta "lista dei pagamenti giornalieri" nelle query necessarie a recuperare dal database i dati necessari a produrre questo report. Oppure, l'interfaccia utente può presentare un elenco di voli che si possono prenotare, e la parte di logica si occupa di modificare le tabelle in modo opportuno per effettuare la prenotazione.

Tuttavia, con la diffusione di Internet e dei servizi ad essa collegati, come il Web, si sta diffondendo una architettura differente, basata su tre livelli invece che due. Nella architettura a tre livelli (detta anche thin client) il client non comunica direttamente con il server del database ma con un server dell'applicazione. In questo modo il client svolge solo il compito di interfaccia utente e la logica dell'applicazione viene inserita nel server applicativo. Questa soluzione è sicuramente più modulare: se si modifica la base di dati sottostante, il server dell'applicazione richiede a sua volta delle modifiche, ma l'interfaccia utente può anche restare invariata. Server applicativo e server di database possono risiedere nella stessa macchina o su macchine diverse collegate in rete.

Architettura a 3 livelli

Nel caso particolare di Internet, il client è spesso un semplice browser web come Mozilla o Internet Explorer mentre il server applicativo è un server web come Apache. Un server web è un programma che fornisce pagine HTML a un browser che le richiede. Queste pagine possono essere statiche (ovvero generate una volta per tutte) oppure dinamiche (generate ogni volta ex-novo da un programma).  E` possibile quindi realizzare una pagina dinamica che generi automaticamente un report sui dati di un database.

Relazione tra server web e DBMS

Noi utilizzeremo questo tipo di struttura a tre livelli. In particolare adopereremo:
Un esempio di applicazione scritta in PHP è "Hugh and Dave's Online Wines"  (un negozio di vini online), all'indirizzo  http://www.webdatabasebook.com/2nd-edition/winestore/index.php, e descritto nel libro "Web Database Applications with PHP & MySQL". Non è una applicazione vera ma soltanto un esempio di utilizzo di PHP

Un esempio di applicazione reale (e abbastanza complessa) scritta in PHP è invece, tra gli altri, il sito http://sourceforge.net/, adibito allo sviluppo e al supporto di vario software open source.

Installazione server Apache e PHP

Sia il server web Apache che il PHP sono già installati nelle macchine del laboratorio e sono presenti nella distribuzione di Linux che stiamo utilizzando (la Fedora Core 4). I pacchetti  corrispondenti sono httpd (che sta per demone HTTP), phpphp-mysql. Provare ad esempio con rpm -qi php per avere informazioni sul pacchetto php installato. Qualora fosse necessario, i file RPM per installare questi pacchetti si posono scaricare da Internet o trovare nei CD della distribuzione Fedora Core. 

Tuttavia, la configurazione di default di Apache è stata scelta per avere la maggio
re sicurezza possibile e non è adatta all'uso che dobbiamo farne noi, perché alcune funzioni sono disattivate. Inoltre, il server web non è impostato per partire automaticamente all'avvio: ogni volta che si riavvia il sistema, occorre attivare Apache tramite l'applicazione: Desktop -> Impostazioni di Sistema -> Impostazioni del Server ->  Servizi, selezionando la voce httpd e premendo il pulsante avvia.

Tool di configurazione dei servizi

Volendo è possibile impostare il sistema in modo che Apache parta automaticamente ad ogni avvio, attivando il segno di spunta accanto alla voce httpd e cliccando il pulsante Salva. 

Tuttavia, la cosa più convieniente è probabilmente installare il pacchetto RPM httpd-config-3-1.i386.rpm che, automaticamente, configura il sistema perché il server web parta automaticamente all'avvio e modifica la configurazione di Apache per renderla più adatta alle nostre esigenze.

Uso del server web

Quando ci colleghiamo all'indirizzo http://x.y.z/percorso-pagina il browser si connette al computer di nome x.y.z in Internet e chiede al suo server web di fornire la pagina (ovvero il file HTML) che corrisponde al percorso indicato. Al solito, se utilizziamo localhost come nome della macchina, il server web che viene contattato è proprio quello installato nella macchina locale.

Ma dove va a prendere le pagine web il nostro server? Tutto dipende da come è configurato: sulle macchine in laboratorio la directory radice per le pagine web è /var/www/html per cui l'accesso all'indirizzo http://localhost/provapagina/p2.html indica al server web di leggere il file /var/www/html/provapagina/p2.html e trasferirlo al browser. La directory radice per tutte le pagine web viene chiamata document root.

Il problema è che soltanto root può accedere a queste directory (l'utente root del sistema operativo, non quello di MySQL... ricordiamo che sono due cose completamente distinte). Per consentire a tutti gli utenti di un server di pubblicare facilmente le loro pagine web, alcuni indirizzi sono interpretati in maniera speciale da Apache. In particolare una pagina il cui indirizzo è http://x.y.z/~pippo/percorso-pagina non viene cercata all'interno della document root, ma all'interno della directory public_html nella home directory di pippo. In altre parole, l'indirizzo di sopra corrisponde al file /home/pippo/public_html/percorso_pagina. Analogamente http://x.y.z/~studente/index.html corrisponde a /home/studente/public_html/index.html. Noi metteremo le nostre pagine web proprio all'interno di /home/studente/public_html.


Nota! Ricordiamo che per scrivere il caratter tilde (~) in Linux è possibile premere AltGr (il tasto a destra dello spazio) e la i accentata.  In alternativa, è possibile rimpiazzare la tilde con %7e. Infatti in una URL, una stringa del tipo %xx viene rimpiazzata dal carattere il cui codice ASCII (in esadecimale) è xx. Il carattere tilde ha codice ASCII 126 che in esadecimale è proprio 7e.

La prima pagina HTML

Vediamo un semplice esempio di pagina Web statica:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>Prova HTML</title>
</head>
<body>
Ciao sono Gianluca

</body>
</html>

Possiamo memorizzarla col nome prova.html su /home/studente/public_html e accedervi dal browser all'indirizzo http://localhost/~studente/prova.html. Si tratta in questo caso di una pagina statica: ogni volta che si accede al suo indirizzo, il risultato che otteniamo è lo stesso. 


NOTA! La directory public_html non viene creata automaticamente al momento dell'installazione del sistema operativo, ma va creata a mano dall'utente. Si può fare o dall'interfaccia grafica o con il comando

mkdir /home/studente/public_html

In entrambi i casi, bisogna anche modificare i diritti di accesso alla directory /home/studente.

Normalmente, tutte le home directory (almeno con la distribuzione Fedora Core 4) sono protette: soltanto l'utente proprietario (studente nel nostro caso) ha il diritto di entrare dentro, leggere il contenuto e creare nuovi file. Siccome il server web viene eseguito come utente apache, non avrebbe il diritto di entrare in /home/studente (e quindi neanche in /home/studente/public_html). Bisogna quindi concedere il permesso di esecuzione, a tutti gli utenti, sulla directory /home/studente. Si può fare o dalla interfaccia grafica, come abbiamo visto nelle prime lezioni su Linux, o dalla shell con il comando:

chmod +x /home/studente

Questo non è un approccio molto sicuro, ma è sicuramente il più semplice da adottare, e può essere considerato adeguato per macchine monoutente.


Notare che è possibile vedere dal browser il codice HTML che produce la pagina. Basta cliccare col tasto destro sulla pagina web è selezionare "View Page Source". Ovviamente, a parte il fatto che le parole chiave sono colorate, il risultato è identico a quello del file prova.html. Vedremo tra un po' che questo non è vero per quanto riguarda le pagine web dinamiche.

Esercizio

Salvate la pagina web presente qui sopra col nome prova.html in /home/studente/public_html (magari mettendo il vostro nome invece del mio).  Provate ad accedere alla pagina web dal browser con l'indirizzo http://localhost/~studente/prova.html. Provate poi a collegarvi al server web del vostro vicino sostituendo a localhost l'indirizzo IP della sua macchina (vi ricordo il comando ifconfig per conoscere l'indirizzo IP di una macchina).

Lezione Precedente
Lezione Successiva