Im Allgemeinen ist es am einfachsten, eine Prozedur zu schreiben, die die an einen bestimmten Dienst gesendeten Anforderungen verarbeitet. Normalerweise müsste eine solche Prozedur eine Webseite zurückgeben. Optional kann Ihre Prozedur Argumente akzeptieren, die als Teil des URLs übergeben wurden, um ihre Ausgabe individuell anzupassen.
Das folgende Beispiel ist aber viel einfacher. Es zeigt, wie einfach ein Dienst sein kann. Dieser Webdienst gibt einfach den Satz "Hello world!" zurück.
CREATE SERVICE hello TYPE 'RAW' AUTHORIZATION OFF USER DBA AS SELECT 'Hello world!'; |
Starten Sie einen Datenbankserver mit der Option -xs, um die Verarbeitung von Webanforderungen zu aktivieren, und fordern
Sie dann den URL http://localhost/hello mit einem Webbrowser an. Die Wörter "Hello world!" erscheinen auf einer sonst leeren Seite.
Die oben stehende Seite wird in Ihrem Browser im Standardtext angezeigt. Dies liegt daran, dass der Standard-HTTP Content-Type "text/plain" ist. Um eine normalere Webseite zu erstellen, die in HTML formatiert ist, müssen Sie zwei Aktionen vornehmen:
Setzen Sie den HTTP Content-Type-Header auf text/html, damit der Browser HTML erwartet.
Fügen Sie HTML-Tags in die Ausgabe ein.
Sie können Tags auf zwei Arten in die Ausgabe schreiben. Eine Möglichkeit ist, die Phrase TYPE 'HTML' in der Anweisung CREATE SERVICE zu verwenden. Damit wird der SQL Anywhere-Datenbankserver angewiesen, HTML-Tags für Sie einzusetzen. Das funktioniert gut, wenn Sie beispielsweise eine Tabelle zurückgeben.
Die andere Möglichkeit ist, TYPE 'RAW' zu benutzen und alle Meldungstags selbst einzugeben. Diese zweite Methode bietet die größte Kontrolle über das Format der Ausgabe. Beachten Sie, dass durch die Angabe von "TYPE RAW" nicht automatisch festgelegt wird, dass die Ausgabe nicht in HTML oder XML erfolgt. Damit wird nur SQL Anywhere angewiesen, dass der Rückgabewert direkt an den Client geschickt werden kann, ohne dass Tags hinzugefügt werden müssen.
Die nachstehende Prozedur generiert eine etwas ansprechendere Version von "Hello world". Der Einfachheit halber wird der Hauptteil in der folgenden Prozedur dargestellt, die die Webseite formatiert.
Die integrierte Prozedur sa_set_http_header wird benutzt, um den HTTP Header-Typ zu definieren, damit die Browser das Ergebnis richtig interpretieren. Wenn Sie diese Anweisung auslassen, zeigt Ihr Browser alle HTML-Codes an, anstatt sie zu benutzen, um das Dokument zu formatieren.
CREATE PROCEDURE hello_pretty_world () RESULT (html_doc XML) BEGIN CALL dbo.sa_set_http_header( 'Content-Type', 'text/html' ); SELECT HTML_DECODE( XMLCONCAT( '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', XMLELEMENT('HTML', XMLELEMENT('HEAD', XMLELEMENT('TITLE', 'Hello Pretty World') ), XMLELEMENT('BODY', XMLELEMENT('H1', 'Hello Pretty World!'), XMLELEMENT('P', '(If you see the tags in your browser, check that ' || 'the Content-Type header is set to text/html.)' ) ) ) ) ); END |
Die folgende Anweisung erstellt einen Dienst, der diese Prozedur benutzt. Die Anweisung ruft die obige Prozedur auf, die die Webseite "Hello Pretty World" erstellt.
CREATE SERVICE hello_pretty_world TYPE 'RAW' AUTHORIZATION OFF USER DBA AS CALL hello_pretty_world(); |
Nachdem Sie die Prozedur und den Dienst erstellt haben, können Sie auf die Webseite zugreifen. Achten Sie darauf, dass Sie
den Datenbankserver mit den richtigen -xs-Optionswerten starten, und öffnen Sie dann den URL http://localhost/hello_pretty_world in einem Webbrowser.
Sie sehen die Ergebnisse in einer einfachen HTML-Seite mit dem Titel "Hello Pretty World". Sie können die Webseite so attraktiv wie gewünscht gestalten, indem Sie mehr Inhalt einfügen, mehr Tags verwenden, Stylesheets benutzen oder Skripten einbauen, die im Browser ablaufen. In allen Fällen können Sie die erforderlichen Dienste erstellen, um die Anforderungen des Browsers zu verarbeiten.
Weitere Hinweise zu integrierten gespeicherten Prozeduren finden Sie unter Alphabetische Liste der Systemprozeduren.
Wenn in einer URL kein Dienstname enthalten ist, sucht SQL Anywhere nach einem Webdienst namens root. Die Rolle der Rootseiten entspricht der Rolle von index.html-Seiten in statischen Webservern.
Root-Dienste sind für die Erstellung von Homepages gut geeignet, da sie URL-Anforderungen verarbeiten, die nur die Adresse
Ihrer Website enthalten. Sie sind auch für die Behandlung von URL-Pfaden nützlich, die nicht existieren. Beispielsweise implementiert
die folgende Prozedur mit dem von ihr gestalteten Dienst eine einfache Webseite, die angezeigt wird, wenn Sie den URL http://localhost aufrufen. Sie handhabt auch den Fall, wenn Sie zu einer Seite navigieren, die nicht existiert.
CREATE PROCEDURE HomePage( IN url LONG VARCHAR ) RESULT (html_doc XML) BEGIN CALL dbo.sa_set_http_header( 'Content-Type', 'text/html' ); IF url IS NULL THEN SELECT HTML_DECODE( XMLCONCAT( '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', XMLELEMENT('HTML', XMLELEMENT('HEAD', XMLELEMENT('TITLE', 'My Home Page') ), XMLELEMENT('BODY', XMLELEMENT('H1', 'My home on the web'), XMLELEMENT('P', 'Thank you for visiting my web site!' ) ) ) ) ) ELSE CALL dbo.sa_set_http_header('Status','404'); SELECT '<H1>Status 404 - Document ' || url || ' not found</H1>' END IF END |
Nun erstellen Sie einen Dienst, der diese Prozedur verwendet:
CREATE SERVICE root TYPE 'RAW' AUTHORIZATION OFF SECURE OFF URL PATH ON USER DBA AS CALL HomePage(:url); |
Sie können auf diese Webseite zugreifen, indem Sie den URL http://localhost aufrufen, sofern Sie nicht festlegen, dass Datenbanknamen beim Starten des Datenbankservers obligatorisch sind. Weitere Hinweise
finden Sie unter Datenbankserver für Webanforderungen starten. Indem Sie URL PATH ON angeben, stellen Sie sicher, dass nicht-existente URL-Pfade an diesen Dienst geleitet werden.
Ausführlichere Beispiele befinden sich im Verzeichnis Beispielverzeichnis\SQLAnywhere\HTTP.
Kommentieren Sie diese Seite in DocCommentXchange. Senden Sie uns Feedback über diese Seite via E-Mail. |
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |