Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » SQL Anywhere Server - Programmierung » SQL Anywhere Datenzugriff-APIs » SQL Anywhere-Webdienste

 

Prozeduren verwenden, die HTML-Dokumente liefern

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 [external link] http://localhost/hello mit einem Webbrowser an. Die Wörter "Hello world!" erscheinen auf einer sonst leeren Seite.

HTML-Seiten

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 [external link] 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.

Root-Dienste

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 [external link] 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 [external link] 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.

Beispiele

Ausführlichere Beispiele befinden sich im Verzeichnis Beispielverzeichnis\SQLAnywhere\HTTP.