INTERAGIRE CON IL WEB CON ASP
Introduzione
Supponiamo di creare un sito il cui scopo è quello di presentare un catalogo di prodotti, il tutto con
il solo ausilio dell’HTML. Cominciamo a classificare i prodotti in categorie, ogni categoria in sottocategorie e così via, per finire ai prodotti. Per facilitare la navigazione creiamo tante pagine quante
sono i prodotti e quante le categorie e le sotto-categorie. Risultato: abbiamo un’infinità di pagine e
l’utente è costretto a passare di pagina in pagina per raffinare la sua ricerca. D'altronde l’altra
alternativa è quella di raggruppare tutti i prodotti in un’unica pagina, a discapito sempre dell’utente
che adesso non viene per niente guidato nella sua ricerca.
Perché l’utente possa interagire con il Web più efficientemente, dovremo adottare un sistema in grado di
interfacciarsi con un database e creare le pagine Web "al volo". In altre parole, quando il navigatore visita il
nostro catalogo on-line, deve trovare un form HTML che gli consenta di effettuare una selezione sui prodotti
del catalogo e di inviare la sua richiesta al server Web, il quale crea "al volo" una pagina HTML con la
scheda del prodotto. Qui parleremo di due tecniche (molto diverse tra loro) in grado di realizzare questa
interazione dinamica: Script CGI (basata sull’interfaccia Common Gateway Interface) e Active Server Pages.

Script Server-side e Web-side: Per script si intende un programma che realizza un’interazione tra il
Web e il navigatore. I linguaggi di programmazione script più diffusi sono il Perl, C/C++, Java,
JavaScript e VBScript e si distinguono in Web-page (o client-side) e in server-side a seconda che lo
script risiede sul computer client oppure sul server. Quando un’utente invoca uno script server-side,
il computer sul quale risiede il server Web esegue lo script che interagisce con il client. Uno script
Web-page (solitamente scritto in JavaScript, VBScript), invece, è uno script le cui istruzioni risiedono
all’interno delle istruzioni HTML che formano la pagina Web, quindi è il computer client ad eseguirlo.

CGI: è l’acronimo di Common Gateway Interface) ed è uno standard che specifica l’interfaccia tra
browser e server Web. In altre parole esso specifica il formato dei dati che si scambiano il browser e
i server Web attraverso il protocollo di trasmissione HTTP. Uno script CGI è quindi un programma
(solitamente scritto in Perl) che elabora l’input dell’utente e crea eventualmente la risposta
generando una pagina HTML. L’input avviene trasmettendo il form HTML, quindi il browser invia i
dati del form al server Web (secondo lo standard CGI) e quest’ultimo esegue lo script il quale
elabora i dati ricevuti (ad es. inserendoli in un database, spedendoli via e-mail ad un indirizzo
specificato o generando semplicemente una risposta attraverso una pagina HTML)

ASP: è l’acronimo di Active Server Pages) ed è una tecnologia in grado di realizzare un’interazione
tra l’utente e il Web attraverso la generazione dinamica di pagine HTML. Per scrivere le nostre
pagine .asp possiamo usare un qualsiasi linguaggio di scripting (generalmente JavaScript e
VBScript) – gli esempi riportati sono tutti in VBScript. Naturalmente non sussite alcun problema di
compatibilità con il tipo di browser dell’utente perché ASP è server-side. Con ASP si è in grado di
interfacciarsi via Web con un database relazionale come Access o SQLServer o in generale con una
fonte dati ODBC, sfruttando il potente linguaggio di interrogazione SQL. Con ASP è possibile anche
usare componenti ActiveX. Per poter usare ASP occorre avere un server Web Microsoft: Microsoft
Internet Informatin Server (Ms IIS) (che include ASP a partire dalla versione 3.0) per Windows NT
oppure Personal Web Server per Windows 95/98. Un’alternativa alla Microsoft è rappresentato dalla
Chili!Soft che ha prodotto Chili!ASP in grado di girare su moltissime piattaforme (tra cui Windows NT
e in un prossimo futuro LINUX). Purtroppo però, a differenza dei primi due, Chili!ASP non è
freeweare!
Configurare Microsoft IIS per Active Server Pages
Al momento è disponibile la versione 4.0 di Windows NT con la versione più aggiornata di ASP, per la quale
occorre aver installato (in ordine) NT 4.0 Service Pack 3, Internet Explorer 4.01 e NT 4.0 Option Pack. Si
consiglia comunque di visitare il sito della Microsoft all’indirizzo:
Microsoft
dove è possibile scaricare NT 4.0 Option Pack e leggere attentamente i requisiti Hardware e Software per
l’installazione.
La prima cosa da fare è la creazione di una directory in cui creare una nuova directory premendo il tasto
destro del mouse su Default Web Site e scegliendo New, Virtual Directory dal menù di scelta rapida.
WindowsNT 4.0 Option Pack). Una volta lanciato:

aprire la cartella Internet Information Server e poi la cartella Default Web Site

creare una nuova directory premendo il tasto destro del mouse su Default Web Site e scegliendo
new, Virtual Directory dal menù di scelta rapida.

a questo punto compare una nuova finestra. Digitare il nome che si vuole assegnare al nuovo sito (il
quale sarà utilizzato dagli utenti per accedere al sito) e premere il tasto next. Nella nuova finestra
occorre definire la cartella fisica nella quale si desidera posizionare l’applicazione. Fare click su next.

la nuova finestra ci permette di definire i livelli di accesso degli utenti alla nuova directory. Per
rendere eseguibile ASP in questa directory basta selezionare Allow Script Access. Premere il tasto
finish e avete terminato.
Configurare PWS (Personal Web Server)
Personal Web Server 4.0 è la versione ridotta di IIS 4.0 per Windows 95/98 e WindowsNT Workstation.
Unico requisito software per l’installazione di PWS è IE 4.01 (o successivo). Per la configurazione non ci
sono istruzioni particolari da seguire. La cartella di default \Inetpub\wwwroot è già configurata per gli .asp,
quindi si può iniziare ad usare questa per le nostre prove. Nel caso in cui si voglia aggiungere un nuovo sito
virtuale, si lanci Gestore del Sito Web Personale contenuto nel gruppo di programmi Internet Explorer ->
Personal Web Server. Una volta lanciato:

fare click su Impostazioni Avanzate, quindi su Aggiungi

si apre una nuova finestra in cui scriviamo il percorso della cartella che ospiterà fisicamente il nostro
nuovo sito, il nome del sito virtuale, e i permessi di accesso (Script deve essere selezionato)

premere ok e abbiamo finito
La nostra prima pagina potrà avere come nome Default.htm o Default.asp o quasiasi altro nome noi
specifichiamo in Documenti predefiniti (presente sempre in Impostazioni Avanzate).
A quest’indirizzo è possibile scaricare l’Option Pack che contiene PWS per Win95/98:
http://www.microsoft.com/ntserver/nts/downloads/recommended/NT4OptPk/
Con che linguaggio scrivere gli ASP
Si è già detto che gli script ASP sono server-side, ma dove sono situati? A differenza degli script CGI essi si
trovano all’interno delle pagine HTML (a cui viene però data l’estensione .asp per essere riconosciti dal
server Web) delimitati dai segni di maggiore e minore insieme al segno di percentuale:
<html>
<head></head>
<body>
<%
‘qui saranno ospitate le istruzioni ASP
%>
</body>
</html>
Naturalmente dal lato client non saranno visibili le linee di codice ASP, bensì la traduzione che il server Web
effettuerà di esse in formato HTML. Analizziamo adesso due oggetti fondamentali per l’uso di ASP:
Response e Request.
Response gestisce il flusso di dati dal server verso il client. In particolare, attraverso il metodo Write
consente l’output delle nostre eleborazioni in formato HTML.
<%
Var = "Esempio"
Request.Write (Var)
%>
Request gestisce invece il flusso di dati nel senso inverso, dal client al server. Attraverso il metodo Form
possiamo catturare i dati inviati con un form HTML, mentre con il metodo QueryString le variabili inviate con i
collegamenti ipertestuali (quelli che compaiono a destra del punto interrogativo (?), ad es.
<href="Dettagli.asp?Nome=Gino">)
<%
Request.Form ("Nome")
Request.Form ("Cognome")
Request.QueryString ("Nome")
%>
Session
L’oggetto Session permette di istanziare delle variabili per ogni utente (ovvero per ogni browser che accede
alla pagina .asp) le quali saranno attive per un tempo specifico, per impostare il quale scriviamo:
<%
Session.timeout=30
%>
Questa istruzione manterrà "in vita" le nostre session per 30 minuti. Perché gli oggetti Session funzionino
occorre che sul browser client siano attivi i Cookies perché è proprio di un Cookies che fa uso la Session per
memorizzare i dati. Per istanziare una variabile Session e poi usarla:
<%
Session(nome_session)=valore
For i=1 to Session(nome_session) do
Next
%>
Accesso ai Database (DSN e DSN-Less, i Cursori e i Lock)
Per accedere ai dati di un database attraverso ASP occorre creare un’istanza di un’oggetto Connection e poi
di un’oggetto Recordset di ActiveX Data Objects attraverso il metodo CreateObject dell’oggetto Server.
Possiamo interfacciarci con una fonte dati ODBC utilizzando un DSN oppure usando una stringa di
connessione che specifica tutte le informazioni necessarie per la connesione (compreso il driver ODBC
utilizzato).
Esempio di connessione DSN-Less:
<%
path="d:\root\web\esempio"
name="esempio.mdb"
StringaDiConnessione="DBQ=" & path & "/" & name & "; Driver={Microsoft Access Driver (*.mdb)};"
set conn=Server.CreateObject("ADODB.Connection")
conn.Open StringaDiConnessione
set rs = Server.CreateObject ("ADODB.Recordset")
rs.Open "SELECT * FROM Clienti", conn, 3, 3
rs.Close
‘per chiudere il recordset
conn.close
‘per chidere la connessione
%>
Esempio di connessione DSN:
<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Open "DSNName"
‘DSNName è il nome del DSN
set rs = Server.CreateObject ("ADODB.Recordset")
rs.Open "SELECT * FROM Clienti", conn, 3, 3
rs.Close
‘per chiudere il recordset
conn.close
‘per chidere la connessione
%>
I numeri 3,3 presenti nel metodo Open del Recordset rs, rappresentano rispettivamente il CursorType e il
LockType.
Il CursorType definisce il tipo di "cursore" e può assumere i seguenti valori:

0 = (Cursore di default) permette solo spostamenti in avanti e non indietro

1 = (Cursore Keyset) possono vedere le modifiche apportate da altri utenti, nonché spostarsi tra i
record in avanti ed indietro. Non possono vedere i record aggiunti o cancellati da gli altri utenti.

2 = (Cursori Dinamici) possono vedere qualsiasi cosa: modifiche, aggiunte e cancellazioni fatte da
altri utenti. Supportano, inoltre tutti gli spostamenti.

3 = (Cursori Statici) permettono gli spostamenti in avanti ed indietro. Non sono in grado di rilevare le
modifiche ai dati apportate da altri utenti.
Il LockType definisce il tipo di blocco sul Recordset aperto. Può assumere i seguenti valori:

1 = (adLockReadOnly) i dati si possono soltanto leggere.

2 = (adLockPessimistic) i dati sono bloccati appena qualcuno comincia ad effettuare operazioni di
modifica.

3 = (adLockOptimistic) il blocco ottimistico crea un buffer temporaneo in cui vengono conservati gli
aggiornamenti e le modifiche sui dati, mentre i dati originali sono ancora accessibili agli altri utenti,
quando si lancia un comando di aggiornamento (Update) allora i dati vengono bloccati e appena
finito l’aggiornamento il blocco viene rilasciato
N.B.: ODBC (Opend DataBase Connectivity) è una tecnologia che consente ad una applicazione sul lato
client di connettersi ad un database remoto ignorando il tipo di database con cui si sta connettendo. In altre
parole, ODBC, mediante la specificazione del driver del database remoto, fornisce un’interfaccia generica
sul lato client.
E’ possibile creare un DSN (Data Source Name) per ogni database remoto a cui ci vuol connettere
specificando un nome che lo identifica univocamente sul client e naturalmente il driver del database (ad es:
MS Access 97 Database o SQL Server). In questo modo possiamo far riferimento ad un database remoto
attraverso il DSN specificato.
Per creare un DSN usare l’utility ODBC nel Control Panel.
Interrogare un Database
Per interrogare il database dobbiamo formulare una query SQL ed aprire il recordset che si è
precedentemente istanziato "sottoponendogli" la query (come si è già visto nel punto precedente).
Per consentire al navigatore di inoltrare la sua richiesta di selezione (as esempio tutti i clienti il cui nome
inizia con il carattere "P") è necessario creare una pagina HTML (o ASP) con un form HTML il cui attributo
action fa riferimento alla pagina .asp che si vuole richiamare:
<html>
<form method=post action="myquery.asp">
Nome: <INPUT NAME=nome>
<input type=submit value="Esegui Ricerca">
</form>
</html>
Myquery.asp:
<html>
<head></head>
<body>
<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Open "DSNName"
querySql = "Select * from Clienti where Nome =’" & Request.Form("Nome") & "’"
‘ se il tipo di dato fosse stato di tipo numerico avremmo omesso gli apici e la query
‘ sarebbe diventata: "Select * from Clienti where Nome =" & Request.Form("Nome")
‘ per ricercare tutti i clienti i cui nomi iniziano con la lettera/parola scritta, la query diventa:
‘ querySql = "Select * from Clienti where Nome LIKE ’" & Request.Form("Nome") & "%’"
‘ mentre se vogliamo i clienti i cui nomi contengono la lettera/parola scritta:
‘ querySql = "Select * from Clienti where Nome LIKE %’" & Request.Form("Nome") & "%’"
set rs = Server.CreateObject ("ADODB.Recordset")
rs.Open sql, conn, 3, 3
While not rs.EOF
Response.Write (rs("Nome")
Response.Write (rs("Indirizzo")
Response.Write (rs("CodiceFiscale")
.MoveNext
Wend
rs.Close
conn.close
%>
</body>
</html>
Oltre che attraverso un form HTML, possiamo "passare" dati ad una pagina .asp anche attraverso parametri
istanziati nel momento in cui il navigatore clicca su un collegamento ipertestuale.
Possiamo così permettere di passare da una pagina .asp ad un’altra allo scopo di raffinare una ricerca. Nel
nostro esempio, per visualizzare maggiori dettagli di un cliente, possiamo sostituire l’istruzione:
Response.Write (rs("Nome"))
(supponendo che il campo "Nome" rappresenti la chiave primaria della tabella "Clienti") con:
Response.Write ("<a href=’myDettagli.asp?Nome=’)
Response.Write (rs("Nome") ) & "’>"
e nella pagina myDettagli.asp effettuare una query con la condizione:
WHERE Nome=’" & Request.QueryString ("Nome") & "’"
In questo modo selezioniamo quel cliente con il nome cercato e possiamo visualizzare poi tutti i dati del
cliente trovato.
Inserimento di dati in un Database
Inseriamo adesso nell’archivio Clienti i dati introdotti dall’utente in un form HTML (il cui attributo Action sarà
così impostato: action="myInserimento.asp"). Si tenga conto che il controllo della validità dei dati inseriti nel
form (che viene ignorato nel seguente esempio) può essere effettuato in due modi diversi: dal lato-client,
utilizzando degli script Web-page (scelta consigliata perché delega al client l’esecuzione di questa parte di
codice "alleggerendo" così i compiti del server) e dal lato-server, sempre all’interno del codice ASP prima di
effettuare l’inserimento.
myInserimento.asp:
<html>
<head></head>
<body>
<%
set conn=Server.CreateObject("ADODB.Connection")
conn.Open "DSNName"
set rs = Server.CreateObject ("ADODB.Recordset")
rs.Open "Clienti", conn, 3, 3
rs.AddNew
rs("Nome")=Request.Form("Nome")
rs("Indirizzo")= Request.Form("Indirizzo")
rs("CodiceFiscale ")= Request.Form("CodiceFiscale")
rs.UpDate
rs.Close
conn.close
%>
</body>
</html>
Bibliografia
(1)
K. Jamsa, S. Lalani, S. Weakley -"Tutto Web”, McGraw Hill, 1997
(2)
Jeffrey P. McManus - Visual Basic 6 (Accesso ai database) , Mondadori informatica, Marzo 1999