Objet Server  

L'objet Server fournit plusieurs fonctions diverses que vous pouvez utiliser dans vos applications ASP. Bien que la plupart de ses méthodes soient d'un emploi obscur et peu fréquent, trois d'entre elles (CreateObject, Execute et Transfer) et la seule propriété de l'objet Server (ScriptTimeout) sont extrêmement précieuses. Vous les emploierez dans de nombreux scripts.

Comme son nom l'indique, l'objet Server représente le serveur Web proprement dit, et nombre des fonctionnalités qu'il fournit sont simplement les fonctionnalités que le serveur Web utilise lors du traitement normal des demandes des clients et des réponses du serveur.

Commentaires/Dépannage  
 
 

L'utilisation de la propriété et des méthodes de l'objet Server est très simple. En règle générale, si vous employez les fonctionnalités de l'objet Server en respectant sa syntaxe, vous obtiendrez le résultat escompté. Les erreurs que vous rencontreriez sont généralement dues à un problème de configuration ou d'installation d'IIS.

ScriptTimeout  
Server.ScriptTimeout [ = lngNumSeconds]
 

Définit la durée maximale pendant laquelle le serveur Web continue à traiter votre script. Si vous n'entrez pas de valeur pour cette propriété, la valeur par défaut vaut 90 secondes.

 
Paramètres
lngNumSeconds

Le nombre de secondes pendant lequel le serveur Web doit continuer à traiter votre script avant de rencontrer un dépassement de délai et d'envoyer une erreur ASP au client.

 
Exemple
<%

' The following code sets the amount of time before the
' script times out to 100 seconds. If the script takes
' more time than 100 seconds, the script will time out and 
' a timeout error will be sent to the client.
Server.ScriptTimeout = 100

%>
 
Remarques

Le nombre utilisé pour fixer la valeur de la propriété ScriptTimeout doit être supérieur ou égal à celui de la propriété AspScriptTimeout de la métabase IIS, faute de quoi le réglage sera ignoré. Par exemple, le réglage par défaut de AspScriptTimeout dans la métabase IIS vaut 90 secondes. Si vous utilisez la propriété ScriptTimeout pour réduire ce délai à 10 secondes sans modifier au préalable le réglage dans la métabase, le script emploiera toujours un délai d'expiration de 90 secondes.

Il peut être utile de réduire la valeur de la propriété AspScriptTimeout de la métabase IIS. Un délai de 90 secondes est plutôt long pour le traitement d'une demande Web. Si un utilisateur accepte de patienter pendant une minute et demie, c'est probablement qu'il s'est endormi. Toutefois, si votre application exige une valeur de délai plus longue, il est conseillé d'utiliser une page "Veuillez patienter..." intermédiaire, dont l'événement OnLoad appellera à son tour le script plus long ou la page ASP. L'utilisateur sera ainsi averti qu'il devra attendre un certain temps.

Le code suivant fait la démonstration de cette technique. Supposons que vous deviez appeler le script InfoSearch.ASP ; vous savez qu'il emploie un seul paramètre, strSrchItem, et son exécution peut prendre jusqu'à 2 minutes. Au lieu d'appeler immédiatement InfoSearch.ASP, vous pourriez tout d'abord appeler la page suivante :

<HTML>
<HEAD><TITLE>Search Wait</TITLE></HEAD>
<BODY LANGUAGE="VBScript" OnLoad = "PageLoad( )">
Please wait, your request is being processed...
<SCRIPT LANGUAGE="VBScript">
Sub PageLoad( )
Parent.Location.HREF = _
"InfoSearch.ASP?<%=Request.ServerVariables("QUERY_STRING")%>"
End Sub
</SCRIPT>
</BODY>
</HTML>

Comme vous le voyez, lorsque ce script se charge, il appelle la page contenant le long script et envoie la chaîne d'interrogation initiale (récupérée à partir de la collection ServerVariables de l'objet Request ; reportez-vous au chapitre 7 pour plus d'informations). L'utilisateur est ainsi immédiatement averti, au lieu de devoir contempler un écran vide pendant le traitement d'un script.

 
CreateObject  
Set objMyObject = Server.CreateObject(strProgId)
 

Lance un objet sur le serveur. Lorsque l'objet a été lancé, ses propriétés et ses méthodes peuvent être utilisées comme vous le feriez des propriétés et méthodes des objets intégrés fournis avec ASP. Les DLL à partir desquelles ces objets sont lancés doivent être installées et inscrites sur l'ordinateur du serveur Web indépendamment de votre installation d'IIS.

 
Paramètres
objMyObject

Le nom d'une variable qui contiendra une référence à l'objet que vous lancez.

strProgId

L'ID applicatif de la classe à partir de laquelle vous voulez lancer un objet. Le format du paramètre strProgId est le suivant :

[LibraryName.]Component[.Version]

Cette valeur, qui se trouve dans le registre, représente la manière dont la DLL Du composant y est enregistrée. Même si elle peut contenir le nom de la DLL, ce n'est pas souvent le cas. Par exemple, la DLL à partir de laquelle vous lance l'objet Ad Rotator est adrot.dll. Toutefois, son ProgID est MSWC.AdRotator.1, comme le stipule la valeur par défaut de la clé de registre suivante :

HKEY_CLASSES_ROOT\CLSID\{1621F7C0-60AC-11CF-9427-444553540000}\ProgID

Comme vous pouvez le constater, il s'agit du ProgID de la DLL enregistrée ; il contient des informations de version en plus de son nom enregistré. Il peut toutefois arriver que plusieurs versions d'une même DLL soient enregistrées sur votre ordinateur. Dans ce cas, vous pouvez utiliser la valeur par défaut de la clé de registre VersionIndependentProgID pour lancer la version la plus récente de la DLL. Dans notre exemple (ad rotator), le ProgID indépendant de la version est MSWC.AdRotator.

 
Exemple
<% 

' The following code uses the CreateObject method of 
' the Server object to instantiate an Ad Rotator object 
' on the server.
Dim objAdRotator

Set objAdRotator = Server.CreateObject("MSWC.AdRotator")

%>
 
Remarques

Lorsqu'un navigateur client demande un script ASP contenant des objets, ASP lance ceux-ci (ce qui déclenche leurs fonctions de constructeur par défaut, s'il en existe) puis, juste avant le traitement de n'importe quel script, il appelle la méthode OnStartPage de chaque objet sur la page pour lequel un gestionnaire d'événements OnStartPage a été défini. La méthode OnStartPage permet à l'objet d'utiliser l'objet ObjectContext pour récupérer des pointeurs vers les objets ASP intégrés. Les détails relatifs à l'objet ObjectContext et aux méthodes de composants de serveur OnStartPage dépassent le cadre de cet ouvrage. Pour plus d'informations à ce sujet, reportez-vous à l'ouvrage de Shelley Powers intitulé Developing ASP Components, édité par O'Reilly & Associates.

L'emploi de la méthode CreateObject permet de créer un objet côté client de niveau page , sauf si CreateObject est appelé dans les événements Application_ OnStart ou Session_OnStart, auquel cas l'objet sera lancé respectivement avec un niveau application ou session. Les objets de niveau page sont détruits et la mémoire qu'ils occupent est libérée à la fin de la page.

Pour créer un objet de niveau application, vous devez appeler la méthode CreateObject dans l'événement Application_OnStart (reportez-vous au chapitre 4 pour plus d'informations) ou utiliser la balise <OBJECT> dans le fichier GLOBAL.ASA et fixer le paramètre SCOPE à Application. Pour plus d'informations sur le fichier GLOBAL.ASA, reportez-vous au chapitre 11.

De même, pour créer un objet de niveau session, vous devez appeler la méthode CreateObject dans l'événement Session_OnStart (reportez-vous au chapitre 10 pour plus d'informations) ou utiliser la balise <OBJECT> dans le fichier GLOBAL.ASA et fixer le paramètre SCOPE à Session. Vous pouvez également utiliser une variable Session pour contenir l'objet lancé à partir de CreateObject, comme dans l'exemple suivant :

Set Session("objMyAdRot") = _
    Server.CreateObject("MSWC.AdRotator")

Les objets de niveau application ne sont pas détruits avant le déclenchement de l'événement Application_OnEnd. De même, les objets de niveau session sont détruits au terme d'une session d'utilisateur ou lorsque la méthode Abandon de l'objet Session est appelée ; reportez-vous auchapitre 10 pour plus d'informations.

Lorsqu'un objet a été lancé, vous pouvez le détruire en fixant sa valeur au mot clé Nothing, comme dans l'exemple de code suivant :

Set objMyAdRot = Nothing

Vous pouvez également remplacer la valeur de la variable d'objet afin de libérer la mémoire utilisée pour l'objet initial :

Set objMyAdRot = strSomeOtherValue

CreateObject ne permet pas de créer une instance d'un des objets intégrés. Par exemple, le code suivant génère une erreur d'exécution :

Set objMySession = Server.CreateObject("Session") ' WRONG
 
Execute  
Server.Execute (strPath)
 

La méthode Execute permet d'appeler et d'exécuter un script ASP à partir d'un autre script ASP. Lorsque l'exécution du script appelé est terminée, le contrôle revient à la page ASP qui a lancé l'appel de la méthode Server.Execute. La méthode Execute permet de scinder des applications complexes en composants modulaires et réutilisables qui peuvent être appelés en cas de besoin. La méthode Execute est une nouveauté de ASP 3.0/IIS 5.0.

 
Paramètres
strPath

Le chemin d'accès absolu ou relatif du script ASP que vous voulez exécuter. Seuls les scripts dans l'espace applicatif de l'application actuelle peuvent être exécutés à l'aide de cette méthode.

 
Exemple

Dans cet exemple, le second script, qui affiche un texte publicitaire, n'est appelé (à l'aide de la méthode Execute) par le premier script que si l'utilisateur actuel n'est pas membre du club "No Ad".

**** BEGIN ExecuteExamplePage.ASP ********
<HTML>
<HEAD>
<TITLE>
Execute Example Form
</TITLE>
</HEAD>
<BODY>
<% 
' This script executes an advertisement if the current
' user is not a member of the "No advertisement" club.

' Dimension Local variables.
Dim blnNoAdClub

' Test Session variable.
Session("blnNoAdClub") = False

' Set variables.
blnNoAdClub = Session("blnNoAdClub")

' If the user belongs in the "No Ad" club don't show an ad.		
If Not(blnNoAdClub) Then
	Server.Execute ("DisplayAdvertisement.asp")
End If
%>

FROM HERE DOWN IS ALL CONTENT FROM ExecuteExampleForm.asp<BR>

This page may or may not have an advertisement line at the top.

</BODY>
</HTML>
**** END ExecuteExamplePage.ASP ********

**** BEGIN DisplayAdvertisement.ASP ********
<%
Dim intSal
Dim strPos
Dim strAdString

' Test Session variable.
Session("intSal") = 4
Session("strPos") = "vp"

intSal = Session("intSal")
strPos = Session("strPos")

' Initialize first part of ad banner text.
strAdString = "Click here to request a credit card"

' Add credit limit phrase to ad.
Select Case intSal
	Case 0 ' From $10K to $20K in salary.
		strAdString = strAdString & " with a limit of up to $5000"
	Case 1 ' From $20K+ to $40K in salary.
		strAdString = strAdString & " with a limit of up to $10000"
	Case 2 ' From $40K+ to $60K in salary.
		strAdString = strAdString & " with a limit of up to $20000"
	Case 3 ' From $60K+ to $80K in salary.
		strAdString = strAdString & " with a limit of up to $50000"
	Case 4 ' From $80K+ in salary.
		strAdString = strAdString & " with a limit of up to $100000"
	Case Else ' Assume lowest salary range.
		strAdString = strAdString & " with no limit"
End Select

' Add exclusivity phrase if necessary.
If UCase(strPos) = "VP" Then
	strAdString = strAdString & " just for executives!"
Else
	strAdString = strAdString & "!"
End If

' Display advertisement text string.
Response.Write "<FONT SIZE="5" COLOR = "red">" & strAdString & "</FONT><BR><BR>"

%>
**** END DisplayAdvertisement.ASP ********
 
Remarques

La méthode Execute offre aux développeurs en ASP une excellente opportunité de scission des applications en composants de code réutilisables, faciles à gérer, qui peuvent être appelés en cas de besoin. Auparavant, le développeur ASP était contraint de rediriger, par voie applicative, l'exécution d'une page vers une autre page (un exercice coûteux en termes de vitesse d'exécution, puisqu'il exigeait l'envoi d'un en-tête au navigateur afin de rediriger sa demande), ou d'inclure un autre fichier à l'aide de la directive de prétraitement #INCLUDE. Aucune de ces solutions n'était très pratique. Comme nous l'avons indiqué précédemment, la méthode Redirect de l'objet Server (voir plus loin dans ce chapitre) exige, pour une page, une tournée d'appels entre serveur, client et serveur, ce qui est loin d'être rapide. La directive #INCLUDE force le filtre ISAPI ASP à récupérer le fichier inclus à partir du système de fichiers, à l'insérer dans le script actuel et à interpréter tout le code inclus, même s'il n'est jamais utilisé dans le script qui le contient.

Par contre, la méthode Execute permet de n'exécuter d'autres scripts par voie applicative que quand la logique du script qui y fait appel l'exige. En d'autres termes, la méthode Execute permet d'inclure des scripts de manière dynamique.

Notez que, comme les autres scripts, ceux qui sont appelés via la méthode Execute peuvent ajouter ou modifier des en-têtes HTTP inclus dans la réponse. Toutefois, comme dans le cas des scripts autonomes, si le script appelé ajoute ou modifie des en-têtes HTTP après l'envoi d'une réponse, une erreur se produit.

Comme vous pouvez vous y attendre, la plage de variables est différente pour chaque script (script appelant et script appelé). Par exemple, dans le code suivant, il existe une variable nommée strName dans les deux scripts.

CALLING SCRIPT
<%
Dim strName
strName = "Sam"
Server.Execute("CalledScript.asp")
%>

CalledScript.asp
<%
Dim strName
Response.Write strName
%>

Dans l'exemple précédent, strName est déclarée dans les deux scripts. Toutefois, elle n'est pas initialisée dans le second. Dans cet exemple, Response.Write n'entraînerait aucune écriture dans la réponse, car la valeur de strName dans le script appelé n'est pas définie.

Lorsqu'une page ASP appelle Server.Execute afin de passer à une autre page ASP, tous les objets ASP intégrés de la première sont transmis au script appelé. Par exemple, toute les valeurs de la collection Form de l'objet Request sont disponibles pour la page ASP lancée par l'appel de la méthode Execute de l'objet Server.

Notez que selon la documentation Microsoft, la méthode Execute permet d'ajouter un paramètre QueryString à la fin de l'URL appelée. Toutefois, au moment de la rédaction de l'addendum de cet ouvrage (mars 2000), l'ajout d'un paramètre QueryString à une URL produit une erreur. Selon le service d'assistance technique de Microsoft, il s'agit là d'un bogue conne de IIS 5.0 et un correctif est en cours de réalisation.

Enfin, si vous appelez un script à l'aide de la méthode Execute à partir d'un script défini comme transactionnel, et si le script appelé entraîne l'annulation de la transaction, l'événement OnTransactionAbort de la page appelée est appelé en premier lieu puis, au terme de l'exécution du script appelé, l'événement OnTransactionAbort de la page appelante est exécuté. Par exemple, supposons que le script suivant, CallingScript.ASP, appelle encore le script CalledScript.ASP.

CALLINGSCRIPT.ASP
<%@ TRANSACTION=Required%>
<%
Server.Execute "CalledScript.asp?strName=bob"
Sub OnTransactionAbort( )
	'Clean up code for CallingScript.asp.
End Sub

Sub OnTransactionCommit( )
	Commit code for CalledScript.asp.
End Sub


CALLEDSCRIPT.ASP
<%@ TRANSACTION=Required%>
<%
.
.
.
'Processing code....
.
.
.
OnTransactionAbort( )
	'Clean up code for CalledScript.asp.
End Sub

OnTransactionCommit( )
	Commit code for CalledScript.asp.
End Sub

Dans le script CalledScript.ASP, une erreur entraîne l'annulation de la transaction. Dans ce cas, le code d'événement OnTransactionAbort pour CalledScript.ASP est exécuté, suivi du code d'événement OnTransactionAbort pour CallingScript.ASP.

 
GetLastError  
Set objASPErr = Server.GetLastError ()
 

La méthode GetLastError de l'objet Server permet d'afficher des informations au sujet de toute erreur survenant dans votre script. La méthode GetLastError renvoie un objet ASPError unique (voir chapitre 5). Vous pouvez utiliser l'objet ASPError renvoyé pour afficher les informations sur l'erreur ou y répondre par voie logicielle. La méthode GetLastError est une nouveauté de ASP 3.0/IIS 5.0.

 
Paramètres
objASPErr

Le nom de l'objet ASPError renvoyé par la méthode GetLastError.

 
Exemple
<%
' Instantiate an ASPError object using the GetLastError method of the 
' Server object.
Set objASPError = Server.GetLastError
%>
.
.
.
HTML Display Etc.
<%
' Use the properties of the ASPError object (returned by the GetLastError 
' object) to display information about the error.

' *** FOR MORE INFORMATION, SEE THE ASPERROR OBJECT CHAPTER.

Response.Write Server.HTMLEncode(objASPError.Category)
If objASPError.ASPCode > " Then
    Response.Write Server.HTMLEncode(", " & objASPError.ASPCode)
End If
Response.Write Server.HTMLEncode(" (0x" & Hex(objASPError.Number) & ")" ) 
& "<br>"
If objASPError.ASPDescription > " Then 
   Response.Write Server.HTMLEncode(objASPError.ASPDescription) & "<br>"
ElseIf (objASPError.Description > ") Then 
   Response.Write Server.HTMLEncode(objASPError.Description) & "<br>" End if
  .
  .
  .
 
Remarques

Dans cet exemple de code (dérivé du script 500-100.ASP par défaut fourni avec IIS 5.0), le script commence par lancer un objet ASPError à l'aide de la méthode GetLast-Error. Il affiche ensuite des informations au sujet de la dernière erreur en utilisant les propriétés de l'objet ASPError. Pour plus d'informations sur les propriétés de l'objet ASPError, reportez-vous au chapitre 5.

Il faut souligner qu'il est impossible d'utiliser la méthode GetLastError dans le script où l'erreur s'est produite. Par exemple, le code ne fonctionnera pas comme vous pourriez l'espérer :

<%
On Error Resume Next
Session("MyVar"3333) = "keyton"
Set objError = Server.GetLastError( )
Response.Write objError.ASPCode
%>

Comme vous avez utilisé l'instruction On Error Resume Next, vous pouvez vous attendre à être à même de réagir aux erreurs plus loin dans le script, grâce à la méthode GetLastError. Ce n'est malheureusement pas le cas. IIS 5.0 répond instantanément aux erreurs et redirige ("en coulisses") le client à l'aide de la méthode Server.Transfer vers une page de traitement d'erreur. Par défaut, cette page d'erreur est /iisHelp/Common/500-100.ASP. C'est sur cette page que vous pouvez personnaliser le traitement des erreurs à l'aide de la méthode GetLastError.

Pour plus d'informations sur la page de traitement d'erreur 500-100.ASP et le traitement des erreurs dans vos scripts en général, reportez-vous auchapitre 5.

La méthode GetLastError fonctionne pour les erreurs de prétraitement, les erreurs de compilation de script et les erreurs d'exécution.

Notez que la méthode GetLastError ne peut renvoyer des informations sur l'erreur que si aucun contenu n'a été envoyé au client. Si du contenu a déjà été envoyé au client, la méthode GetLastError provoquera elle-même une erreur. Dès lors, si vous avez créé des scripts dont vous prévoyez qu'ils exigeront le traitement de diverses erreurs, il est conseillé de fixer la propriété Buffer de l'objet Response àTrue (voir chapitre 8) :

Response.Buffer = True

Pour plus d'informations sur la méthode GetLastError et l'objet ASPError qu'elle renvoie, reportez-vous au chapitre 5.

 
HTMLEncode  
Server.HTMLEncode (strHTMLString)
 

Si vous devez afficher le code HTML utilisé dans ne page HTML ou un script ASP, vous devez utiliser la méthode HTMLEncode de l'objet Server. La méthode HTMLEncode de l'objet Server permet de coder la chaîne HTML de manière à ce que, quand elle est affichée dans le navigateur, ce dernier ne l'interprète pas comme des instructions de mise en forme du texte.

 
Paramètres
strHTMLString

La chaîne dont vous voulez coder le code HTML de manière à être affiché sur l'ordinateur client.

 
Exemple
<%

' The following code encodes these HTML tags so that they can 
' be displayed without interpretation on the client browser:
' <TABLE><TR><TD></TD></TR></TABLE>
Dim strOldHTML
Dim strNeutralCode

strOldHTML = "<TABLE><TR><TD>"
strNeutralCode = Server.HTMLEncode(strOldHTML)

' The variable strNeutralCode now holds the following code:
' &lt;TABLE&gt;&lt;TR&gt;&lt;TD&gt;
' but will be displayed on the client's machine as
' <TABLE><TR><TD>
' and the &lt;TABLE&gt;&lt;TR&gt;&lt;TD&gt; will be
' seen only if you view the source code on the client.
Response.Write strNeutralCode

%>
 
Remarques

La méthode HTMLEncode est une méthode simple et facile à utiliser. Elle permet d'afficher le code source de votre page HTML ou de faire la démonstration de l'emploi de diverses balises HTML sur une page Web. Elle est également très utile pour afficher le résultat d'une interrogation de base de données.

 
MapPath  
Server.MapPath (strPath)
 

La méthode MapPath permet de déterminer le chemin d'accès physique sur le serveur, à partir d'un chemin virtuel ou relatif.

 
Paramètres
strPath

Un chemin d'accès virtuel complet ou un chemin relatif à celui du répertoire de base du script actuel sur le serveur. Cette méthode détermine la manière dont la chaîne doit être interprétée, selon qu'elle commence par une barre oblique (/) ou une barre oblique inverse (\). Si le paramètre strPath débute par l'un de ces caractères, la chaîne est censée être un chemin d'accès virtuel entier. Dans le cas contraire, le chemin d'accès physique retourné est le chemin relatif au répertoire physique du script actuel sur le serveur Web.

 
Exemple
<%

' The following line of code determines the physical path
' of the current script for later use.
strSearchPath = _
   Server.MapPath("/searchscripts/start/searchstart.asp")

' This following code then uses the strSearchPath string to
' determine the file attributes for the current file for 
' display in the client-side HTML.
Set fs = Server.CreateObject("Scripting.FileSystemObject")
Set f = fs.GetFile(strSearchPath)
datFileLastModified = f.DateLastModified
%>
<HTML>
<HEAD><TITLE>MapPath Example</TITLE></HEAD>
<BODY>
The current script was last modified <%=datFileLastModified%>.
</BODY>
</HTML>
 
Remarques

Deux points importants doivent être pris en compte lors de l'emploi de la méthode MapPath. Tout d'abord, cette méthode ne prend pas en charge la notation de répertoire relatif standard de MS-DOS ("." et ".."). Par conséquent, la ligne de code suivante produira une erreur d'exécution :

strSearchPath = Server.MapPath("../start/searchstart.asp")

Ensuite, la méthode MapPath ne vérifie pas l'existence d'un répertoire physique particulier. Dès lors, elle peut être utile pour déterminer le chemin d'accès physique d'un nouveau fichier à créer par le serveur Web en réponse à une ligne de code de script.

Enfin, pour déterminer le chemin d'accès physique du fichier actuel, vous pouvez utiliser l'élément PATH_INFO de la collection ServerVariables de l'objet Request (pour plus d'informations, reportez-vous au chapitre 7). Par exemple, supposons que le script actuel soit searchstart.ASP et qu'il se trouve dans le répertoire virtuel /searchscripts/start/. La ligne de code suivante fixe la valeur de strSearchPath à D:\apps\searchscripts\start\searchstart.ASP :

strSearchPath = _
   Server.MapPath(Request.ServerVariables("PATH_INFO"))
 
Transférer  
Server.Transfer (strPath)
 

La méthode Transfer permet au développeur de rediriger l'exécution d'un script vers un script sans envoi d'une réponse HTTP au client. Toutes les informations du premier script, y compris les valeurs de Request et d'autres objets, sont totalement disponibles pour le second script. Contrairement à Server.Execute, Server.Transfer ne rend pas le contrôle au script qui a appelé la méthode Transfer lorsque l'exécution de la page ASP appelée est terminée. Cette méthode est une nouveauté de ASP 3.0/IIS 5.0.

 
Paramètres
strPath

Le chemin d'accès relatif ou absolu du second script vers lequel l'exécution sera redirigée.

 
Exemple
******** BEGIN Transfer Example: First Script ********

<%
' Transfer Example: First Script

' First Script calls Second Script, which uses Transfer
' to redirect execution to Third Script.
%>
<HTML>
<HEAD>
<TITLE>
Server.Transfer Example
</TITLE>
</HEAD>
<BODY>
<FORM ACTION="TransferExample_Process1.asp?qsvalue=hannah1" METHOD="post">
First Name: <INPUT TYPE="text" NAME="txtFName" VALUE="><BR>
Last Name: <INPUT TYPE="text" NAME="txtLName" VALUE="><BR>
Address: <INPUT TYPE="text" NAME="txtAddress" VALUE="><BR>
City: <INPUT TYPE="text" NAME="txtCity" VALUE=">&nbsp
State: <INPUT TYPE="text" NAME="txtState" VALUE="><BR>
Zipcode: <INPUT TYPE="text" NAME="txtZipcode" VALUE="><BR>
<INPUT TYPE="submit" VALUE="Submit">
</FORM>
</BODY>
</HTML>
******** END Transfer Example: First Script ********



******** BEGIN Transfer Example: Second Script ********
<%
Application("strExample1") = "ApplicationStringValue"
Session("strExample2") = "SessionStringValue"
Server.Transfer "TransferExample_Process2.asp"
Application("strExample1") = "NEWApplicationStringValue"
Session("strExample2") = "NEWSessionStringValue"
%>
******** END Transfer Example: Second Script ********



******** Begin Transfer Example: Third Script ********
<%
' Transfer Example: Third Page

' First Page calls Second Page, which uses Transfer
' to redirect execution to Third Page.
%>
<HTML>
<HEAD>
<TITLE>
Server.Transfer Example
</TITLE>
</HEAD>
<BODY>
<%
Response.Write "First Name: " & Request.Form("txtFName") & "<BR>"
Response.Write "Last Name: " & Request.Form("txtLName") & "<BR>"
Response.Write "Address: " & Request.Form("txtAddress") & "<BR>"
Response.Write "City: " & Request.Form("txtCity") & "<BR>"
Response.Write "State: " & Request.Form("txtState") & "<BR>"
Response.Write "Zipcode: " & Request.Form("txtZipcode") & "<BR><BR>"

Response.Write "Application Variable: " & Application("strExample1") & "<BR>"
Response.Write "Session Variable: " & Session("strExample2") & "<BR>"

%>

</BODY>
</HTML>
******** END Transfer Example: Third Script ********
 
Remarques

Si vous utilisez ce code, que vous créez les trois scripts et que vous les testez dans un navigateur, vous obtiendrez un résultat similaire à l'exemple suivant :

First Name: keyton
Last Name: weissinger
Address: 123 Main Street
City: Somewhereville
State: Alabama
Zipcode: 30087

Application Variable: ApplicationStringValue
Session Variable: SessionStringValue

Notez que les variables Application et Session ne sont pas mises à jour par le code dans le bloc après l'appel de la méthode Transfer.

Comme le montre l'exemple, lorsque vous appelez la méthode Transfer, toutes les informations disponibles pour le premier script à partir des objets ASP intégrés sont également accessibles au second. Notre toutefois que ce n'est pas le cas des variables de niveau script. Si vous déclarez et initialisez une variable dans le premier script, elle n'est pas disponible dans le second.

En outre, s'il existe des variables de niveau application ou session, le second script peut aussi y accéder, même s'il se situe dans un autre espace applicatif.

Il importe de noter deux points au sujet de la méthode Transfer. Toute d'abord, comme vous pouvez le prévoir, une erreur sera provoquée si vous tentez d'employer la méthode Transfer alors qu'une réponse a déjà été envoyée au client ; le cas échéant, veillez donc à fixer la propriété Buffer de l'objet Response à True pour éviter ce problème.

La seconde remarque importante au sujet de la méthode Transfer est qu'aucun script suivant l'appel de la méthode Transfer n'est exécuté. Dans l'exemple qui suit, la troisième et la quatrième lignes de code seront totalement ignorées :

Session("intMyVar") = 1
Server.Transfer "SomeOtherScript.asp"
Session("intMyVar") = 2
Session("intMyOtherVar") = 3

Au terme de l'exécution du bloc de code précédent, la variable de session, intMyVar, possèdera toujours la valeur 1, et la variable intMyOtherVar ne sera toujours pas définie, sauf si elle l'a été ailleurs avant l'exécution de ce bloc de code.

 
URLEncode  
Server.URLEncode (strURL)
 

Code une chaîne qui peut ensuite être envoyée via la ligne d'adresse en tant que chaîne de requête.

 
Paramètres
strURL

La valeur de chaîne à coder et envoyer via la ligne d'adresse en tant que chaîne de requête.

 
Exemple
<%

' The following encodes the URL 
' http://www.myserver.com/apps/search.asp
Dim strOldURL
Dim strNewURL

strOldURL = "http://www.myserver.com/apps/search.asp"
strNewURL = Server.URLEncode(strOldURL)

' This encoding results in the following string value being
' placed in the strNewURL variable:
' http%3A%2F%2Fwww%2Emyserver%2Ecom%2Fapps%2Fsearch%2Easp

' This new string value could be used in a query string to 
' represent a "next script," as demonstrated here:

%>
<HTML>
<HEAD><TITLE>URLEncode Example</TITLE></HEAD>
<BODY>
<FORM ACTION="/apps/CalcAndRedirect.asp?newURL=<%=strNewURL%>" METHOD = POST>
<INPUT TYPE = TEXT NAME = "First Value">
<INPUT TYPE = TEXT NAME = "Second Value">
<INPUT TYPE = SUBMIT NAME = "Calculate Results">
</FORM>
</BODY>
</HTML>
 
Remarques

Tout comme la méthode HTMLEncode, la méthode URLEncode est d'un emploi aisé. Il est essentiel d'utiliser la méthode URLEncode à chaque fois que vous devez envoyer des informations via la ligne d'adresse au lieu de les publier à l'aide de la méthode POST. Si vous ne codez pas vos informations mais que vous les placez dans la collection QueryString (à l'aide de la méthode GET), leur interprétation sera imprévisible et variera selon les données envoyées.

Si vous envoyez des informations dans la chaîne de requête (c.-à-d. d'un cadre visible vers un cadre visible), mais pas via la ligne d'adresse, ce codage est effectué pour vous.