|
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 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. |