MANUALE ASP

 

Impostato da Fausto Marinsalta

  Indice   
 
1 Internet e l'architettura client-server
1.1 Pagine HTML
1.2 Script lato client
1.3 CGI
1.4 Script lato server
2 Internet Information Server e Active Server Pages
2.1 Funzionamento dell'ASP
3 Modello ad Oggetti ASP
3.1 Oggetto "Application"
3.1.1 Proprietà
3.1.2 Metodi
3.1.3 Eventi
3.2 Oggetto "Request"
3.2.1 Proprietà
3.2.2 Metodi
3.3 Oggetto "Response"
3.3.1 Proprietà
3.3.2 Metodi
3.4 Oggetto "Server"
3.4.1 Proprietà
3.4.2 Metodi
3.5 Oggetto "Session"
3.5.1 Proprietà
3.5.2 Metodi
3.5.3 Eventi
 

  1 Internet e l'architettura client-server

 

  1.1 Pagine HTML

 
Quando si parla di Internet ci si riferisce spesso al World Wide Web (in italiano: Ragnatela Mondiale) in quanto è la più nota e la più usata fra le applicazioni della rete.
Come altri servizi Internet, si basa sull'architettura client-server: Il client (browser) richiede al server (Web Server) una pagina di informazioni, la riceve e la visualizza.
In questa operazione viene utilizzato uno specifico protocollo di trasmissione, l'HTTP:HyperText Transfer Protocol, per trasferire le pagine dal server al client. Le pagine WEB a loro volta devono essere scritte seguendo determinate regole. L'insieme di queste regole è l'HTML: HyperText Markup Language.
Al momento della ricezione il browser interpreta le regole di impaginazione specificate nel linguaggio HTML e visualizza il contenuto sullo schermo.
 
 
 
 
L'impostazione appena vista ha il limite che le pagine HTML sono statiche.
Infatti tutti i contenuti delle pagine e i collegamenti ipertestuali sono stati previsti a priori da chi ha costruito il sito, il visitatore non può interagire con il server ma si limita a consultarne il contenuto.
 
  1.2 Script lato client

 
Una forma semplice di interattività può essere ottenuta con l'ausilio di script lato client (es. Javascript lato client).
Questo è ottenuto intercalando codice HTML con script elaborati dal Browser del client. Pertanto, come è facilmente intuibile,con questa tecnica si possono ottenere soltanto effetti locali (peraltro limitati da ragioni di sicurezza che, ad esempio, impediscono allo script anche la visione del file system locale). Lo script lato client è utilizzato principalmente per ottenere effetti grafici o testare i moduli prima dell'invio delle richieste al server.
 
  1.3 CGI

 
Il problema di aggiungere interattività alle pagine Web è stato risolto inizialmente attraverso le cosiddette CGI: (Common Gateway Interface).
Con questo meccanismo è possibile creare programmi che si frappongono tra il client e il server permettendo una elaborazione di dati in entrata e in uscita. Questo sistema ha funzionato (e funziona) bene in ambiente server UNIX ma un po' meno in ambiente Windows dove nacquero le WinCGI una specie di estensione delle CGI per Windows (oggi in disuso). Successivamente, in ambiente Windows, nacquero gli IDC che permettevano di leggere e scrivere dati su DataBase. Anche questa tecnologia è stata abbandonata dalla Microsoft.
 
  1.4 Script lato server

 
Gli script lato server (tipo ASP e PHP) sono linguaggi embedded nel codice HTML. Infatti, come avviene per gli script lato client, essi sono intercalati al codice HTML.
Gli script lato server sono interpretati ed eseguiti dal web server e restituiscono al client codice HTML (inclusi eventuali script lato client, i quali sono ignorati dal server).
Punto di forza di questa tecnologia è la facile e veloce implementazione di pagine dinamiche che possono interagire con dati presenti sul server. Inoltre le pagine sono organizzate  in applicazioni. Questo permette di poter definire variabili globali i cui valori vengono condivisi da tutti gli utenti e/o da tutte la pagine dell'applicazione.
 
 
Attenzione:  Non si devono confondere gli script lato client con gli script lato server.. 
Lo script lato client (Javascript, VBscript...) viene trasferito dal server al client e il browser (Netscape, MS Explorer) lo esegue in locale.
Lo script lato server viene eseguito sul server e al client viene trasferito solo il risultato dell'elaborazione sotto forma di pagina HTML.
 
 


  2 Internet Information Server e Active Server Pages

 
La tecnologia ASP nasce in Microsoft.
Per poter utilizzare questo sistema occorre disporre di un Web Server Microsoft* che supporti le pagine ASP.
Generalmente ci si riferisce a IIS (Internet Information Server), il software http-server del sistema operativo MS NT4 e MS Windows 2000. Il PWS (Personal Web Server) è la versione ridotta inclusa in MS Windows 98.

Progettare e realizzare pagine dinamiche in ASP presuppone la conoscenza di diversi argomenti. Un elenco dei principali:

  • Linguaggio HTML
  • Utilizzo di un Editor
  • Fondamenti di programmazione
  • Concetti di Database
La tecnologia ASP è molto semplice e allo stesso tempo potente e versatile. Meglio si conoscono gli argomenti citati, meglio si potranno utilizzare per realizzare applicazioni funzionali.
 
Note:

*

Su sistemi Linux (e anche su altre piattaforme) esistono prodotti di terze parti (quali Sun Chili!Soft ASP) che permettono l'utilizzo di pagine ASP.
 
  2.1 Funzionamento dell'ASP

 
Le pagine con estensione .asp vengono analizzate dal Web server (ad es. IIS) interpretando ed eseguendo gli script contenuti in esse. Comunque, come già accennato, il codice ASP non visualizza pagine puramente su base singola ma, al contrario, le organizza in applicazioni.  Un'applicazione ASP è l'insieme di file contenuti in una directory virtuale (e nelle sottodirectory). Questo permette di definire variabili globali di applicazione (condivisibili da qualunque file ed utente) e di sessione (riferiti al singolo utente).
Quando viene analizzata una nuova pagina Web, il Web server controlla, innanzitutto, se la richiesta è stata originata da un nuovo client. In tal caso viene verificato un  file speciale: global.asa (Active Server Application). Questo file, memorizzato nella directory principale virtuale dell'applicazione, riporta le routine di inizializzazione dell'applicazione e della sessione e definisce eventuali oggetti globali (a livello di sessione o di applicazione).  Il file global.asa, se non necessario all'applicazione, può essere assente.
 
 
 


  3 Modello ad Oggetti ASP

 
Caratteristica fondamentale del modello ad oggetti ASP è la semplicità e la mancanza di interdipendenza.
 

 
  3.1 Oggetto "Application"

 
L'oggetto Application  viene condiviso in tutte le istanze dell'applicazione: viene creato automaticamente dal server quando il primo browser si connette al sito ASP e viene distrutto circa 20 minuti dopo che l'ultimo browser si e' disconnesso dal sito. Contiene dei valori che sono comuni a tutto il sito ed a tutti gli utenti.
 
  3.1.1 Proprietà:

Contents Contiene tutte le variabili e gli oggetti aggiunti dallo script con area di validità nell'ambito dell'applicazione. Si tratta di una collezione (collection), cioè di un elenco di valori che sono stati aggiunti all'oggetto Application dal codice. E' possibile reperire i valori inseriti usando
var=Application.Contents(key)
Dove var e' una variabile che assumerà il valore reperito, e key è il nome del valore assegnato. In alternativa e' possibile anche usare più semplicemente
var=Application(key)
Per assegnare un valore si può usare:
Application.Contents(key) = valore
oppure
Application(key) = valore
Dove valore è il valore che si vuole assegnare e key è il nome che si vuole dare al valore per poi poterlo recuperare. Se il valore è già assegnato verrà sostituito, in caso contrario verrà creato.
StaticObject Si tratta di una collezione che contiene tutti gli oggetti che sono stati creati usando <OBJECT>. Il suo utilizzo e' analogo a quello della collection Contents.
 
  3.1.2 Metodi:

Lock Blocca la collection Contents, evitando che altre istanze vi accedano finché non viene sbloccata. Pertanto solo un client (quello attuale) può apportare modifiche.
Se non viene richiamato esplicitamente Unlock, il server sbloccherà la Application quando la pagina ASP termina o scade il tempo massimo di elaborazione
Unlock Sblocca la collection Contents affinché altre istanze possano accedervi.
 
  3.1.3 Eventi:

OnStart Generato quando inizia la prima sessione utente (ovvero quando il primo client si collega al server Web). Tale evento viene usato per inizializzare variabili o altre attività da svolgere una sola volta per tutto il sito. Deve essere inserito nel Global.Asa
OnEnd Generato quando termina l'ultima sessione utente (ovvero quando l'ultimo client si scollega al server Web o quando tutti i client cessano di essere attivi). Evento usato per ripulire la memoria ed altre attività da svolgere alla conclusione di tutte le attività. Deve essere inserito nel Global.Asa
 
  3.2 Oggetto "Request"

 
Fornisce l'accesso all'intestazione ed al corpo della richiesta HTTP del client e ad alcune informazioni sul server che gestisce la richiesta. Tutte le collection sono in sola lettura. L'oggetto Request gestisce anche una "super collection" che consente di cercare qualsiasi membro delle collection: QueryString, Form, Cockies, ClientCertificate e ServerVariables.
 
  3.2.1 Proprietà:

ClientCertificate Si tratta di una collection che riporta i campi memorizzati nel certificato client (se presente) inviato nella richiesta HTTP.  (Sola lettura).
Se il Web Server richiede informazioni di certificazione, il browser userà i campi di certificazione per fornire tali informazioni al server.

Per reperire le informazioni si utilizza:

info = Request.ClientCertificate( Key[SubField] )

Dove Key può valere:
  • Certificate
    Riporta una stringa contente la sequenza binaria dell'intero certificato in formato ASN.1.
  • Flags
    Ritorna un insieme di flag che forniscono informazioni addizionali riguardo il client. I flag disponibili sono:
    • ceCertPresent: un certificato per il client e' presente
    • ceUnrecognizedIssuer: l'ultima certificazione e' sconosciuta
  • Issuer
    Riporta una stringa che contiene una lista di tutti i valori dei sottocampi che contengono informazioni relative a chi ha fornito i certificati. Se questo valore e' specificato senza SubField, la ClientCertificate, riporterà una lista separata da virgole di tutti i sottocampi disponibili. Per esempio C=US, O=Verisign...
  • SerialNumber
    Una stringa che contiene il numero di serie della certificazione come rappresentazione ASCII dei codici esadecimali separati dal segno -. Per esempio: 04-67-F3-02.
  • Subject
    Una stringa che contiene un elenco dei sottocampi che contengono informazioni relative al soggetto del certificato, se questo flag e' specificato senza SubField, la ClientCertificate restituirà un elenco separato da virgole di tutti i sottocampi disponibili. Per esempio C=US, O=Verisign...
  • ValidFrom
    Una data che specifica da quando il certificato è valido. La data segue il formato di VBScript e varia a seconda delle impostazioni internazionali.
  • ValidUntil
    Una data che specifica fino a quando il certificato e' valido. La data segue il formato di VBScript e varia a seconda delle impostazioni internazionali.
SubField e' un campo aggiuntivo che consente di specificare quale informazione reperire quando le informazioni sono molteplici. Questo parametro è aggiunto al flag come suffisso. Per esempio Issue0 specifica il Flag Issue con SubField 0.
 
Cookies Permette di reperire il valore di un cookies installato sulla macchina dell'utente. (Sola lettura). Si tratta di una collection (tutti i Cookies sono disponibili dentro la collection).

Request.Cookies(cookie)[(key)]

Dove cookie e' il nome del Cookie da reperire e key e' una eventuale "chiave" aggiuntiva al cookie stesso.
 
Form Permette di reperire le informazioni presenti in una eventuale Form della pagina chiamante.  (Sola lettura). Se la pagina chiamante non ha form, questa collection risulta vuota.

Request.Form("nomecampo")

Restituisce il valore del campo di input "nomecampo".
 
QueryString Molto simile a Form, ma contiene i valori delle variabili inviate nella stringa di query HTTP. (Sola lettura).
 
ServerVariables Questa collection riporta una serie di utilissime informazioni relative al client ed al server. (Sola lettura).
Si va dal nome dell'utente che ha fatto Login (solo con NT in ambiente Intranet), all'indirizzo IP del client. 
Per visualizzare i valori disponibili si può utilizzare questo semplice script:
<%
  For each value in Request.ServerVariables
    Response.Write value 
    Response.Write "="
    Response.Write Request.ServerVariables(value)
    Response.Write "<br>"
  Next
%>
 
TotalBytes Indica il numero totale di byte inviato dal client nel corpo della richiesta. (Sola lettura).
 
Membri delle collection:
Count Proprietà di sola lettura. Restituisce il numero totale dei membri della collection. Proprietà non disponibile per la collection ClientCertificate.
 
Item Proprietà di sola lettura. Restituisce il valore di un elemento specifico della collection.
La sintassi è:

NomeCollection.Item(Index

in cui Index può essere la posizione ordinale in base 1 dell'elemento della collection o la chiave (valore stringa).
 

Key Proprietà di sola lettura. Restituisce il nome od il valore della chiave di un elemento specifico della collection.
La sintassi è:

NomeCollection.Key(Index

in cui Index è la posizione ordinale in base 1 nella collection della chiave il cui nome si desidera recuperare.

 
  3.2.2 Metodi:

BinaryRead Restituisce una struttura SAFEARRAY contenente i dati recuperati dal client. Ovvero legge il contenuto della richiesta (metodo POST) come elenco di byte grezzi, per poterlo poi memorizzare in una variabile. Una volta eseguita la lettura, ogni tentativo di accedere alle informazioni della richiesta, per esempio mediante Form() o QueryString(), darà errore. Allo stesso modo dopo aver acceduto ai dati tramite Form(), un tentativo di uso di BinaryRead procurerà errore.
 
  3.3 Oggetto "Response"

 
Controlla l'output inviato. Rappresenta la pagina HTML che è in fase di costruzione dall'interprete ASP prima di essere inviata al client come risposta. Permette di scrivere sulla pagina e di eseguire altre operazioni che hanno come target il client.
 
  3.3.1 Proprietà:

Buffer Questa proprietà (flag) indica se l'output dello script è incluso nel flusso HTML globalmente od una riga per volta. Il parametro può assumere solo i valori TRUE o FALSE. Nel primo caso tutti i dati verranno inseriti in memoria prima di essere inviati al client in un unico blocco, quando la pagina sarà completamente processata o quando viene richiamato un Flush, nel secondo caso le informazioni verranno inviate non appena disponibili in quantità sufficiente.
 
CacheControl Questa proprietà serve a sovrascrivere il valore di default Private relativo ai contenuti della pagina. Impostandola a Public, si abilitano i Proxy Server al caching delle pagine ASP.
 
CharSet Permette di specificare quale set di caratteri sarà usato per scrivere sul documento HTML in produzione. L'effetto e' quello di inserire un campo corrispondente nell'header del documento. I set di caratteri devono essere riconosciuti e gestiti dal browser affinché questo parametro possa funzionare correttamente.
 
ContentType Consente di specificare il Content Type della pagina HTML inviata al client che consente di identificare il tipo di dati riportati nel corpo. Se non specificato diversamente il CT sarà Text/HTML.
 
Cookies Questa e' una Collection di valori che consente di inviare uno o più cookies al browser dell'utente per memorizzare valori all'interno del browser stesso.
Esempio: il codice seguente invia due cookie al client:
<% 
Response.Cookies("mycookie")("type1") = "pane"
Response.Cookies("mycookie")("type2") = "aranciata"
%>
 
Expires Questa proprietà consente di impostare il tempo per cui la pagina viene mantenuta nella cache del browser, quindi non viene richiesta al server in caso l'utente cerchi di rivederla senza usare il tasto "Reload".
Il tempo va' indicato in minuti. Se si indica 0, la pagina verrà sempre ricaricata dal server e non inserita nella cache.
 
ExpiresAbsolute Questa proprietà consente di specificare la data e l'ora alla quale la pagina inviata verrà considerata scaduta dal browser e quindi verrà richiesta nuovamente al server. Se il client richiede la stessa pagina prima della data/ora specificata, la pagina verrà reperita dalla Cache del client.
Ovviamente tutto questo non ha valore se l'utente rimuove le pagine dalla cache del sui browser.
La data/ora deve essere specificata in formato RFC-1123, l'ora viene convertita in formato GMT.
Per esempio, la pagina seguente imposta la scadenza 15 secondi dopo l'1.30 PM del 32 Maggio 2000.

<% Response.ExpiresAbsolute=#May 31,1996 13:30:15# %>
 

IsClientConnected Questa proprietà è di sola lettura, restituisce TRUE se il client è ancora connesso al sito e  FALSE in caso contrario. Questo fornisce un ottimo sistema per verificare la presenza dell'utente nel sito ed eventualmente eseguire operazioni di pulizia sui dati che non sono più necessari.
<% 
  ' verifica se il client e' ancora connesso
  If Not Response.IsClientConnected Then 
  
    ' memorizza la SessionID per successive operazioni
    Shutdownid = Session.SessionID
  
    ' esegue la chiusura della sessione
    Shutdown(Shutdownid) 
    
  End If
%>
 
Pics picslabel Fornisce un'etichetta PICS (Platform for Internet Content Selection) all'intestazione della risposta HTTP.
 
Status Stato Definisce la linea dello stato HTTP che viene restituita al Client. Lo stato e' una stringa composta da un codice numerico di 3 cifre ed una descrizione associata.
Es.:

Response.Status = "401 Unauthorized"

Il valore predefinito è: "200 OK"
 

 
  3.3.2 Metodi:

AddHeader nome,valore Aggiunge alla pagina HTML in produzione un campo di intestazione (Header) con il nome ed il valore specificato. Il valore ed il nome non possono contenere caratteri illegali (<, >, " etc.).
 
AppendToLog stringa Consente di inserire una linea di informazioni al file di log del Web Server. Questo e' utile quando vogliamo mantenere traccia di determinate informazioni relative agli eventi del nostro sito ASP. Siccome le linee di Log di IIS sono delimitate da virgole, la stringa da scrivere non può contenere virgole. La massima lunghezza della stringa e' di 80 caratteri.
 
BinaryWrite dati Scrive informazioni binarie direttamente nel corpo della risposta senza alcuna conversione di carattere.
 
Clear Ripulisce il buffer di scrittura annullando eventuali scritture ancora pendenti.
 
End Conclude forzatamente l'invio dei dati al client.
 
Flush Forza lo svuotamento del buffer di scrittura ed effettua la scrittura vera e propria sul client.
 
Redirect Consente di far passare il browser dell'utente ad un'altra pagina specificando l'URL di destinazione. Affinché questo metodo funzioni è necessario che nessuna informazione sia ancora stata inviata al client, quindi e' necessario richiamarlo prima di qualunque altro metodo che scrive sul client o prima di tag HTML.
 
Write E' il metodo più usato di questo oggetto. Si limita a scrivere nella pagina di risposta quello che viene passato come argomento del metodo.
 
  3.4 Oggetto "Server"

 
Rappresenta il Server Web e consente di svolgere diverse attività quali la creazione di istanze di componenti ActiveX, reperire path (directory), effettuare la codifica di URL e di ottenere informazioni dal server di oggetti esterni all'ASP. E' un oggetto "di comodo".
 
  3.4.1 Proprietà:

ScriptTimeout Consente di specificare il tempo massimo (in secondi) in cui lo script deve essere eseguito. Una volta trascorso tale tempo il web server fornirà un messaggio di errore di "timeout".
Il valore di default di timeout e' 90 secondi.
Questa proprietà può essere utile per aumentare il tempo di timeout per script molto lenti di esecuzione.
 
  3.4.2 Metodi:

CreateObject TipoOggetto Crea istanze di un oggetto nel server. La CreateObject consente di creare un oggetto richiamando una DLL esterna, la DLL deve essere registrata nel sistema e fornire un accesso mediante tecnologia OLE/COM. L'oggetto creato risulta nello spazio di memoria dell'interprete ASP e quindi può essere controllato come se fosse un oggetto "interno" ad ASP stesso.
Per default, un oggetto creato con CreateObject, ha vita limitata alla pagina stessa. Perché l'oggetto rimanga in vita e' necessario memorizzarlo all'interno di una variabile di Sessione o di Applicazione.
La sintassi è:

Set Oggetto = Server.CreatObject(strProgID)

dove strProgId è l'identificatore dell'oggetto per il quale si vuole creare istanze (come definito nel registro di configurazione del sistema).
 

HTMLEncode Questo metodo consente di trasformare una stringa di testo in una stringa equivalente in cui i caratteri sono stati convertiti in sequenze valide per HTML. In questo modo eventuali < ed > vengono convertiti in &lt; ed &gt;
 
MapPath strPath Restituisce il percorso fisico nel server che corrisponde ad un percorso virtuale o relativo.
La sintassi è:

Server.MapPath strPath

dove strPath rappresenta un percorso virtuale od un percorso relativo alla directory corrente.<%= server.mappath(Request.ServerVariables("PATH_INFO"))%>
 

URLEncode Simile alla HTMLEncode, ma agisce su URL, rimuovendo e sostituendo eventuali caratteri invalidi nell'URL. In particolare, se l'URL contiene degli spazi, questi vengono convertiti nella sequenza &20
 
  3.5 Oggetto "Session"

 
Rappresenta la sessione, questo oggetto viene creato automaticamente dal server quando il browser dell'utente si connette al sito ASP e viene distrutto circa 20 minuti dopo che il browser si è disconnesso dal sito o dopo 20 minuti di inattività. Ogni browser ha una sua sessione indipendente. La Sessione può essere usata per memorizzare informazioni che sono personali del browser stesso.
 
  3.5.1 Proprietà:

Contents E' una collection contenente tutte le variabili e gli oggetti aggiunti dallo script con aria di validità nell'ambito della sessione.
E' possibile reperire i valori inseriti usando:
var=Session.Contents(key)
Dove var e' una variabile che assumerà il valore reperito, e key è il nome del valore assegnato. In alternativa è possibile anche usare più semplicemente:
var=Session(key)
Per assegnare un valore si può usare:
Session.Contents(key) = valore
oppure
Session(key) = valore
Dove valore è il valore che si vuole assegnare e key è il nome che si vuole dare al valore per poterlo recuperare poi. Se il valore e' già assegnato verrà sostituito, in caso contrario verrà creato.
 
StaticObject Si tratta di una collection che contiene tutti gli oggetti che sono stati creati usando <OBJECT>. Il suo utilizzo e' analogo a quello della collection Contents.
 
SessionID E' un identificativo univoco che viene assegnato dal Server Web alla singola sessione per poterla identificare da tutte le altre attive al momento. La Session ID non e' legata al client in assoluto, questo significa che la stessa SessionID può essere riutilizzata dal Server Web, ma due Session attive contemporaneamente non possono avere la stessa Session ID.
 
TimeOut Consente di leggere o impostare il tempo di persistenza della Sessione. Il tempo di persistenza è il lasso di tempo durante il quale i valori delle variabili di sessione (Contents) sono mantenuti anche se il client non fa assolutamente nulla. Per default tale tempo è 20 minuti. Volendo è possibile ridurre o aumentare tale tempo di permanenza. Il TimeOut deve essere indicato in minuti.
 
CodePage Permette di specificare o di reperire il Code Page che sarà usato per scrivere le informazioni sul Client. Il Code Page rappresenta praticamente il set di caratteri da utilizzare. Il CodePage deve essere specificato come numero intero, lo stesso CP deve essere installato sul server affinché questo possa funzionare. Per esempio 1252 e' usato per l'inglese americano, mentre 932 e' il set di caratteri Kanji (giapponese).
 
LCID Permette di specificare o di reperire il Local Identifier, cioè il codice che identifica le impostazioni di "paese" che sono usate per formattare numeri, date etc. Il codice da usare e' il codice standard di identificazione del paese che interessa.
 
  3.5.2 Metodi:

Abandon Distrugge la sessione corrente ed elimina tutte le variabili di sessione eventualmente create, ripristina tutti i settaggi di sessione al default.
 
  3.5.3 Eventi:

OnStart Generato quando inizia la nuova sessione utente (ovvero quando il client si collega al server Web). Tale evento viene usato per inizializzare variabili o altre attività da svolgere una sola volta per tutto il tempo di collegamento del client. Deve essere inserito nel Global.Asa
 
OnEnd Generato quando termina la sessione utente (ovvero quando il client si scollega al server Web, quando la sessione scade per TimeOut o quando viene richiamato Abandon per concludere la sessione da programma). Evento usato per ripulire la memoria ed altre attività da svolgere alla conclusione di tutte le attività del client. Deve essere inserito nel Global.Asa