Server-Side Includes |
Ähnlich den Vorverarbeitungsdirektiven ermöglichen Server-Side Includes den Einschluss verschiedener Werte (beispielsweise das Datum der letzten Änderung einer Datei) oder einer vollständigen Datei in Ihr Skript. Im Folgenden sind von IIS unterstützte Server-Side Include-Direktiven aufgeführt: #config Konfiguriert das Format von Fehlermeldungen, Datumsangaben und Dateigrößen bei der Rückgabe an den Client-Browser. #echo Fügt den Wert einer Umgebungsvariablen (Äquivalent zu den verschiedenen Elementen der Kollektion ServerVariables des Objekts Request) in eine HTML-Seite des Client ein. #exec Fügt die Ergebnisse eines Befehlszeilen-Shell-Befehls oder einer Shell-Anwendung ein. #flastmod Fügt das Datum/die Uhrzeit der letzten Änderung für die aktuelle Seite ein. #fsize Fügt die Dateigröße der aktuellen Datei ein. #include Schließt die Inhalte einer anderen Datei in die aktuelle Datei ein. Alle Direktiven sind in HTML zugelassen. Ausschließlich die Direktive #include ist jedoch sowohl in HTML- als auch ASP-Seiten zugelassen. Nur die Direktive #include wird hier detailliert erläutert.

Server-Side Includes: Anmerkungen/Fehlerbehebung |
Das Einschließen von Dateien ist eine hervorragende Methode zum Schreiben von wieder verwendbarem Code. Diese Methode wird häufig für Code verwendet, der in fast jedem Skript eingesetzt wird: z. B. der Aufbau einer Verbindung zu einer Datenbank oder die Trennung der Verbindung, wenn der Code diese nicht länger benötigt. Ihre Server-Side Include-Dateien brauchen keine bestimmte Dateierweiterung, Microsoft empfiehlt jedoch die Erweiterung .INC, damit Sie den Überblick über Ihre Sätze von ASP-Skripts und Include-Dateien für Ihre Projekte behalten. Beachten Sie, dass Ihre Server-Side Include-Dateien keine zyklischen Includes ausführen können (da ein Satz Dateien nicht sich selbst einschließen kann). Darüber hinaus können sie keine Vorverarbeitungsdirektiven enthalten, die weiter oben in diesem Kapitel beschrieben wurden.

#include |
    <!-- #include PathType = "strFileName" -->
    <!-- #include PathType = "strFileName" -->
Über das Server-Side Include #include können Sie die Inhalte einer bestimmten Datei in den HTML-Inhalt oder das ASP-Skript einfügen. Sie müssen die Server-Side Include-Anweisung #include in einen HMTL-Kommentar einschließen. Andernfalls wird der Text des Server-Side Includes als reiner Text angezeigt.
Parameter
PathType Der Typ des im Parameter strFileName angegebenen Pfades. Die möglichen Werte für PathType sind in der folgenden Liste beschrieben:
Werte für PathType | Beschreibung
File | Behandelt den Wert des Parameters strFileName als relativen Pfad des aktuellen Verzeichnisses.
Virtual | Behandelt den Wert des Parameters strFileName als vollständigen virtuellen Pfad.
strFileName Der Parameter strFileName repräsentiert den Namen der Datei, deren Inhalte in den HTML-Inhalt eingefügt werden sollen. Seit IIS 5.0 gibt es noch einen zweiten Weg, eine Datei einzuschließen: Sie können das <SCRIPT>-Tag kombiniert mit dem Attribut SRC in folgendem Format verwenden:
    <SCRIPT LANGUAGE = "VBScript" RUNAT=SERVER SRC="strFileName">
    </SCRIPT>
In dem oben angegebenen Code entspricht der Parameter strFileName dem, der mit der Direktive INCLUDE verwendet wurde. Er kann für einen absoluten oder relativen Pfad stehen.
Beispiel 1
Das folgende Skript enthält nur eine einfache Codezeile ("zum Anfang der Seite zurückgehen") und eine horizontale Zeile mit einer Grafik.
    <!--ReturnTop.INC -->
    <CENTER>
    <HR>
    Click <A HREF = #top>here</A> to go back to the top of the page.<BR>
    <IMG SRC = "/Images/CorpLogo.GIF"></CENTER><BR>
Diese Datei könnte überall dort eingefügt werden, wo zum Seitenanfang zurückgegangen werden soll:
    <HTML>
    <HEAD><TITLE>Include Example</TITLE></HEAD>
    <BODY>
    <%
    [CODE TO RETRIEVE GLOSSARY TERMS FROM SQL SERVER DATABASE]
    ' Filter the recordset to include only the A's.
    adoRecGlossary.Filter = "UPPER(SUBSTRING(GlossTerm, 1)) = 'A'"

    ' Iterate through the items in the filtered recordset.
    Do While Not adoRecGlossary.EOF
    %>
        Term: <%=adoRecGlossary("GlossTerm")%><BR>
        Definition: <%=adoRecGlossary("GlossDef")%><BR>
    <%
        adoRecGlossary.MoveNext
    Loop

    ' Next include the link to top file:
    %>
    <!-- #include virtual = "/Includes/ReturnTop.INC" -->

    <%
    ' Repeat for the next letter...
    . . . [additional code]
    %>
    </BODY>
    </HTML>
Beispiel 2
Das folgende Skript enthält ASP-Code, der über das <SCRIPT>-Tag zusammen mit der Methode SRC in eine Datei eingefügt werden soll:
    ' ReturnTop2.INC
    Response.Write "<CENTER>"
    Response.Write "<HR>"
    Response.Write "Click <A HREF = #top>here</A> to go back to the top of the page.<BR>"
    Response.Write "<IMG SRC = "/Images/CorpLogo.GIF"></CENTER><BR>"
Diese Datei könnte überall dort eingefügt werden, wo zum Seitenanfang zurückgegangen werden soll:
    <HTML>
    <HEAD>
    <TITLE>Include Example 2</TITLE>
    </HEAD>
    This page will now include a file...<BR>
    <SCRIPT LANGUAGE="VBScript" RUNAT="SERVER" SRC="ReturnTop2.INC">
    </SCRIPT>
    .
    .
    .
Hinweise
Durch Einsatz der Direktive INCLUDE können Sie Dateien, die HTML- oder ASP-Code bzw. eine Kombination der beiden enthalten, einschließen. Wenn Sie die Methode SCRIPT-Tag zum Einschluss einer Datei verwenden (siehe auch Beispiel oben), darf die einzuschließende Datei ausschließlich ASP-Code enthalten. Die Beispiele verdeutlichen, wie der Einsatz von Include-Dateien die Menge an redundantem Arbeitsaufwand verringern kann. Die gegebenen Beispiele sind jedoch sehr einfach. Nehmen wir als weiteres Beispiel an, dass Sie eine Include-Datei haben, die die DSN Ihrer Datenbank, den Benutzernamen und das Kennwort enthält. Diese Include-Datei könnten Sie auf der gesamten Website verwenden. Das Ändern von Benutzername und Kennwort wäre dann einfach auszuführen: Sie müssten diese lediglich in der Include-Datei ändern. Wenn Sie das Server-Side Include #include verwenden, um die Inhalte einer ASP zu integrieren, müssen Sie die Trennzeichen <%...%> um Skripttext verwenden. Andernfalls wird der Inhalt der Datei als regulärer HTML-Code angesehen. Ein Verwendungszweck dieses Server-Side Includes ist die Lokalisierung der Teile Ihres Skripts, die häufig verwendet werden, z. B. Informationen zum Zugang zur Datenbank. Auf diese Weise können Sie zudem Benutzernamen und Kennwörter schnell und effizient ändern. Wenn Sie sich dazu entschließen, das Server-Side Include #include zu diesem Zweck zu verwenden, müssen Sie darauf achten, dass die eingeschlossenen Dateien ausreichend gesichert sind. Sie können Dateien in Dateien einschließen, die wiederum in andere Dateien eingeschlossen sind. Sie können auch die Inhalte einer bestimmten Datei mehrmals in einem Skript einschließen. Ein Beispiel dafür ist ein einfaches Skript zur Fehlerhandhabung wie die folgende Datei:
    <%
    If Err.Number <> 0 Then
    %>
    <HTML>
    <HEAD><TITLE>Error Notice</TITLE></HEAD>
    <BODY>
    There has been an error in your script (<%=Request.
    ServerVariables("SCRIPT_NAME")%>.<BR>
    Please contact customer service at 1-800-555-HELP and tell
    them that you've experienced an error in (<%=Request.
    ServerVariables("SCRIPT_NAME")%> and that the parameters sent to the
    script were the following:<BR>
    (<%=Request.ServerVariables("QUERY_STRING")%>.<BR><BR>
    We apologize for the inconvenience.
    </BODY>
    </HTML>
    <%
    End If
    %>
Diese Datei (mit Namen ERROR.INC) könnte nun an beliebiger Stelle in Ihr Skript eingefügt werden, wo Ihrer Meinung nach ein Fehler auftreten könnte. Im folgenden Code wurde ERROR.INC beispielsweise nach dem Aufbau der ADO-Verbindung und nach der Erstellung des Datensatzgruppenobjekts eingefügt. (Dabei ist zu beachten, dass die Eigenschaft Buffer des Objekts Response auf True gesetzt sein muss, damit diese Art der Fehlererkennung funktioniert):
    <%Response.Buffer = True%>
    <HTML>
    <HEAD><TITLE>Database Info Page</TITLE></HEAD>
    <BODY>
    <%
    Set adoCon = Server.CreateObject("ADODB.Connection")
    AdoCon.Open "MyDatabase"
    %>
    <!-- #include virtual = "/Accessory/ERROR.INC" -->
    <%
    Set adoRec = adoCon.Execute ("SELECT * FROM TopSales")
    %>
    <!-- #include virtual = "/Accessory/ERROR.INC" -->
    <%
    . . . [additional code]
    %>
    </BODY>
In diesem Skript ist festgelegt, dass der Benutzer den Inhalt der Datei ERROR.INC sieht, wenn ein Fehler beim Aufbau der Datenbankverbindung oder der Erstellung der Datensatzgruppe auftritt. Im Beispiel wird eine Standardfehlermeldung und eine Helpline-Telefonnummer angezeigt. Wenn Sie eine Datei einschließen, ist darauf zu achten, dass diese nicht die aktuelle Datei enthält. Dies würde zu einem Fehler auf dem Webserver führen, der den Dienst anhält. Das bedeutet, dass Sie Ihre Arbeit unterbrechen und den Webdienst neu starten müssen. Beachten Sie auch, dass Server-Side Includes vor dem Skriptcode verarbeitet werden. Aus diesem Grund können Sie nicht dynamisch entscheiden, welche Datei eingeschlossen werden soll. Das folgende Skript führt beispielsweise zu einem Laufzeitfehler.
    <%
    Dim strFileName
    strFileName = "/Apps/CustomConstants.INC"
    %>
    <!-- #include file="<%=strFileName%>"-->
Abschließend müssen Server-Side Includes außerhalb der Skript-Trennzeichen (<%...%>), <SCRIPT></SCRIPT>-Tags und <OBJECT></OBJECT>-Tags platziert werden. Der folgende Code führt beispielsweise zu einem Laufzeitfehler (das schließende Trennzeichen %> fehlt):
    <%
    Dim strLastName
    strLastName = "Weissinger"

    <!-- #include file="/Apps/CustomConstants.INC"-->
Dieser Code schlägt ebenfalls fehl:
    <SCRIPT LANGUAGE="VBScript">
    Sub btnHello_Click( )
       Dim strLastName
        strLastName = "Weissinger"

        <!-- #include file="/Apps/CustomConstants.INC"-->

    End Sub
    </SCRIPT>
Dies ist das einzige Server-Side Include, das Sie sowohl in HTML- als auch ASP-Dateien verwenden können. Wenn Sie das Server-Side Include #include in einer Datei einsetzen, muss die Erweiterung dieser Datei eine der zu SSINC.DLL - der dynamischen Bibliothek, die die Server-Side Includes interpretiert - zugeordneten Dateierweiterungen sein.