asp - asp.net - aspcode.it

COMMUNITY - Login
 Username:
 
 Password:
 
Voglio registrarmi!
Password dimenticata?
 Utenti on-line: 0
 Ospiti on-line: 17522
ASPCode.it - Store
<< lezione precedente lezione successiva >>

ASP: la guida introduttiva - Capitolo 6 - L'oggetto built-in Request

   6.0   Scopo e utilizzo dell'oggetto Request
   6.1   La collezione Request.Form
   6.2   La collezione Request.QueryString
   6.3   La collezione Request.ServerVariables
   6.4   Esercitazione sull'oggetto Request

6.0 - Scopo e utilizzo dell'oggetto Request

L'oggeto built-in Request, il secondo di questo tipo sul percorso della guida, è il componente dedicato al recupero delle informazioni di input messe a disposizione di una pagina ASP. Maneggiando questo oggetto è possibile in particolar modo recuperare i contenuti dei moduli HTML inviati in allegato alla richiesta della pagina dal client, leggere il contenuto dei cookie precedentemente impostati, recuperare delle informazioni relative al tipo di connessione remota ed altro. Insomma, con Request è possibile ottenere in fretta tutte quelle informazioni fornite da un utente o relative ad un utente. Alla lettura/scrittura dei cookie sarà dedicato un capitolo a parte, quindi in questo momento si istruirà il lettore all'utilizzo delle altre caratteristiche elencate. La conoscenza e la capacità di buon uso dei form HTML sono prerequisiti richiesti per la comprensione di molte delle cose che verranno dette.
Come per il resto degli oggetti bulit-in, l'utilizzo di Request come oggetto precostituito è intuitivo e basato sulla classica nozione puntata:

Request.nomeProprietà
Request.nomeMetodo(parametro1,parametro2,...)
Request.nomeCollezione("chiave")

Schematicamente ecco i controlli messi a disposizione dall'oggetto Request:

Proprietà
   
TotalBytes Specifica il numero totale di byte inviati dal client nel corpo della richiesta. Di sola lettura
   
Metodi
   
BinaryRead Restituisce i dati inviati dal client come parte della richiesta POST
   
Collezioni
   
ClientCertificate Collezione dei certificati inviati dal client
Cookies Collezione dei valori relativi ai cookie di libero accesso da parte della pagina
Form Collezione che riporta i valori degli elementi di un form inviato insieme alla richiesta HTTP con utilizzo del metodo POST
QueryString Collezione che riporta i valori delle variabili rappresentat nella query string
ServerVariables Collezione che riporta i valori di alcune predefinite variabili d'ambiente
   

 

6.1 - La collezione Request.Form

Le pagine ASP sono in grado di leggere i dati a loro inviati dall'utente con metodo POST mediante i semplici form HTML. Si consideri il seguente modulo:

<form action="recupera.asp" method="POST">
  <input type="text" name="text1" value="">
  <input type="submit" value="invia il testo">
</form>

Nella pagina di destinazione dei dati, recupera.asp nel caso dell'esempio, i dati possono essere recuperati mediante la scansione della collezione Request.Form. Ciò avviene in maniera molto semplice: per leggere il testo inserito nel campo di nome text1 è sufficiente chiamare

var testo = Request.Form("text1");

utilizzando quindi come chiave di lettura della collezione lo stesso nome scelto per il corrispondente campo presente nel form della pagina HTML di partenza. Una tecnica utilizzata per individuare se si è ricevuto o meno un certo dato è basata sulla conversione in stringa del dato che si ricerca. Un Request.Form assente convertito in tale forma darà origine al valore di testo undefined:

var testo = String(Request.Form("text1"));
if (testo=="undefined") // non è stato inviato alcun campo nominato text1!

Tutti i campi restituiscono solitamente la stringa value a loro associata.
Nei campi di tipo text il valore è direttamente immesso dall'utente, mentre ad esempio in quelli di tipo hidden è scelto direttamente dall'autore della pagina e non più modificabile. In presenza di bottoni di tipo radio viene restituito il value associato alla scelta fatta. Ad es.

<input type="radio" name="r1" value="primo">
<input type="radio" name="r1" value="secondo">
<input type="radio" name="r1" value="terzo">

Nel caso l'utente abbia selezionato il secondo tasto il contenuto di Request.Form("r1") sarà proprio "secondo", similmente negli altri casi.
Interessante è il comportamento dei checkbox. A differenza dei pulsanti radio, infatti, i checkbox ammettono la selezione multipla. Qualora l'utente selezionasse un solo tasto tra tutti quelli aventi lo stesso nome si recupererebbe in forma di stringa il value ad esso associato. Qualora invece i pulsanti selezionati fossero due o più si otterrebbe indietro un Array di stringhe di tanti elementi quante sono le caselle spuntate. Ogni stringa dell'Array rappresenterà il value di un differente pulsante tra quelli scelti. Comportamenti simili avvengono per i campi select a selezione multipla.
Basta sapere un po' maneggiare i form HTML per esplorare in breve tutte le possibili combinazioni. Nel capitolo successivo si metteranno fattivamente in pratica tali nozioni.

6.2 - La collezione Request.QueryString

La collezione Request.QueryString è per molti versi analoga a Request.Form, con la particolare differenza che i dati passati alla pagina devono essere appesi in una query string (cioè accoppiati alla richiesta dell'URL e divisi da esso per mezzo di un punto di domanda "?"). Un tipico esempio di una query string appesa ad un URL è il seguente:

http://www.dominio.com/dir1/pagina.asp?testo=ciao%20a%20tutti

I browser generano automaticamente dati in query string inviando dei moduli con metodo GET. Si prenda a modello il segiente form:

<form action="recupera.asp" method="GET">
  <input type="hidden" name="h1" value="testo di prova">
  <input type="submit">
</form>

L'invio di tale modulo appende all'URL di recupera.asp la seguente query string:

?h1=testo%20di%20prova

Il recupero dei dati avviene poi in maniera naturale e simile a quella analizzata con Request.Form:

var testo = Request.QueryString("h1");
// testo sarà uguale a "testo di prova"

La convenienza dell'utilizzo di una query string consiste nel fatto che si possono concedere alla pagina di destinazione dei parametri anche senza dover necessariamente ricorrere all'ausilio dei form. Possono benissimo essere creati, infatti, dei collegamenti ipertestuali già impostati con una query string:

<a href="apri.asp?id=56">Messaggio numero 56</a>

Si pensi un momento alla potenza di questa tecnica che permette di gestire automaticamente grossi archivi di dati in continua modifica con un insieme di poche pagine che compiono azioni differenti a seconda della query string a loro passata. Nel caso di un forum per discussioni, ad esempio, ogni singolo messaggio potrebbe essere memorizzato in un database o in un file di testo in maniera tale che ad esso corrisponda univocamente in qualche modo un identificatore numerico. Si potrebbe realizzare così un'unica pagina ASP che mostri il contenuto del messaggio il cui identificatore è proprio quello specificato dalla query string. Si eviterebbe così di dover creare un differente documento HTML per ogni messaggio, con notevole risparmio di risorse. Gli aspetti particolari derivanti da questa tecnica saranno esaminati a livello pratico nei tutorial che si incontreranno nel percorso di questa guida.
Per ora però si tenga presente un aspetto fondamentale. Nelle query string molti caratteri considerati non ammissibili in una richiesta di URL (come gli spazi bianchi o le lettere accentate) devono essere sostituiti con il loro corrispondenti codici ASCII nel formato %xx, dove xx è un valore esadecimale. I browser effettuano automaticamente la conversione dei dati verso questo formato se essi sono veicolati attraverso un form inviato con metodo GET. Per questo motivo il value dell'esempio precedente "testo di prova" diventava automaticamente in query string "testo%20di%20prova". I dati restituiti dalla collezione Request.QueryString subiscono automaticamente la conversione inversa. Nel caso in cui si voglia però appendere "manualmente" una query string ad un URL, come nell'esempio del link ipertestuale di poche righe sopra, bisogna porre attenzione a questo aspetto, in quanto il compito di effettuare la conversione non ricadrebbe più sul browser. JScript, relativamente a tale questione, fornisce due funzioni native per la conversione delle stringhe: escape(stringa) e unescape(stringa). L'utilizzo è semplice e lo si deduce dal seguente esempio:

var testo1 = "testo di prova";
var testo2 = escape(testo1);
Response.Write(testo2);
// stampa: testo%20di%20prova
var testo3 = unescape(testo2);
Response.Write(testo3);
// stampa: testo di prova

6.3 - La collezione Request.ServerVariables

La collezione Request.ServerVariables si occupa del fornire delle informazioni relative all'utente connesso ad una pagina o del restituire i valori di alcune variabili d'ambiente. L'utilizzo è classico, basato sulla nozione puntata e sulle chiavi:

var variabile = Request.ServerVariables("nome_chiave");

Le possibili chiavi sono molteplici ed alcune di esse dipendono strettamente dal server che elabora la pagina. In questa sede si farà una cernita solo di quelle più ricorrenti e di quelle più frequentemente utilizzate:

Chiave Utilizzo
   
ALL_HTTP Restituisce tutti gli header HTTP associati alla richiesta del client
CONTENT_LENGTH Restituisce la lunghezza dei contenuti inviati dal client
CONTENT_TYPE Restituisce il tipo di dato dei contenuti inviati dal client. Si utilizza con le richieste che trasmettono informazioni a partire dal client, come con i form HTML inviati con metodo POST o GET
HTTP_<HEADER> Sostituendo <HEADER> con il nome di uno specifico header appartenente alla richiesta HTTP è possibile conoscerne il contenuto
HTTPS Restituisce ON se la richiesta arriva attraverso canali sicuri (SSL), OFF in caso contrario
LOCAL_ADDR Restituisce l'indirizzo del Server
QUERY_STRING Restituisce l'intera query string associata all'URL
REMOTE_ADDR Restituisce l'indirizzo IP dell'host che ha inviato la richiesta
REMOTE_HOST Restituisce il nome dell'host che ha inviato la richiesta
SCRIPT_NAME Restituisce il percorso virtuale dello script in esecuzione
SERVER_NAME Restituisce il nome del server, il suo alias DNS o il suo indirizzo IP
SERVER_PORT Restituisce il numero della porta alla quale la richiesta è stata inviata
SERVER_SOFTWARE Restituisce il nome e la versione del server software che ha risposto alla richiesta
   

 

6.4 - Esercitazione sull'oggetto Request

Il seguente esempio è utile per mettere meglio a fuoco quanto appreso nei paragrafi precedenti. Verrà realizzato un modulo HTML per l'invio dei dati attraverso metodo GET e una pagina ASP in grado di riceverli, interpretarli e maneggiarli al fine di produrre un output dimostrativo delle potenzialità dell'oggetto Request.

Si cominci allora proprio dal modulo, che può essere racchiuso in una semplice pagina HTML chiamata form.htm:

<html>
<head>
<title>Esercitazione sull'oggetto Request</title>
</head>
<body>
Compila ed invia il seguente modulo:<br>
<form action="elabora.asp" method="get">
Introduci il tuo nome:<br>
<input type="text" name="nome" value=""><br>
Introduci il tuo cognome:<br>
<input type="text" name="cognome" value=""><br><br>
Specifica il tuo sesso:<br>
<input type="radio" name="sesso" value="M"> M
<input type="radio" name="sesso" value="F"> F
<br><br>
<input type="submit" value="Invia il modulo">
</form>
</body>
</html>

La pagina ASP in grado di ricevere i dati deve ora essere posizionata nella medesima cartella di form.htm e deve essere nominata elabora.asp:

<%@ LANGUAGE = JScript %>
<%
// Recupero del modulo

var nome = Request.QueryString("nome");
var cognome = Request.QueryString("cognome");
var sesso = Request.QueryString("sesso");

var dizione = (sesso=="F") ? "una femminuccia" : "un maschietto";

var SCRIPT = Request.ServerVariables("SCRIPT_NAME");
var SERVER_NAME = Request.ServerVariables("SERVER_NAME");
var QUERY_STRING = Request.ServerVariables("QUERY_STRING");
var IP = Request.ServerVariables("REMOTE_ADDR");
%>
<html>
<head>
<title>Esercitazione sull'oggetto Request</title>
</head>
<body>
<b>GRAZIE PER AVER SPEDITO IL MODULO!</b><br><br>
Ecco i dati che mi hai inviato:<br><br>
Nome: <b><%=nome%></b><br>
Cognome: <b><%=cognome%></b><br><br>
Stando a quanto dici dovresti essere <%=dizione%><br><br>
In più io aggiungo:<br><br>
Nome di questa pagina: <b><%=SCRIPT%></b><br>
Nome del server: <b><%=SERVER_NAME%></b><br>
Tuo indirizzo IP: <b><%=IP%></b><br><br>
L'intera query string che mi hai passato è: <b><%=QUERY_STRING%></b><br><br>
</body>
</html>

Come ulteriore esercitazione si provi a produrre un secondo form utilizzando però il metodo POST per il suo invio, ed implementando magari l'uso di campi di input quali checkbox, textarea e select.

<< lezione precedente lezione successiva >>


Utenti connessi: 17522