Server-Objekt |
Das Objekt Server bietet verschiedene Funktionen, mit denen Sie in Active Server Page-Anwendungen arbeiten können. Auch wenn die meisten dieser Methoden eher für fortgeschrittene Benutzer bestimmt sind und selten verwendet werden, sind die drei Methoden CreateObject, Execute und Transfer sowie die einzige Eigenschaft des Server-Objekts, ScriptTimeout, sehr nützlich. Sie werden diese Funktionen in vielen Skripten einsetzen. Wie der Name bereits andeutet, repräsentiert das Objekt Server den Webserver selbst. Ein Großteil der Funktionalität, die dieser bereitstellt, sind ganz einfach Funktionen, die der Webserver selbst im Zuge der normalen Verarbeitung von Client-Anforderungen und Serverantworten verwendet.

Anmerkungen/Fehlerbehebung |
Der Einsatz der Eigenschaft und der Methoden des Server-Objekts sind unkompliziert. Wenn Sie die Funktionen des Objekts Server unter Verwendung der korrekten Syntax einsetzen, erhalten Sie das erwartete Resultat. Treten Fehler auf, so deuten diese im Allgemeinen auf ein Problem mit der Konfiguration oder Installation von IIS hin.

ScriptTimeout |
Server.ScriptTimeout [ = lngNumSeconds]
Legt die maximale Zeit fest, für die der Webserver die Verarbeitung eines Skripts fortsetzt. Wenn Sie für diese Eigenschaft keinen Wert setzen, wird der Standardwert von 90 Sekunden angenommen.
Parameter
lngNumSeconds Die Anzahl Sekunden, für die der Webserver die Verarbeitung eines Skripts fortsetzen soll, bevor eine Zeitüberschreitung auftritt und ein ASP-Fehler an den Client gesendet wird.
Beispiel
    <%

    ' 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

    %>
Hinweise
Der für den Wert der Eigenschaft ScriptTimeout gesetzte Zahlenwert muss größer oder gleich dem der Eigenschaft AspScriptTimeout in der IIS-Metabase sein. Andernfalls wird die Einstellung ignoriert. Die Standardeinstellung von AspScriptTimeout in der IIS-Metabase beträgt 90 Sekunden. Wenn Sie diesen Wert über die Eigenschaft ScriptTimeout auf 10 Sekunden verringern möchten, die Einstellung in der Metabase jedoch nicht ändern, tritt die Zeitüberschreitung des Skripts weiterhin nach 90 Sekunden auf. Sie sollten die Verringerung des Wertes der Eigenschaft AspScriptTimeout in der IIS-Metabase durchaus in Betracht ziehen: 90 Sekunden ist eine lange Wartezeit für die Verarbeitung einer Webanforderung. Wahrscheinlich ist der Benutzer innerhalb dieser eineinhalb Minuten Wartezeit bereits eingeschlafen... Wenn für eine Anwendung eine höhere Einstellung für die Zeitüberschreitung notwendig ist, sollten Sie eine Zwischenmeldung im Stil von "Bitte warten . . ." einblenden, deren OnLoad-Ereignis abwechselnd das längere Skript und die ASP-Seite aufruft. Auf diese Weise ist der Benutzer auf eine etwas längere Wartezeit vorbereitet. Dieser Ansatz wird im folgenden Code verfolgt. Angenommen, Sie müssen das Skript InfoSearch.ASP aufrufen. Sie wissen, dass für dieses Skript nur ein Parameter, strSrchItem, festgelegt werden kann und dass die Ausführung bis zu zwei Minuten dauern kann. Anstatt nun InfoSearch.ASP sofort aufzurufen, könnten Sie erst folgende Seite aufrufen:
    <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>
Wenn dieses Skript geladen wird, wird die Seite mit dem langen Skript aufgerufen und der ursprüngliche Abfrage-String gesendet. (Dieser wird aus der Kollektion ServerVariables des Request-Objekts abgerufen; weitere Informationen hierzu finden Sie in Kapitel 7). So erhält der Benutzer umgehendes Feedback, und er braucht nicht vor einem leeren Bildschirm zu sitzen und darauf zu warten, dass das Skript abgeschlossen wird.

CreateObject |
Set objMyObject = Server.CreateObject(strProgId)
Instanziiert ein Objekt auf dem Server. Sobald es instanziiert ist, können die Eigenschaften und Methoden dieses Objekts so verwendet werden, wie Eigenschaften und Methoden der in ASP integrierten Objekte. Die DLLs, von denen diese Objekte instanziiert werden, müssen auf dem Webserver unabhängig von Ihrer IIS-Installation installiert und registriert werden.
Parameter
  objMyObject Der Name einer Variablen, die einen Verweis auf das Objekt enthält, das instanziiert wird. strProgId Die Programm-ID für die Klasse, von der Sie ein Objekt instanziieren möchten. Der Parameter strProgId hat folgendes Format:
      [LibraryName.]Component[.Version]
  Dieser Wert befindet sich in der Registrierung und repräsentiert, wie die DLL der Komponente dort registriert ist. Dieser Wert kann den DLL-Namen enthalten. Die DLL, von der Sie das Objekt Ad Rotator instanziieren, ist adrot.dll. Die zugehörige Programm-ID ist jedoch MSWC.AdRotator.1, wie durch den Standardwert des folgenden Registrierungsschlüssels definiert ist:
      HKEY_CLASSES_ROOT\CLSID\{1621F7C0-60AC-11CF-9427-444553540000}\ProgID
Sie sehen, dass dies die Programm-ID der registrierten DLL ist und zusätzlich zu ihrem registrierten Namen Versionsinformationen enthält. In einigen Fällen haben Sie möglicherweise mehrere verschiedene Versionen der gleichen DLL auf einem Computer registriert. Dann können Sie den Standardwert des Registrierungsschlüssels VersionIndependentProgID für die Instanziierung der neuesten Version der DLL verwenden. Im Beispiel oben (bezüglich AdRotator) ist MSWC.AdRotator die versionsunabhängige Programm-ID.
Beispiel
    <%

    ' 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")

    %>
Hinweise
Wenn ein Client-Browser ein ASP-Skript anfordert, das Objekte enthält, instanziiert ASP die Objekte (wodurch ihre Standardkonstruktorfunktionen ausgelöst werden, falls solche existieren) und ruft dann sofort - vor der Verarbeitung des Skripts - die Methode OnStartPage jedes Objekts auf der Seite auf, für das eine Ereignisprozedur OnStartPage definiert ist. Über die Methode OnStartPage können die Objekte mit Hilfe des Objekts ObjectContext die Zeiger zu den integrierten ASP-Objekten abrufen. Detaillierte Hintergrundinformationen zum Objekt ObjectContext und den OnStartPage-Methoden der Serverkomponenten würden den Rahmen dieser Dokumentation sprengen. Weitere Informationen zu diesen Themen finden Sie in Shelley Powers Buch, Developing ASP Components, veröffentlicht von O'Reilly & Associates. Bei der Verwendung der Methode CreateObject wird ein serverseitiges Objekt mit seitenweiter Gültigkeit erstellt, es sei denn, CreateObject wird in den Ereignissen Application_ OnStart bzw. Session_OnStart aufgerufen. In diesem Fall wird das Objekt entsprechend mit anwendungs- bzw. sitzungsweiter Gültigkeit instanziiert. Objekte mit seitenbezogener Gültigkeit werden am Ende der Seite zerstört, und die von ihnen belegte Speicherkapazität wird freigegeben. Um ein Objekt mit anwendungsweiter Gültigkeit zu erstellen, müssen Sie die Methode CreateObject im Ereignis Application_OnStart aufrufen (siehe auch Kapitel 4) oder das <OBJECT>-Tag in der Datei GLOBAL.ASA verwenden und den Parameter SCOPE auf "Application" setzen. (Weitere Informationen zu der Datei GLOBAL.ASA finden Sie in Kapitel 11.) Um entsprechend ein Objekt mit sitzungsweiter Gültigkeit zu erstellen, müssen Sie die Methode CreateObject im Ereignis Session_OnStart aufrufen (siehe auch Kapitel 10) oder das <OBJECT>-Tag in der Datei GLOBAL.ASA verwenden und den Parameter SCOPE auf "Application" setzen. Darüber hinaus können Sie eine Session-Variable verwenden, um das Objekt mittels CreateObject instanziiert zu halten (siehe folgendes Beispiel):
    Set Session("objMyAdRot") = _
        Server.CreateObject("MSWC.AdRotator")
Objekte mit anwendungsweiter Gültigkeit werden erst zerstört, wenn das Ereignis Application_OnEnd ausgelöst wird. Sitzungsweit gültige Objekte werden entsprechend am Ende einer Benutzersitzung zerstört bzw. wenn die Methode Abandon des Session-Objekts aufgerufen wird; siehe auch Kapitel 10 für weitere Informationen. Ein instanziiertes Objekt kann zerstört werden, indem sein Wert auf das Schlüsselwort Nothing gesetzt wird (siehe folgenden Beispielcode):
    Set objMyAdRot = Nothing
Oder Sie ersetzen einfach den Wert der Objektvariablen, um die Speicherkapazität freizugeben, die für das ursprüngliche Objekt verwendet wird.
    Set objMyAdRot = strSomeOtherValue
CreateObject kann nicht zur Erstellung einer Instanz eines integrierten Objekts verwendet werden. Der folgende Code erzeugt beispielsweise einen Laufzeitfehler.
    Set objMySession = Server.CreateObject("Session") ' WRONG

Execute |
Server.Execute (strPath)
Über die Methode Execute können Sie ein in ein anderes ASP-Skript eingebettetes ASP-Skript aufrufen und ausführen. Nach der Ausführung des aufgerufenen Skripts wird zu der ASP-Seite zurückgekehrt, die den Aufruf der Methode Server.Execute ausgegeben hat. Mit Hilfe der Methode Execute können Sie komplexe Anwendungen in modulare, wieder verwendbare Komponenten unterteilen, die bei Bedarf aufgerufen werden. Die Execute-Methode ist neu in ASP 3.0/IIS 5.0.
Parameter
strPath Der absolute oder relative Pfad des auszuführenden ASP-Skripts. Ausschließlich Skripts innerhalb des Anwendungsbereichs der aktuellen Anwendung können mittels dieser Methode ausgeführt werden.
Beispiel
In diesem Beispiel wird das zweite Skript, das einen Werbetext anzeigt, nur vom ersten Skript über die Methode Execute aufgerufen, wenn der aktuelle Benutzer nicht Mitglied des Clubs "No Ad" (keine Werbung) ist.
    **** 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 ********
Hinweise
Mit der Methode Execute erhalten ASP-Entwickler eine hervorragende Gelegenheit zur Unterteilung ihrer Anwendungen in überschaubare, wieder verwendbare Codekomponenten, die nur bei Bedarf aufgerufen werden. Bisher mussten ASP-Entwickler die Ausführung einer Seite entweder auf eine andere Seite umleiten (ein Vorgehen, das die Ausführungsgeschwindigkeit beeinträchtigt, da es das Senden eines Headers an den Browser erfordert, der dann die Anforderung des Browsers umleitet) oder mittels der Vorverarbeitungsdirektive #INCLUDE eine andere Datei einschließen. Beide Möglichkeiten erwiesen sich als nicht sehr nützlich. Wie bereits erwähnt, ruft die Methode Redirect des Server-Objekts (siehe weiter unten in diesem Kapitel) eine weitere Runde Server-an-Clientserver-Aufrufen für eine langsam ladende Seite auf. Die Direktive #INCLUDE zwingt den ASP-ISAPI-Filter, die Included-Datei aus dem Dateisystem aufzurufen, in das aktuelle Skript einzufügen und den gesamten Included-Code zu interpretieren - auch wenn dieser nicht vom einschließenden Skript verwendet wird. Die Methode Execute hingegen lässt die Programmausführung anderer Skripts nur dann zu, wenn die Logik im aufrufenden Skript dies erfordert. Die Methode Execute lässt also den dynamischen Einschluss von Skripts zu. Dabei ist zu beachten, dass Skripts, die über die Methode Execute aufgerufen werden, genau wie andere Skripts in die Antwort eingeschlossene HTTP-Header hinzufügen oder ändern können. Wenn ein aufgerufenes Skript HTTP-Header nach dem Senden der Antwort hinzufügt oder ändert, wird wie bei eigenständigen Skripts ein Fehler erzeugt. Wie zu erwarten ist die Variablengültigkeit für jedes Skript (aufrufendes und aufgerufenes Skript) eindeutig. In dem folgenden Code gibt es beispielsweise in beiden Skripts eine Variable namens strName.
    CALLING SCRIPT
    <%
    Dim strName
    strName = "Sam"
    Server.Execute("CalledScript.asp")
    %>

    CalledScript.asp
    <%
    Dim strName
    Response.Write strName
    %>
Im vorstehenden Beispiel ist strName in beiden Skripts deklariert. Die Variable wird jedoch im zweiten Skript nicht initialisiert. In diesem Beispiel würde Response.Write dazu führen, dass nichts in die Antwort geschrieben wird, da der Wert für strName in dem aufgerufenen Skript nicht definiert ist. Wenn eine ASP-Seite Server.Execute aufruft, um zu einer anderen ASP-Seite zu verzweigen, werden alle in die erste ASP-Seite integrierten Objekte an das aufgerufene Skript weitergeleitet. Alle Werte in der Kollektion Form des Request-Objekts sind beispielsweise für die ASP-Seite verfügbar, die durch Aufruf der Methode Execute des Server-Objekts gestartet wurde. Entsprechend der Microsoft-Dokumentation lässt die Methode Execute zu, einen QueryString-Parameter an das Ende der aufgerufenen URL anzufügen. Zur Zeit der Fertigstellung dieses Zusatzes zu dieser Dokumentation (März 2000) erzeugt das Hinzufügen eines QueryStrings zu einer URL jedoch einen Fehler. Entsprechend dem Microsoft Technical Support ist dies ein bekannter Fehler in IIS 5.0, und es wird gerade an einer Lösung gearbeitet. Wenn Sie ein Skript über die Methode Execute aus einem Skript aufrufen, das als Transaktionsskript festgelegt ist, und das aufgerufene Skript dazu führt, dass die Transaktion abgebrochen wird, wird zuerst das Ereignis OnTransactionAbort auf der aufgerufenen Seite aufgerufen. Erst nach Abschluss der Ausführung des aufgerufenen Skripts wird das Ereignis OnTransactionAbort auf der aufrufenden Seite ausgeführt. Angenommen, das folgende Skript CallingScript.ASP ruft das Skript CalledScript.ASP auf.
    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
Tritt im Skript CalledScript.ASP ein Fehler auf, der die Transaktion abbricht, wird zuerst der Ereigniscode OnTransactionAbort für CalledScript.ASP und anschließend der Ereigniscode OnTransactionAbort für CallingScript.ASP ausgeführt.

GetLastError |
Set objASPErr = Server.GetLastError ()
Die Methode GetLastError des Server-Objekts ermöglicht die Anzeige von Informationen zu Fehlern in einem Skript. Die Methode GetLastError gibt ein einziges Objekt, ASPError, zurück (siehe Kapitel 5). Sie können das zurückgegebene ASPError-Objekt einsetzen, um Fehlerinformationen anzuzeigen oder darauf programmatisch zu reagieren. Die GetLastError-Methode ist neu in ASP 3.0/IIS 5.0.
Parameter
objASPErr Der Name des Objekts ASPError, der von der Methode GetLastError zurückgegeben wird.
Beispiel
    <%
    ' 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
      .
      .
      .
Hinweise
In diesem Codebeispiel (abgeleitet von dem Standardskript 500-100.ASP in IIS 5.0) beginnt das Skript mit der Instanziierung eines ASPError-Objekts anhand der Methode GetLastError. Anschließend werden Informationen zum letzten Fehler angezeigt, wofür die Eigenschaften des ASPError-Objekts verwendet werden. Weitere Informationen zu den Eigenschaften des ASPError-Objekts finden Sie in Kapitel 5. Es ist zu beachten, dass sie die Methode GetLastError nicht in dem Skript verwenden können, in dem der Fehler auftritt. Beispielsweise wirkt der folgende Code nicht wie erwartet:
    <%
    On Error Resume Next
    Session("MyVar"3333) = "keyton"
    Set objError = Server.GetLastError( )
    Response.Write objError.ASPCode
    %>
Es wäre zu erwarten, dass Sie mittels der Methode GetLastError später im Skript auf Fehler reagieren können, da Sie die Anweisung On Error Resume Next verwendet haben. Dies ist jedoch nicht der Fall. IIS 5.0 reagiert umgehend auf Fehler und leitet den Client über die Methode Server.Transfer im Hintergrund auf eine Seite zur Fehlerhandhabung um. Standardmäßig wird hierfür die Fehlerhandhabungsseite /iisHelp/Common/500-100.ASP verwendet. Auf dieser Seite können Sie die Fehlerhandhabung mittels der Methode GetLastError anpassen. Weitere Informationen zur Fehlerhandhabungsseite 500-100.ASP und zur Fehlerhandhabung in Skripts finden Sie in Kapitel 5. Die Methode GetLastError kann für Vorverarbeitungsfehler, Skriptkompilierungs- und Laufzeitfehler angewendet werden. Die Methode GetLastError gibt Fehlerinformationen nur dann erfolgreich zurück, wenn kein Inhalt an den Client gesendet wurde. Wurde bereits Inhalt an den Client gesendet, führt die Methode GetLastError selbst zu einem Fehler. Wenn Sie mit Skripts arbeiten, in denen Sie wahrscheinlich verschiedene Fehler handhaben müssen, sollten Sie aus diesem Grund die Eigenschaft Buffer des Response-Objekts auf True setzen (siehe Kapitel 8):
    Response.Buffer = True
Weitere Informationen zu der Methode GetLastError des ASPError-Objekts finden Sie in Kapitel 5.

HTMLEncode |
Server.HTMLEncode (strHTMLString)
Falls es erforderlich ist, den aktuellen HTML-Code einer HTML-Seite oder eines ASP-Skript anzuzeigen, müssen Sie die Methode HTMLEncode des Server-Objekts einsetzen. Über die Methode HTMLEncode des Server-Objekts kann der HTML-String so kodiert werden, dass der Browser den HTML-String bei der Anzeige nicht einfach als Anweisung für das Textlayout interpretiert.
Parameter
strHTMLString Der String, dessen HTML-Code für die Anzeige auf dem Clientcomputer kodiert werden soll.
Beispiel
    <%

    ' 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

    %>
Hinweise
Die Methode HTMLEncode ist einfach einzusetzen. Anhand dieser Methode ist es möglich, den Quellcode Ihrer HTML-Seite anzuzeigen oder die Verwendung verschiedener HTML-Tags auf einer Webseite zu demonstrieren. Sie erweist sich auch für die Anzeige der Ausgabe von Datenbankabfragen sehr nützlich.

MapPath |
Server.MapPath (strPath)
Mittels der Methode MapPath können Sie den physischen Pfad des Servers auf der Grundlage eines virtuellen oder relativen Pfades bestimmen.
Parameter
strPath Ein vollständiger virtueller Pfad oder ein Pfad, der relativ zum Pfad des aktuellen Stammverzeichnis Ihres Skripts auf dem Server ist. Die Methode legt fest, wie der String interpretiert werden soll. Dies ist davon abhängig, ob er mit einem Schrägstrich (/) oder umgekehrten Schrägstrich (\) beginnt. Wenn der Parameter strPath mit einem dieser Zeichen beginnt, wird der String als vollständiger virtueller Pfad angesehen. Andernfalls ist der zurückgegebene physische Pfad der Pfad, der relativ zu dem physischen Verzeichnis das aktuellen Skripts auf dem Server ist.
Beispiel
    <%

    ' 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>
Hinweise
Beim Einsatz der Methode MapPath sind zwei wichtige Faktoren zu berücksichtigen. Erstens unterstützt sie nicht die Standardschreibweise für relative Verzeichnisse in MS-DOS ("." and ".."). Aus diesem Grund führt die folgende Codezeile zu einem Laufzeitfehler.
    strSearchPath = Server.MapPath("../start/searchstart.asp")
Zweitens überprüft die Methode MapPath nicht, ob ein gegebenes physisches Verzeichnis auch tatsächlich existiert. Daher ist die Methode nützlich für die Bestimmung des physischen Pfades einer vom Webserver neu zu erstellenden Datei als Antwort auf eine Skriptcodezeile. Zur Bestimmung des physischen Pfades der aktuellen Datei können Sie schließlich auch das Element PATH_INFO der Kollektion ServerVariables des Request-Objekts einsetzen (weitere Informationen hierzu finden Sie in Kapitel 7). Angenommen, das aktuelle Skript ist searchstart.ASP und befindet sich im virtuellen Verzeichnis /searchscripts/start/. Die folgende Codezeile würde den Wert von strSearchPath auf D:\apps\searchscripts\start\searchstart.ASP setzen:
    strSearchPath = _
       Server.MapPath(Request.ServerVariables("PATH_INFO"))

Transfer |
Server.Transfer (strPath)
Über die Methode Transfer kann der Entwickler die Ausführung von einem Skript auf ein anderes umleiten, ohne dass eine HTTP-Antwort an den Client gesendet wird. Alle Informationen aus dem ersten Skript, auch die Werte im Request-Objekt und anderen Objekten, sind dem zweiten Skript vollständig verfügbar. Im Gegensatz zu Server.Execute, gibt Server.Transfer die Kontrolle nach Abschluss der Ausführung der aufgerufenen ASP-Seite nicht an das Skript zurück, das die Methode Transfer aufgerufen hat. Die Methode ist neu in ASP 3.0/IIS 5.0.
Parameter
strPath Der relative oder absolute Pfad des zweiten Skripts, an das die Ausführung umgeleitet wird.
Beispiel
    ******** 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 ********
Hinweise
Wenn Sie diesen Code verwenden, die drei Skripte erstellen und in einem Browser testen, erhalten Sie als Endergebnis etwas dem Folgenden Vergleichbares:
    First Name: keyton
    Last Name: weissinger
    Address: 123 Main Street
    City: Somewhereville
    State: Alabama
    Zipcode: 30087

    Application Variable: ApplicationStringValue
    Session Variable: SessionStringValue
Beachten Sie, dass die Variablen Application und Session nicht durch den Code im Abschnitt nach dem Aufruf der Transfer-Methode aktualisiert werden. Wie im Beispiel gezeigt stehen alle Informationen, die dem ersten Skript durch die integrierten ASP-Objekte verfügbar sind, nach Aufruf der Methode Transfer auch dem zweiten Skript zur Verfügung. Dies trifft jedoch nicht für skriptbezogene Variablen zu. Wenn Sie eine Variable im ersten Skript deklarieren und initialisieren, ist diese im zweiten Skript nicht verfügbar. Das zweite Skript hat jedoch Zugriff auf Variablen mit anwendungs- bzw. sitzungsweiter Gültigkeit im ersten Skript - auch wenn das zweite Skript sich in einem anderen Anwendungsbereich befindet. Zwei Dinge sollten Sie sich bezüglich der Transfer-Methode merken: Erstens: Wie zu erwarten wird ein Fehler ausgelöst, wenn Sie versuchen, die Transfer-Methode zu verwenden, nachdem bereits eine Antwort an den Client gesendet wurde. Setzen Sie daher die Eigenschaft Buffer des Response-Objekts auf True, um dieses Problem ggf. zu vermeiden. Zweitens: Nach dem Aufruf der Transfer-Methode wird kein weiteres Skript ausgeführt. Im folgenden Beispiel wird die dritte und vierte Codezeile beispielsweise vollständig ignoriert:
    Session("intMyVar") = 1
    Server.Transfer "SomeOtherScript.asp"
    Session("intMyVar") = 2
    Session("intMyOtherVar") = 3
Nach der Ausführung des vorherigen Codeabschnitts weist die Session-Variable intMyVar weiterhin den Wert "1" auf, und die Variable intMyOtherVar ist auch weiterhin nicht definiert, wenn sie nicht an anderer Stelle vor der Ausführung dieses Codeabschnitts definiert ist.

URLEncode |
Server.URLEncode (strURL)
Kodiert einen String, der anschließend als Abfrage-String über die Adresszeile gesendet werden kann.
Parameter
strURL Der String, den Sie zum Senden über die Adresszeile als Abfrage-String kodieren möchten.
Beispiel
    <%

    ' 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>
Hinweise
Die Methode URLEncode ist, genau wie die Methode HTMLEncode, einfach einzusetzen. Die Methode URLEncode muss unbedingt immer dann verwendet werden, wenn Sie gezwungen sind, Informationen über die Adresszeile zu senden, anstatt diese über die POST-Methode zu senden. Wenn Sie die Informationen nicht kodieren und (über die GET-Methode) in die Kollektion QueryString einfügen, ist ihre Interpretation - abhängig von den gesendeten Daten - nicht vorhersehbar. Wenn Sie die Informationen hingegen in einem Abfrage-String (d. h. von sichtbarem Frame zu sichtbarem Frame) und nicht über die Adresszeile senden, wird diese Kodierung für Sie übernommen.