Client Client Appunti su ASP (Active Server Pages) Che cosa è ASP Un server web è un computer che contiene tutte le pagine web di un determinato sito web. In tale computer è installato un software che consente di inviare queste pagine web a tutti i Client (browser) che le richiedono. Il server, in questo caso, si limita a Il client richiede una pagina web al Server Il server invia la pagina richiesta al Client Il client richiede una pagina ASP al Server Server Il server invia la pagina HTML elaborata al Client Server Il Server alloca in una propria area di lavoro la pagina ASP, e la elabora, sostituendo lo script ASP con testo HTML Gen. 2007 pag. 1/11 ricercare la pagina statica richiesta e a spedirla. Perchè le pagine web diventino dinamiche, vi si possono inserire, degli script. Uno script è un codice di programma inserito in un file HTML che viene interpretato ed eseguito. Si possono avere script lato client, che vengono interpretati ed eseguiti dal browser, e script lato server. In questo caso il server, sulla base delle istruzioni di scripting, confeziona una pagina HTML e la invia al client. ASP è una tecnologia di scripting di solito lato server, che fa riferimento al linguaggio Visual Basic Script. VBScript è un dialetto del Microsoft Visual Basic, che conserva tutti i suoi costrutti e la maggior parte delle sue funzioni. Non si fa differenza tra maiuscole e minuscole. Le variabili non debbono essere tipizzate, in quanto VBScript le considera tutte di tipo variant, decidendo il tipo in base al contesto. Gli script di una pagina ASP sono compresi tra <% e. La prima riga di una pagina ASP deve essere la dichiarazione <%@ Language = VBSCRIPT. È buona regola comunque dichiarare le variabili prima di usarle, utilizzando la formula <% Option Explicit. Ecco un esempio di pagina ASP (supponiamo allocata nel server con il nome MiaPrimaPagina.asp. <%@ Language=VBSCRIPT <%Option Explicit <HEAD><TITLE>La mia prima prova di programma ASP </TITLE></HEAD> L'orologio del server segna le ore <% Response.Write Time() <br> <%If Hour(Time())<12 Then Response.Write( Buongiorno! ) Else Response.Write( Buonasera! ) End If
La funzione Time() restituisce l ora corrente nel formato standard del server; la funzione Hour() estrae esattamente l ora. L espressione Response.Write(stringa) (che sarà analizzata meglio in seguito scrive stringa nella pagina HTML. Il senso della pagina ASP è il seguente: il server consulta il suo clock, e inserisce il suo valore nella pagina HTML. Ne estrae l ora e la confronta con il valore 12; in conseguenza del confronto, inserisce la stringa Buongiorno! oppure Buonasera!. Ed ecco la pagina inviata al browser che l ha richiesta alle ore 11.11.57: <HEAD><TITLE>La mia prima prova di programma ASP </TITLE></HEAD> L'orologio del server segna le ore 11.11.57 <br> Buongiorno! Se la richiesta fosse stata effettuata dopo le 12, la pagina HTML avrebbe salutato con Buonasera!. Ciò spiega perché le pagine ASP sono dinamiche. Gli oggetti di ASP ASP è un ambiente orientato agli oggetti (OOP, Object Oriented Programming). Fornisce una libreria di oggetti interni allo sviluppatore, e gli consente di costruire proprie classi e di istanziare oggetti. Gli oggetti interni della versione ASP 3.0 sono elencati di seguito. Oggetto Response L oggetto Response viene utilizzato per inviare dati al client. Uno dei metodi più usati di Response è Response.Write stringa, che abbiamo visto appena sopra. Esso è spesso abbreviato con =, per cui <% Response.Write ciao è equivalente a <% = ciao Oggetto Request L oggetto Request viene utilizzato per recuperare dati dal client Oggetto Application Un applicazione è l insieme delle pagine.asp allocate in una cartella e in tutte le sue sottocartelle. L oggetto Application viene utilizzato per condividere informazioni tra i Client che esplorano lo stesso gruppo di pagine appartenenti all applicazione. Per ogni applicazione allocata nel Server e richiamata da almeno un Client, viene creata un unica istanza dell oggetto Application, che viene condivisa da tutti gli altri eventuali Client che accedono all applicazione. Oggetto Session L oggetto Session si riferisce ad un singolo Client che accede ad una applicazione. All atto dell accesso all applicazione da parte di un Client, viene creata un istanza dell oggetto Session. I dati di ogni eventuale variabile di sessione vivono solo per la durata della Session. Oggetto Server L oggetto Server fornisce alcune proprietà e metodi del Server. Il metodo di Server più utilizzato è CreateObject, utilizzato per creare un istanza di un componente del server. I componenti sono pacchetti di oggetti che possono essere usati all interno delle pagine ASP. Gen. 2007 pag. 2/11
Oggetto ObjectContext L oggetto ObjectContext serve per collegare le pagine ASP e Microsoft Transaction Server. MTS è utilizzato per rendere più scalabili i siti web e per rendere più efficienti le prestazioni di altri componenti. Oggetto ASPError L oggetto ASPError consente di ottenere informazioni sugli errori che occorrono negli script delle pagine ASP. Definizione di Collection L esigenza di elencare parametri con associati i rispettivi valori è risolta con le Collection. Intendiamo per Collection un insieme di coppie del tipo Chiave=valore, separate dal carattere &. Esempio: Cognome=Rossi&Nome=Mario&Eta=24 è composta da tre coppie; la prima coppia è data dalla chiave Cognome e dal valore associato Rossi, la seconda dalla chiave Nome e dal valore associato Mario, ecc. La comunicazione Client-Server Si affrontano i problemi del passaggio dei dati tra pagine web. Inizialmente si mostra come una pagina web possa trasmettere dei dati direttamente alla pagina ASP chiamata con l uso della stringa di trasmissione. Successivamente si presenta il passaggio dei dati che una pagina web raccoglie tramite un form, alla pagina ASP richiamata, che li recupera. La trasmissione dei dati tra pagine ha grossi limiti se più pagine debbono disporre degli stessi dati. Per rendere i dati disponibili a più pagine è possibile appoggiarli sul Client (Browser) grazie ai cookies. Oppure si possono appoggiare sul Server, tramite gli oggetto Session e Application. 1. Uso della stringa di interrogazione Come è noto, è possibile da una pagina HTML chiamare un altra pagina con l uso dei tag <A HREF = pagina_chiamata> stringa cliccabile </A>. La pagina chiamata può essere una pagina ASP, e i dati possono essere inviati tramite una collection; come separatore tra la pagina chiamata e la collection si inserisce il carattere? Esempio: Pagina chiamante Chiamata di una pagina con dati inviati tramite stringa <A HREF=RispostaDatiPerStringa.asp?nome=Gigi&eta=40>Premi qui</a> Pagina ASP chiamata (RispostaDatiPerStringa.asp) <% @Language=VBScript <% Option Explicit <% Dim strnome,ieta strnome=request( Nome ) ieta=request( Eta ) Il nome trasmesso e' <%=strnome Gen. 2007 pag. 3/11
L'eta' trasmessa e' <%=ieta 2. Uso del FORM come strumento di invio dati al server Tag FORM Per predisporre un FORM si usano i tag <FORM> </FORM>. I parametri sono: NAME METHOD ACTION identifica il nome del form può assumere i valori: GET trasmissione dei dati attraverso la Collection QueryString (stringa di interrogazione v. oltre) POST trasmissione dei dati attraverso la Collection Form form_processing_script, cioè lo script o l eseguibile incaricato di processare i dati inviati Esempio 1: <FORM NAME = MioForm METHOD = GET ACTION = http://un-server/unoscript.asp > </FORM> Internamente ai tag <FORM> </FORM> si usano i tag <INPUT>, <TEXTAREA> e <SELECT> Tag INPUT Ha diversi parametri a seconda del tipo. Comune a tutti è il parametro NAME che identifica il nome del tag. Gli altri parametri sono: TYPE che può assumere i valori TEXT, HIDDEN, PASSWORD, CHECKBOX, RADIO, SUBMIT, RESET, BUTTON, IMAGE (v. oltre) VALUE Indica il valore di default assunto dall oggetto oppure l etichetta SIZE Definisce la grandezza, misurata in caratteri, del campo da inserire MAXLENGHT Definisce il numero massimo di caratteri che possono essere inseriti in un campo. CHECKED Indica l eventuale selezione di default ALIGN Specifica l allineamento SRC Specifica una URL. Nella seguente tabella si riportano i tag in relazione al tipo. O = Obbligatorio, F = Facoltativo, E = Etichetta TYPE TEXT HIDDEN PASSWORD CHECKBOX NAME O O O O O F F F O VALUE F O O O E E E O SIZE F F F MAXLENGTH F F F CHECKED F F ALIGN F SRC F Esempio 2: <INPUT TYPE= TEXT NAME= NOME VALUE= Inserisci qui il tuo nome SIZE= 35 MAXLENGTH = 50 > RADIO SUBMIT RESET BUTTON IMAGE Gen. 2007 pag. 4/11
Tag TEXTAREA I parametri sono: NAME Definisce il nome da utilizzare nella coppia nome/valore COLS Definisce la larghezza dell area di testo misurata in caratteri ROWS Definisce l altezza dell area di testo misurata in numero delle righe Esempio 3: <TEXTAREA NAME= MiaArea COLS= 20 ROWS= 10 > </TEXTAREA> Tag SELECT I parametri sono: NAME Definisce il nome da utilizzare nella coppia nome_della_selezione/valore_dell_opzione MULTIPLE La presenza di tale attributo permette la selezione di più valori SIZE Numero di righe visibili senza scorrere la lista delle opzioni; se la lista contiene più opzioni, viene generata nel lato sinistro del pannello la barra di scorrimento verticale Tra i tag <SELECT></SELECT> sono inserite due o più coppie di tag <OPTION></OPTION> Tag OPTION I parametri sono: NAME Definisce il nome da utilizzare nella coppia nome_dell_opzione/valore_dell_opzione nel caso in cui nel tag SELECT non è stato definito il parametro NAME VALUE Obbligatorio, diverso per ogni opzione, definisce il valore da utilizzare nella coppia nome_della_selezione/valore_dell_opzione SELECTED Opzione di default DISABLED Dà un opzione non disponibile, colorata in grigio. Esempio 4: <SELECT NAME= Attitudine > <OPTION VALUE= Poco >Pessimistica <OPTION VALUE= Medio SELECTED>Realistica <OPTION VALUE= Molto >Ottimistica </SELECT> La collection inviata, per default è: Attitudine = Medio Esempio 5: <SELECT> <OPTION NAME= Lingua VALUE= uk >Inglese <OPTION NAME= Lingua VALUE= fr SELECTED>Francese <OPTION NAME= Lingua VALUE= d >Tedesco </SELECT> La collection inviata, se si sceglie Tedesco, è Lingua = d. Gli esempi 4 e 5 differiscono per il fatto che nel 4 è dato un nome al tag SELECT, mentre nel 5 è dato lo stesso nome a tutti i tag componenti la SELECT Gen. 2007 pag. 5/11
3. Passaggio dei dati tra pagine web tramite l oggetto Request con i metodi QueryString e Form Si assume come pagina di partenza una pagina consistente un semplice form composto di due INPUT di testo, dapprima con il metodo GET, e si analizza una pagina ASP che acquisisce i dati; successivamente i dati saranno inviati con il metodo POST, e si analizza una nuova pagina ASP che acquisisce i dati. Infine si analizza come processare i dati inviati con i vari tipi di INPUT e SELECT. Lo schema è: 1. Il client invia al server la richiesta della pagina INIZIO_XXX.HTM che contiene un Form 2. Il server invia la pagina INIZIO_XXX.HTM al client. 3. Il client compila il Form e lo invia al server con l azione ELABORA_XXX.ASP 4. Il server attiva la pagina ELABORA_XXX.ASP che opera sui dati inviati e restituisce al client una pagina con i dati elaborati Uso del metodo GET Pagina chiamante INIZIO_GET.HTM <FORM METHOD=GET ACTION= ELABORA_GET.ASP > Nome: <INPUT TYPE=TEXT NAME= Nome > Età: <INPUT TYPE=TEXT NAME= Eta > <INPUT TYPE=SUBMIT VALUE= Invia > </FORM> Supponiamo che l utente inserisca la stringa Carlo nel campo Nome e il valore 24 nel campo Eta. Quando preme il pulsante Invia, al server giunge una richiesta contenuta nella stringa di interrogazione (QueryString) in cui figura il nome dello script da attivare e la collection associata ELABORA_GET.ASP?Nome=Carlo&Eta=24 La pagina ELABORA_GET.ASP è così fatta: <%@ Language=VBScript <% Option Explicit <% Dim strnome,streta StrNome=Request.QueryString( Nome ) StrEta=Request.QueryString( Eta ) Nome = <% = strnome Eta = <% = streta Uso del metodo POST Pagina chiamante INIZIO_POST.HTM Gen. 2007 pag. 6/11
<FORM METHOD=GET ACTION= ELABORA_POST.ASP > Nome: <INPUT TYPE=TEXT NAME= Nome > Età: <INPUT TYPE=TEXT NAME= Eta > <INPUT TYPE=SUBMIT VALUE= Invia > </FORM> Supponiamo di nuovo che l utente inserisca la stringa Carlo nel campo Nome e il valore 24 nel campo Eta. Quando preme il pulsante Invia, al server giunge una richiesta di attivare lo script ELABORA_POST.ASP. La collection contenente i dati è sull oggetto Form. La pagina ELABORA_POST.ASP è così fatta: <%@ Language=VBScript <% Option Explicit <% Dim strnome,streta StrNome=Request.Form( Nome ) StrEta=Request.Form( Eta ) Nome = <% = strnome Età = <% = streta La conclusione è che si verifica la seguente corrispondenza: Metodo usato dal Form che invia dati al server (parametro METHOD) GET POST Modo con cui i dati vengono acquisiti dalla pagina chiamata (parametro ACTION) Str = Request.Querystring(Nome_Campo) Str = Request.Form(Nome_Campo) Se nella pagina chiamante il form usa il metodo GET per inviare i dati e la pagina chiamata usa Request.Form, e, viceversa, se il form usa il metodo POST e la pagina chiamata usa Request.Querystring, vengono trasmesse stringhe di lunghezza 0. Usando semplicemente l oggetto Request senza attributi, sarà a suo carico indagare quale metodo è stato usato ed applicarlo. Pertanto, a prescindere dal metodo GET o POST che sia, l espressione Str = Request(Nome_Campo) risolverà automaticamente il dubbio di quale metodo sia stato usato Acquisizione dei dati da INPUT TYPE=RADIO e SELECT Il problema di entrambe queste strutture è quello di ottenere un dato selezionato tra molti (nell ipotesi che nella SELECT non sia presente l attributo MULTIPLE). Come abbiamo appena visto, in relazione al metodo GET o POST, cambierà il modo con cui la pagina azionata rileverà i dati (rispettivamente Request.Querystring o Request.Form). Quindi negli esempi trattiamo solo il metodo POST Pagina chiamante INIZIORADIO_POST.HTM Gen. 2007 pag. 7/11
<FORM METHOD=GET ACTION= ELABORARADIO_POST.ASP > Maschio: <INPUT TYPE=RADIO NAME= Opzione1 VALUE= M > Femmina: <INPUT TYPE=RADIO NAME= Opzione1 VALUE= F > <INPUT TYPE=SUBMIT VALUE= Invia > </FORM> N.B. : se nel form fosse necessario avere un altra batteria di radio-button, tutti i membri della nuova batteria avrebbero dovuto avere un altro nome, (p. es. Opzione2). Quando l utente, per esempio femmina, seleziona la seconda opzione e preme il pulsante Invia, al server giunge una richiesta di attivare lo script ELABORA_POST.ASP. La collection contenente i dati è sull oggetto Form. La pagina ELABORARADIO_POST.ASP è così fatta: <%@ Language=VBScript <% Option Explicit <% Dim strsesso strsesso=request.form( Opzione1 ) Sesso = <% = strsesso Viene così visualizzato: Sesso = F Se la pagina è del tipo di cui all Esempio 5 e viene selezionata la voce Tedesco, cui corrisponde il valore d, la pagina attivata dovrà contenere qualcosa del genere: <% strlingua = Request.Form( Lingua ) Dove strlingua varrà d. Acquisizione dei dati da INPUT TYPE=CHECKBOX Per questo costrutto, così come per un costrutto SELECT con l attributo MULTIPLE, si pone il problema di rilevare le scelte effettuate dall utente, che possono riguardare zero, una o molte opzioni. Supponiamo che la pagina richiesta abbia il seguente frammento: <INPUT TYPE= CHECKBOX NAME= LingueNote VALUE= uk > Inglese <INPUT TYPE= CHECKBOX NAME= LingueNote VALUE= fr > Francese <INPUT TYPE= CHECKBOX NAME= LingueNote VALUE= d > Tedesco Gen. 2007 pag. 8/11
Se viene marcata una sola risposta, per esempio Francese, la stringa restituita varrà fr ; se vengono marcate più risposte, la stringa restituita è composta di tutti i valori separati da una virgola; conoscendo per esempio tutte e tre le lingue la stringa restituita sarà uk,fr,d. Per poter disporre separatamente di tutte le risposte si può usare la seguente sequenza: 1 :<% Language=VBScript 2 :<% Dim strcheckbox 3 : strcheckbox=request.form( LingueNote ) 4 : Dim strchckboxarray 5 : strchckboxarray = split(strcheckbox,, ) 6 : dove l istruzione 5 estrae dalla stringa strcheckbox tutte le sottostringhe separate dal carattere,, inserendole nelle successive posizioni del vettore strchckboxarray. Per poter accedere alle diverse sottostringhe si può usare la sequenza: Dim i For i = LBound(strChckBoxArray) to UBound(strChckBoxArray) Response.Write strchckboxarray(i) & Next 4. Passaggio tramite appoggio sul Client con i Cookies Finora i dati sono stati comunicati da pagina a pagina: una pagina consegna i propri dati alla pagina chiamata, che li recupera. Se la pagina A comunica dati alla pagina B, e la pagina B chiama la pagina C, che ha ancora bisogno degli stessi dati, la pagina B deve nuovamente comunicarli alla pagina C, e così via, rendendo la comunicazione molto pesante. È necessario evidenziare che il rapporto Client-Server nel web è state-less, (senza persistenza dello stato. Lo stato di un sistema è l insieme dei valori assunti dalle variabili). Il server tenta di soddisfare la richiesta di qualunque client la presenti, senza tener traccia dell identità del client, per cui le informazioni scambiate vengono perse appena dopo lo scambio. ASP fornisce alcune tecniche per rendere persistente lo stato, che vengono presentate di seguito. Le informazioni che debbono essere conservate per tutte le pagine possono essere appoggiate sul client (cookie, trattato di seguito) oppure sul server (oggetti Session o Application, trattati nei paragrafi successivi). Un cookie (trad. biscottino) è un piccolo file che viene memorizzato sul disco del client (a condizione che il suo browser accetti i cookie opzione presente come livello di privacy). Lo sviluppatore deve specificare il tempo di persistenza del cookie, che, una volta scaduto, viene rimosso dal client. Ogni cookie deve avere un nome; può avere zero, una o più chiavi, scelta consigliabile per raggruppare più informazioni. Per esempio si può considerare un cookie di nome Utente, che ha come chiavi Nome e UltimaVisita. Il seguente frammento di pagina CreaCookie.ASP crea il cookie dell esempio sopra descritto. <%@ Language=VBScript <%Option Explicit <% Response.Cookies( Utente )( Nome )= Rossi Response.Cookies( Utente )( UltimaVisita )=Now Per acquisire le informazioni che il codice precedente ha memorizzato sul client, si usa il seguente frammento di codice: <%@ Language=VBScript Gen. 2007 pag. 9/11
<%Option Explicit <% Dim strnome, strdata strnome = Request.Cookies( Utente )( Nome ) strdata = Request.Cookies( Utente )( UltimaVisita ) Nome = <% = strnome Ultima data = <% = strdata La proprietà Expires specifica la durata in vita del cookie. Per default il cookie scade quando l utente chiude il proprio browser. Quando un cookie è creato, si può stabilire una durata fino a una certa data, o di un periodo di una settimana, un anno, ecc. Esempi sono: Response.Cookies( Utente ).Expires = #31 dicembre 2010# Scade al 31 dicembre 2010 Response.Cookies( Utente ).Expires = Date() + 7 Scade dopo una settimana. 5. Passaggio tramite appoggio sul Server con l oggetto Session Per ciascun utente che si connette, viene allocata sul web server un area che conterrà un istanza dell oggetto Session. Se l utente non interagisce per un certo periodo con il server, l area allocata viene rilasciata. Il periodo di default è di 10 minuti, ma questo periodo può essere modificato dallo sviluppatore. Nell oggetto Session possono essere memorizzati dati (detti variabili di sessione) di qualunque tipo (numeri, stringhe, date, array, oggetti). È possibile registrare dati con la seguente sintassi: Session(Nome_Variabile_Sessione) = valore Esempi sono: <% Session( DataDiOggi ) = Date() Session( Nome ) = Rossi Un frammento di una pagina ASP che voglia recuperare tali dati ha la seguente forma: <% Dim stroggi, strmionome stroggi = Session( DataDiOggi ) = Date() strmionome = Session( Nome ) <% Response.Write Ciao & strmionome & <br> Gen. 2007 pag. 10/11
Response.Write Oggi e il & stroggi 6. Passaggio tramite appoggio sul Server con l oggetto Application L oggetto Application è condiviso tra tutti gli utenti della stessa applicazione. Se è necessario disporre di un informazione che interessa tutti gli utenti della stessa applicazione, si può usare, similmente all oggetto Session, delle variabili di applicazione, con la seguente sintassi, rispettivamente per assegnare un valore e per recuperarlo: Application(Nome_Variabile_Applicazione) = valore Variabile = Application(Nome_Variabile_Applicazione) Confronto tra i modi di trasmettere dati tra pagine web Metodo Vantaggi Svantaggi Stringa di interrogazione Cookie Variabili di sessione Variabili di applicazione Se il client non ha abilitato i cookie. Pochi dati tra due pagine. Scarso impegno di memoria nel server. Se serve mantenere lo stato per periodi più lunghi di una sessione. Nessun sovraccarico sul server. Si possono memorizzare anche array e oggetti. I dati vengono conservati solo per la durata della sessione. Dati che cambiano spesso per tutti gli utenti della stessa applicazione. Difficoltà di manutenzione di tutte le pagine del sito se i dati e le pagine sono numerosi Non utilizzabili se il client li ha disabilitati. Si possono memorizzare solo dati semplici come numeri, stringhe, date, ma non si possono memorizzare array e oggetti. Sovraccaricano il server se i dati sono numerosi e se si collegano molti client. I dati vengono conservati solo per la durata della sessione. Solo dati globali (non personalizzati per client) Gen. 2007 pag. 11/11