Oggetti Request e Response

lezione 2

 

 

 

 

Fausto Marinsalta

 

 



Introduzione

In questa lezione verranno trattati due oggetti fondamentali per la programmazione ASP: Request e Response . Il primo fornisce informazioni relative alle richieste inviate dall’utente all’applicazione web mentre il secondo ci consente di inviare messaggi di risposta al client.

Dalla breve descrizione fornita è facile notare la complementarità dei due oggetti. Sono facili da utilizzare e non hanno la necessità di essere istanziati! Dispongono di proprietà, metodi e collezioni (insiemi di valori). Inoltre permettono di acquisire ed inviare importanti informazioni come i cookie.

Response

Il primo oggetto che prenderemo in considerazione è Response . Nella lezione precedente abbiamo avuto la possibilità di incontrarlo all’interno di uno script.

L’oggetto Response dispone di una collezione (Cookies), nove proprietà (ContentType, Expires, Buffer, Pics, IsClientConnected, ExpiresAbsolute, Status, Charset e CacheControl) e sette metodi (Appendtolog, Binarywrite, Clear, End, Flush, Redirect e Write). In questo tutorial verranno descritti solo alcuni di questi membri.

Il metodo Write è sicuramente il più utilizzato (per chi conosce il PHP, il comando corrisponde alla funzione echo ), esso permette di generare testo di output in HTML, in seguito questo codice verrà normalmente sottoposto a parsing (interpretazione) del browser. Vediamo un esempio pratico dove viene utilizzata anche la proprietà Buffer :

Listato 1 – Metodo Write

1.     <%@Language=JavaScript %>

2.     <% Response.Buffer=true%>

3.     <html>

4.        <head>

5.          <title>Metodo Write</title>

6.        </head>

7.        <body>

8.     <%

9.     Response.Write(“<p align=’center’>”);

10. Response.Write(“Utilizzo pratico del metodo Write”);

11. Response.Write(“</p>”);

12. Response.Write(“</body></html>”);

13. Response.End();

14. %>

 

La riga 2 ci permette di immagazzinare tutto il codice HTML in un buffer. Tale codice verrà rilasciato al client mediante l’uso del metodo End() presente nella riga 12.

Tutte le righe comprese tra 9 e 12 utilizzano il metodo Write . Estremamente importante: per utilizzare delle virgolette doppie (“) è necessario ricorrere al carattere di escape \” oppure utilizzare singoli apici o, quando possibile, utilizzare il valore corrispondente dell’entità (&#34;).

Il Listato1 genererà il seguente codice di output (con una diversa spaziatura):

Listato 2 – Codice HTML

<html>

   <head>

     <title>Metodo Write</title>

   </head>

   <body>

     <p align=’center’>

     Utilizzo pratico del metodo Write

     </p>

   </body>

</html>

 

Molto spesso può risultare utile, generare come output il contenuto di una variabile. Per fare ciò basta non includere il nome della variabile tra le virgolette:

 

Response.Write(Nome);

 

E’ possibile anche inserire un misto tra variabile e testo:

 

Response.Write(“Il tuo nome è: “ + Nome + “ vero?”);

 

Esistono altri due metodi che ci permettono di “manipolare” il buffer: Clear e Flush . Vediamoli in azione:

Listato 3 – Metodo Clear e Flush

1.     <%@Language=JavaScript %>

2.     <% Response.Buffer=true%>

3.     <html><head><title>Clear</title></head><body>

4.     <%

5.     Response.Write(“<p>Prova1..</p>”);

6.     Response.Clear();

7.     Response.Write(“<p>Prova2..</p>”);

8.     Response.Flush();

9.     Response.Write(“<p>Prova3..</p>”);

10. Response.Write(“</head></html>”);

11. Response.End();

12. %>

 

Il metodo Clear utilizzato nella riga 6 cancella tutto il contenuto del buffer presente in quel momento (nell’esempio “ <p>Prova1..</p> ”).

Il metodo Flush invia immediatamente tutto il contenuto attuale del buffer ( <p>Prova2..</p> ).

Altro metodo di una certa utilità è: Response.Redirect() . Questo membro accetta in input un URL completo (non relativo) e invia immediatamente l’utente all’indirizzo indicato dall’URL.

Listato 4 - Redirect

1.     <%@Language=JavaScript %>

2.     <% Response.Buffer=true%>

3.     <html><head><title>Redirect</title></head><body>

4.     <%

5.     Response.Redirect(“http://www.inwind.it”);

6.     Response.Write(“</head></html>”);

7.     Response.End();

8.     %>

 

Importante: se si sta utilizzando il PWS o IIS (Internet Information Service) e come URL viene utilizzato un indirizzo fisico, il browser uscirà automaticamente dalla modalità “localhost”! Per questo motivo è molto importante inserire un indirizzo completo del tipo “ http://www.inwind.it ”.

Programmando in JavaScript (lato client), utilizzare dei cookie è scomodo qualora si desideri inviare e ricevere valori. In ASP queste operazioni sono immediate, avvalendosi della collezione Cookie che l’interfaccia ci mette a disposizione. Vediamo il procedimento con cui essi vengono inviati:

Listato 5 – I Cookie

1.     <%@Language=JavaScript %>

2.     <% Response.Buffer=true%>

3.     <html><head><title>Cookie</title></head><body>

4.     <%

5.     var i;

6.     var Data = new Date();

7.     Data.setMonth(Data.getMonth()+10);

8.     Response.Cookies(“Ele”).expires = Data.toLocaleString();

9.     Response.Cookies(“Ele”)(“Oggetto1”) = “abc”;

10. Response.Cookies(“Ele”)(“Oggetto2”) = “def”;

11. for(i=3;i==5;i++)

12.    Response.Cookies(“Ele”)(“Oggetto” + i) = i;

13. Response.End();

14. %>

 

La riga 6 crea una nuova istanza dell’oggetto Date .

La riga 7 imposta il mese dell’istanza Data , dieci mesi in avanti.

La riga 8 fa in modo che il cookie rimanga all’interno del computer del client per dieci mesi, infatti il membro expires imposta la data in cui il cookie “scadrà”; da notare che “ Ele ” è il nome del cookie.

Le righe 9 e 10 creano delle doppiette proprietà-valore: “ Oggetto1 ” e “ Oggetto2 ” sono le proprietà mentre i valori sono a destra dell’operatore di uguaglianza (“ abc ” e “ def ” in questo caso).

Le righe 11 e 12 sono state inserite per dimostrare che è possibile inserire cookie in modo dinamico, infatti i nomi delle proprietà possono contenere valori di variabili, in questo caso si è rivelato molto utile utilizzare i numeri compresi tra 3 e 5.

Request

Request è un elemento fondamentale per la programmazione in ASP. Esso dispone di una proprietà (TotalBytes), un metodo (BinaryRead) e ben cinque collezioni (ClientCertificate, Cookies, Form, QueryString e ServerVariables).

Il primo membro che prenderemo in esame è la collezione Form che ci permette di ricavare dei valori inviati direttamente dall’utente. Per usufruire di questo membro è necessario che la pagina venga chiamata mediante un form. Ad esempio abbiamo la seguente pagina HTML:

Listato 6 – Pagina HTML con form

1.     <html>

2.        <head>

3.          <title>Form</title>

4.        </head>

5.        <body>

6.         <form action=”go.asp” method=”post” name=”form1” id=”form1”>

7.         Inserisci il tuo nome: <input type=”text” size=”30” name=”nome” id=”nome” />

8.         <br/><input type=”submit” value=”Invia” />

9.         </form>

10.    </body>

11. </html>

 

La riga 6 introduce un form che invia tutti i dati alla pagina go.asp tramite il metodo post . In alternativa al valore post è possibile utilizzare get (si sceglie quest’ultimo valore solo quando i valori da inviare avranno breve durata come ad esempio avviene per i motori di ricerca).

Nella riga 7 è importante notare l’attributo name , il valore che gli viene assegnato verrà utilizzato nella pagina go.asp.

E’ necessario a questo punto definire la pagina go.asp:

Listato 7 – Utilizzo del membro Form (go.asp)

1.     <%@Language=JavaScript %>

2.     <% Response.Buffer=true%>

3.     <html><head><title>Form..</title></head><body>

4.     <%

5.     var Nome;

6.     Nome = Request.Form(“nome”);

7.     Response.Write(Nome);

8.     Response.End();

9.     %>

 

La riga 6 assegna alla variabile Nome il valore che era stato inserito dall’utente nell’input “ text ” con la proprietà name uguale a “ nome “ nella pagina precedente.

Non c’è altro da dire se non che (logicamente) il valore “ nome ” della riga 6 deve essere sostituito di volta in volta. E’ anche possibile richiedere più valori. La pagina go.asp deve essere necessariamente richiamata tramite il submit del form.

Nel paragrafo precedente abbiamo imparato ad inviare cookie ma non a riceverli. A tal fine basta una sola riga di codice per ogni valore che si vuole acquisire dal cookie, magari utilizzando il ciclo for..in :

Listato 8 – Richiesta di cookie

1.     <%@Language=JavaScript %>

2.     <% Response.Buffer=true%>

3.     <html><head><title>Cookie</title></head><body>

4.     <%

5.     var Value;

6.     Value = Request.Cookies(“Ele”)(“Oggetto1”);

7.     Response.Write(Value + “<br/>”);

8.     Response.Write(Request.Cookies(“Ele”)(“Oggetto2”));

9.     Response.End();

10. %>

 

La riga 6 richiede il valore della proprietà “ Oggetto1 ” del cookie chiamato “ Ele ” e lo assegna alla variabile cookie.

Sono spesso utili le variabili interne al server come l’IP (Internet Protocol) oppure il percorso fisico in cui ci troviamo. La collezione ServerVariables ci permette di fare tutto ciò. È sufficiente digitare Request.ServerVariables(“x”) dove al posto della x si deve inserire una variabile. Ecco un breve elenco delle principali variabili acquisibili dal server:

 

APPL_PHYSICAL_PATH

Ritira il percorso fisico attuale del server.

HTTP_REFERER

Ritorna una stringa contenente il percorso della pagina chiamante.

LOGON_USER

L’account Windows con cui l’utente si è “loggato”.

REMOTE_ADDR

Ritira l’indirizzo IP dell’utente.

URL

Ritorna la porzione base dell’URL attuale.

 

Per le altre variabili che non sono state elencate (circa 43) potete consultare la documentazione del PWS o IIS oppure il sito http://msdn.microsoft.com.

Listato 9 – Variabili dal server

1.     <%@Language=JavaScript %>

2.     <% Response.Buffer=true%>

3.     <html><head><title>Variabili</title></head><body>

4.     <%

5.     var Variab;

6.     Variab = Request.ServerVariables(“URL”);

7.     Response.Write(Variab);

8.     Response.End();

9.     %>

Conclusioni

Imparare un linguaggio significa anche impadronirsi di una terminologia tecnica corretta. Nel caso vi siate smarriti nella terminologia, non preoccupatevi: è perfettamente normale. Per venirvi in contro, dalle prossime lezioni inseriremo un chiaro glossario tecnico. Iniziare è difficile ma…ne vale la pena!

In questa lezione abbiamo imparato a:

·         generare codice di output

·         manipolare il buffer ed i cookie

·         acquisire valori inviati dall’utente e dal server.