ASP-Vorlesungsreihe (12) Senden von Inhalten an den Browser
Autor:Eve Cole
Aktualisierungszeit:2009-05-30 19:59:00
Bei der Verarbeitung von ASP-Skripten werden alle Texte oder Grafiken, die nicht in ASP-Trennzeichen oder <SCRIPT>-Tags enthalten sind, einfach an den Browser zurückgegeben. Mithilfe des Response-Objekts können Inhalte explizit an den Browser gesendet werden.
Senden von Inhalten Um Inhalte innerhalb eines ASP-Trennzeichens oder einer ASP-Prozedur an den Browser zu senden, können Sie die Write-Methode des Response-Objekts verwenden. Die folgende Anweisung kann beispielsweise eine unterschiedliche Begrüßung senden, je nachdem, ob der Benutzer diese Seite besucht hat:
<%
Wenn FirstTime = True, dann
Response.Write „<H3 ALIGN=CENTER>Willkommen auf der Übersichtsseite</H3>“
Anders
Response.Write „<H3 ALIGN=CENTER>Willkommen zurück zur Übersichtsseite</H3>“
Ende wenn
%>
Außerhalb des Verfahrens müssen Sie Response.Write nicht verwenden, um Inhalte an den Benutzer zurückzusenden. Inhalte, die sich nicht innerhalb eines Skripttrennzeichens befinden, werden direkt an den Browser gesendet, der sie formatiert und anzeigt. Der folgende Skriptprozess hat beispielsweise die gleiche Ausgabe wie das obige Skript:
<H3 ALIGN=CENTER>
<% Wenn FirstTime Then %>
Willkommen auf der Übersichtsseite.
<%Else%>
Willkommen zurück auf der Übersichtsseite.
<% End If %>
</H3>
Verwenden Sie gemischte Skriptbefehle und HTML, wenn Sie die Ausgabe nur einmal zurückgeben müssen oder wenn es sinnvoll ist, Anweisungen zu vorhandenem HTML-Text hinzuzufügen. Verwenden Sie Response.Write, wenn Sie eine Anweisung nicht durch Trennzeichen trennen möchten oder wenn Sie eine Zeichenfolge erstellen möchten, die an den Browser zurückgegeben wird. Sie können beispielsweise eine Textzeichenfolge erstellen, um eine Tabellenzeile mit den von einer HTML-Tabelle zurückgegebenen Werten zu erstellen:
Response.Write "<TR><TD>" & Request.Form("FirstName") _
& "</TD><TD>" & Request.Form("LastName") & "</TD></TR>"
Festlegen des Inhaltstyps Wenn der Webserver die Datei an den Browser zurückgibt, teilt er dem Browser auch den Typ des in der Datei enthaltenen Inhalts mit. Dadurch kann der Browser entscheiden, ob er die Datei selbst anzeigen kann oder eine andere Anwendung aufrufen muss. Wenn der Netzwerkserver beispielsweise eine Microsoft Excel-Tabelle zurückgibt, muss der Browser eine Kopie von Microsoft Excel aufrufen, um die Seite anzuzeigen. Webserver identifizieren Dateitypen, indem sie die Dateierweiterung einer MIME-Typtabelle zuordnen.
Sie können die ContentType-Eigenschaft des Response-Objekts verwenden, um die HTTP-Inhaltstypzeichenfolge für an den Benutzer gesendete Inhalte festzulegen. Der folgende Befehl legt beispielsweise den Inhaltstyp für eine Kanaldefinition fest:
<% Response.ContentType = "application/x-cdf" %>
Weitere Informationen zu Kanälen finden Sie unter „Erstellen dynamischer Kanäle“ in diesem Thema.
Weitere gängige Inhaltstypen sind Text/Plain (zur Rückgabe als Textinhalt statt interpretierter HTML-Anweisungen), Text/Gif (für GIF-Bilder) und Video/Quicktime (für Filme im Apple QuickTime®-Format). Es wurde ein Standardsatz von MIME-Typen definiert, der entweder von einem Webserver oder einem Webbrowser unterstützt wird. Um zu sehen, welche Inhaltstypen Ihr Microsoft-Webserver unterstützt, öffnen Sie mit dem Internetdienste-Manager die Eigenschaftenseite Ihrer Website, klicken Sie auf die Registerkarte „HTTP-Header“ und dann auf die Registerkarte „Dateitypen“.
Den Browser umleiten Verwenden Sie die Redirect-Methode, um den Browser zu einer anderen URL umzuleiten, anstatt den Inhalt an den Benutzer zu senden. Wenn Sie beispielsweise bestätigen möchten, dass Benutzer Ihre Anwendung von der Startseite aus eingegeben haben, damit sie eine Kunden-ID erhalten können, können Sie überprüfen, ob sie über eine Kunden-ID-Nummer verfügen. Andernfalls können Sie sie zur Startseite weiterleiten.
<%
Wenn Session("CustomerID") = 0, dann
Response.Redirect „homepage.asp“
Ende wenn
%>
Sofern der Puffer nicht bereits geöffnet ist, müssen Sie den Browser umleiten, bevor Inhalte oder Header an den Browser zurückgegeben werden. Durch Platzieren der Response.Redirect-Anweisung oben auf der Seite und vor dem <HTML>-Tag wird sichergestellt, dass kein Inhalt an den Browser zurückgegeben wird. Wenn Sie Response.Redirect verwenden, nachdem Sie Inhalte oder Header an den Browser zurückgegeben haben, wird eine Fehlermeldung angezeigt.
Wenn Sie Response.Redirect in der Mitte der Seite verwenden, verwenden Sie es mit der Response.Buffer-Eigenschaft, wie im folgenden Abschnitt erläutert.
Gepufferter Inhalt Standardmäßig gibt der Webserver bei der Verarbeitung von ASP-Seiten HTML- und Skriptverarbeitungsergebnisse zurück. Sie können jedoch die Buffer-Eigenschaft des Response-Objekts so festlegen, dass alle Serverskriptbefehle auf der Seite verarbeitet werden, bevor etwas an den Benutzer gesendet wird.
Sie können Puffertechniken verwenden, um einen Punkt im Seitenverarbeitungsprozess zu bestimmen, an dem Sie vor diesem Punkt keinen Inhalt an den Benutzer senden möchten. Sie können auch die Redirect-Methode des Response-Objekts verwenden, um den Benutzer auf eine andere Seite umzuleiten, oder die Clear-Methode des Response-Objekts verwenden, um den Puffer zu leeren und anderen Inhalt an den Benutzer zu senden. Das folgende Beispiel verwendet beide Methoden.
<%
'Aktivieren Sie die Pufferung. Diese Anweisung muss vor dem <HTML>-Tag stehen.
Response.Buffer = True %>
<html>
<Körper>
.
.
.
<%
Wenn Request("FName") = "" Dann
Antwort.Klar
Response.Redirect „/samples/test.html“
Anders
Response.Write Request("FName")
Ende wenn
%>
</body>
</html>
Sie können Response.Buffer auch verwenden, um zu verhindern, dass der Webserver die HTTP-Header zurückgibt, bevor das Skript sie ändert. Einige Eigenschaften und Methoden wie Response.Expires und Response.Redirect ändern HTTP-Header.
Wenn die Buffer-Eigenschaft in einem Skript festgelegt ist und die Flush-Methode nicht aufgerufen wird, verwaltet der Server vom Benutzer ausgegebene Keep-Alive-Anforderungen. Die Entwicklung dieser Skriptgewohnheit kann zur Verbesserung der Serverleistung beitragen, da der Server nicht für jede Benutzeranforderung eine neue Verbindung erstellen muss (vorausgesetzt, dass der Server, der Benutzer und alle Proxyserver Keep-Alive-Anforderungen unterstützen). Ein potenzieller Nachteil dieses Ansatzes besteht jedoch darin, dass der Puffer dem Benutzer erst dann eine Antwort anzeigt, wenn er alle Skripts in der aktuellen ASP-Datei verarbeitet hat. Bei längeren und komplexeren Skripten kann es sein, dass Benutzer lange warten müssen, bevor sie diese Seite sehen.
Standardmäßig ist die Pufferung für ASP-Anwendungen deaktiviert. Sie können Internet Services Manager verwenden, um Puffer für die gesamte ASP-Anwendung zu aktivieren.
Ermöglicht Proxyservern das Zwischenspeichern von Seiten. Über den Proxyserver können Anwendungen Seiten an Benutzer senden. Ein Proxyserver fordert im Namen des Browsers des Benutzers Webseiten von einer Website an. Proxyserver speichern HTML-Seiten zwischen, sodass wiederholte Anfragen für dieselbe Seite schnell und effizient an den Browser zurückgegeben werden können. Proxyserver führen Anfragen durch, speichern Webseiten im Cache und entlasten das Netzwerk und die Webserver.
Obwohl Caching für HTML-Seiten gut funktioniert, funktioniert es nicht gut für ASP-Seiten, die dynamisch generierte Informationen enthalten. Beispielsweise erfordern Berichte über die Börsenlage oder Inventarlisten mit großen Geschäftsvolumina sofortige Informationen. Die Informationen von vor einer Stunde sind derzeit sehr ungenau. Wenn die Anwendung persönliche Informationen zurückgibt, beispielsweise eine angepasste Homepage, wird davon ausgegangen, dass der Benutzer die persönlichen Informationen eines anderen Benutzers nicht sehen kann.
Standardmäßig kann der ASP Command Proxy-Server selbst keine ASP-Seiten zwischenspeichern (obwohl er Bilder, Bitmaps, kleine Anwendungen und andere Referenzen auf zwischengespeicherten Seiten zwischenspeichert). Sie können die Response.CacheControl-Eigenschaft verwenden, um das HTTP-Headerfeld „Cache Control“ so festzulegen, dass das Caching einer bestimmten Seite zugelassen wird. Der Standardwert von Response.CacheControl ist die Zeichenfolge „Private“, die verhindert, dass Proxyserver diese Seite zwischenspeichern. Um das Caching zu ermöglichen, setzen Sie das Headerfeld für die Cache-Steuerung auf „Öffentlich“:
<% Response.CacheControl = "Public" %>
Da die HTTP-Header an den Browser oder Proxyserver gesendet werden müssen, bevor Seiteninhalte gesendet werden, können Sie die Response.CacheControl-Eigenschaft festlegen oder einen Response.Buffer verwenden, um die Seite vor allen HTML-Tags zwischenzuspeichern.
Das Headerfeld „Cache Control“ ist Teil der HTTP 1.1-Spezifikation. ASP-Seiten können nicht auf Proxyservern zwischengespeichert werden, die nur HTTP 1.0 unterstützen, da keine abgelaufenen Header-Felder gesendet werden.
Verhindern Sie, dass Browser Seiten zwischenspeichern. Jede Browserversion hat ihre eigenen Spezifikationen dafür, ob Seiten zwischengespeichert werden. Um zu verhindern, dass der Browser ASP-Seiten zwischenspeichert, verwenden Sie Response.Expires, um den Ablaufheader festzulegen:
<% Response.Expires = 0 %>
Ein Wert von 0 erzwingt, dass zwischengespeicherte Seiten ablaufen. Da die HTTP-Header vor dem Senden einer Seite an den Browser gesendet werden müssen, kann die Seite zwischengespeichert werden, indem das Response.Expires-Attribut vor dem HTML-Tag platziert oder ein Response.Buffer verwendet wird.
Erstellen Sie dynamische Kanäle
Internet Explorer 4.0 verfügt über eine neue Funktion, mit der Webplaner Webseiten mit gemeinsamen Themen in einem Kanal kombinieren können. Im Browser wird der Kanal in der Titelleiste des Kanals angezeigt; Benutzer gelangen auf den Kanal, indem sie auf das Symbol klicken. Kanäle werden automatisch im Hintergrund aktualisiert; Benutzer müssen die Website nicht besuchen, um die neuesten Seiten in ihrem Browser herunterzuladen. Kanäle bieten Benutzern einen schnellen und direkten Weg zum Durchsuchen einer Reihe verwandter Webseiten, und diese Webseiten werden automatisch aktualisiert.
Mit ASP können Sie Skripte schreiben, um die Präferenzen des Benutzers zu erfassen und dann dynamisch Kanäle zu erstellen. Eine Kanaldefinitionsdatei (.cdf) legt die Organisation und Reihenfolge des Kanalinhalts fest. Befehle in .cdf-Dateien verwenden dieselbe Syntax wie HTML-Markup, wodurch sie einfacher zu verstehen und aus Skripten zu generieren sind. Beim Schreiben eines ASP-Skripts zum Erstellen einer Kanaldefinitionsdatei verwendet das Skript die Erweiterung .cdx. Wenn ASP eine Datei mit der Erweiterung .cdx liest, wird automatisch der Inhaltstyp application/x-cdf gesendet, der den Browser anweist, die Kanaldefinition zur Interpretation der Bytes zu verwenden. Wenn Sie nicht .cdx als Erweiterung verwenden, muss das Skript den Inhaltstyp mithilfe von Response.ContentType manuell auf application/x-cdf festlegen.
Hier ist ein Beispiel für die Verwendung von Kanälen. Das folgende HTML-Formular fordert den Benutzer auf, einen Kanal auszuwählen. Beim Absenden ruft das Formular ein Skript in der CDX-Datei auf, um die Kanaldefinition zu erstellen.
<P> Wählen Sie die gewünschten Kanäle aus </P>
<FORM METHOD="POST" ACTION="chan.cdx">
<P><INPUT TYPE=CHECKBOX NAME=Filme> Filme
<P><INPUT TYPE=CHECKBOX NAME=Sports> Sport
<P><INPUT TYPE="SUBMIT" VALUE="SUBMIT">
</FORM>
Das Skript in Chan.cdx erstellt eine Kanaldefinition basierend auf den Werten der mit der Anfrage übermittelten Tabelle.
<% If Request.Form("Movies") <> "" Then %>
<KANAL>
Kanaldefinitionsanweisungen für die Filmseiten
</CHANNEL>
<% End If %>
<% If Request.Form("Sports") <> "" Then %>
<KANAL>
Kanaldefinitionsanweisungen für die Sportseiten
</CHANNEL>
<% End If %>
Senden von Dateien an einen Server Ein Browser kann die Posting Acceptor-Anwendung verwenden, um Dateien an einen Webserver zu senden. Wenn der Posting Acceptor Dateien hochlädt, sendet er URL-codierte Formularfelder, in denen der Name und der Speicherort jeder empfangenen Datei aufgeführt sind. Die Postverarbeitungs-URL kann einem Skript hinzugefügt werden, das die Datei hochlädt, um das ASP-Skript aufzurufen, um diese Feldnamen zu verarbeiten. Sie können beispielsweise ein Skript schreiben, das automatisch eine E-Mail mit dem Namen und dem Speicherort der Datei an den Systemadministrator sendet.