[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5

3.) Einrichtung der Arbeitsumgebung 

Zunächst sollte der IIS (Internet Information Server bzw. der PWS (Personal Web Server) installiert werden. Diesen findet man für NT 4 im Option Pack, für Win2K ist er standardmäßig über Systemsteuerung – Software – Windows-Komponenten hinzuzufügen.

Nach der Installation können wir überprüfen, ob alles geklappt, indem wir im Browser an der Eingabezeile folgende Adresse eingeben :

http://localhost                  (localhost ist immer der eigene Rechner)

wenn dort etwas erscheint, hat alles funktioniert.

Physikalisch befindet sich die angezeigte Seite in folgendem Verzeichnis:

C:\InetPub\wwwroot  

Unseren Webserver werden wir in einem anderen Verzeichnis erstellen, und zwar dem Verzeichnis:

C:\InetPub\scripts

Wir legen uns für unser Projekt ein Unterverzeichnis mit Namen „Devcon“ an. In diesem Verzeichnis werden wir unsere Sourcen haben. ACHTUNG ! Es macht Sinn, die Sourcen in diesem Verzeichnis zu halten, denn der Webserver läuft nur von einem lokalen Laufwerk !

Zusätzlich benötigen wir direkt im Scripts-Verzeichnis eine Datei foxisapi.dll mit ihrer dazugehörigen INI-Datei.  

Die DLL bekommt den Namen des Projektes, also hier „Devcon.dll“ bzw. „Devcon.ini“.Wenn wir im Browser

http://localhost/scripts/devcon.dll/reset

eingeben, sollte ein dunkelgrüner Bildschirm mit Statusinfos erscheinen.

Die anderen unter 1.) erwähnten Softwareprodukte installiert man einfach nach Standard, hier sind keine besonderen Erfordernisse nötig.

4.) Ein Wort zu HTML-Kenntnissen...

Wer sich mit der Webserver-Programmierung beschäftigt, kommt um das Aneignen von Grundkenntnissen der Seitenbeschreibungssprache HTML nicht vorbei. Sicherlich kann man sich viel Arbeit beim Design ersparen, wenn man Tools wie MS Frontpage einsetzt, aber man muß für die Stellen, die später auf der HTML-Seite mit dynamischem Inhalt gefüllt werden sollen, meistens direkt im HTML-Code arbeiten !

5.) Grundsätzlicher Ablauf

Der Browser übermittelt seine Anfrage an den Web-Server (PWS bzw. IIS). Dieser ruft die „FoxIsApi.dll“ (hier:devcon.dll) auf, welche

  1. eine temporäre INI-Datei anlegt, in der etliche Informationen über den Surfer abgelegt werden (Benutzter Browser, gesetzte Cookies etc.)
  2. unser VFP-COM-Server aufruft, und zwar mit 3 Parametern : 
    1. Dem Namen der temporären INI-Datei, 
    2. den übergebenen Benutzer - Parametern als URL-Encoded String, 
    3. und einer per Referenz übergebenen Variablen. Durch setzten dieser Variablen auf den Wert 0 oder 1 kann man steuern, ob der Webserver nach Abarbeitung der Anfrage aus dem Speicher entfernt wird oder nicht.

      Unser VFP-Server wird in den allermeisten Fällen die übergebenen Benutzer- Parameter auf irgendeine Art und Weise verarbeiten, einen HTML-Code erstellen und diesen per RETURN zurückgeben. Der HTML-Code wird dann an den Webserver weitergereicht und über die Datenleitung an den Browser zurückgesendet.

6.) Parameterübergabe

Zunächst einmal müssen wir uns fragen, wie wir aus dem Browser heraus überhaupt unseren VFP-Webserver ansprechen können. Dazu muß man folgendes wissen: 

Unser Webserver befindet sich später in einer EXE-Datei, die einen bestimmten Namen hat (hier: devcon.exe). In unserem dazugehörigen Projekt DEVCON.PJT gibt es eine Klassenbibliothek mit einer als OLE-PUBLIC definierten Klasse (hier:devcon). Diese Klasse hat eine Methode namens Process, welche wir über den Webbrowser aufrufen wollen. Die Aufrufsyntax ergibt sich damit folgendermaßen:

http://localhost/scripts/dllname/exe.Klasse.Methode?Param1=wert1&Param2=Wert2 usw.

also hier:

http://localhost/scripts/devcon.dll/devcon.devcon.process?Method=Veranstaltungen~Showkalender&MonJahr=102000

Theoretisch könnte man für jede Funktionalität eine eigene Methode aufrufen. Wir gehen einen anderen Weg: Der Einsprungpunkt in unseren Webserver ist immer die Methode Process. Als einen Parameter METHOD übergeben wir den eigentlichen Methodenaufruf, und zwar Klasse~Methode. Der Vorteil dieses einheitlichen Einsprungpunktes liegt darin, das jedes Mal ablaufende Funktionalitäten einheitlich abgehandelt werden können. Danach wird dann die eigentliche Methode aufgerufen.

In unserem Beispiel oben rufen wir also aus der Klasse Veranstaltungen die Methode ShowKalender auf und übergeben den Parameter MonJahr mit dem Wert 102000

7.) URL-Encoded Strings

Der Parametersstring, der im Webbrowser angegeben wird, darf weder Leerzeichen noch Sonderzeichen enthalten. Aus diesem Grund muß er URL-Encodiert sein. D.h. :

  • Alle Leerzeichen werden durch ein „+“ ersetzt
  • Alle Sonderzeichen werden durch „%“ und dann das ASCII-Äquivalent des Zeichens als HEX-Wert ersetzt

    z.B: Name=Torsten Weggen aus dem hannöverschen Nordenmuß ersetzt werden durch

    Name=Torsten+Weggen+aus+dem+hann%F6verschen+Norden

8.) Webserver – Basisklassenbibliothek

Die Basisklassenbibiothek, auf der wir aufsetzen, besteht aus der Applikationsklasse ismain sowie einigen weiteren Hilfsklassen.

ISMain: 

Die Klasse ismain enthält die Grundfunktionalitäten:

Eigenschaft Bedeutung
Capp Name der Applikation (Pfad in Registry :HKEY_LOCAL_MACHINE/Software/cDistributor/cApp/cVersion)
Cdistributor Name der Programmierer-Firma / Hersteller (siehe cApp)
Cversion Versionsnummer des Webservers (siehe cApp)
CdataPath Pfad, an dem die Tabellen stehen (wird aus der Registry geladen)
CtemplatePath Pfad, in dem die HTML-Templates liegen (wird aus der Registry geladen)
CisApiPath Aufruf der Process-Methode ohne Domain-Info (wird aus der Registry geladen)
z.B: “/scripts/devcon.dll/devcon.devcon.Process”
ClibPath Pfad, an dem weitere Lib-Dateien (zB: Dynazip) zu finden sind (wird aus der Registry geladen)
AformVar Array, welches die übergebenen Parameter enthält (aFormVars[n,1]=Position, aFormVars[n,2]=Name und aFormVars[n,3]=Wert)

und folgende Methoden:

Methode Bedeutung
Earlylog Methode zur Ausgabe von Status- und Fehlermeldungen in der Datei „earlylog.log“
makeFormVars Füllt das Array aFormVars mit den Name/Wert-Paaren, die als Parameter übergeben wurden
getFormVar(tcName) Gibt den Wert des Parameters „tcName“zurück
getPrivIniStr Funktion zum Auslesen einer INI-datei
urldecode Funktion zum dekodieren eines URL-Encoded Strings (siehe 7.)
Process Einsprungmethode des Webservers 

KiReg:

Die Hilfsklasse kireg enthält Hilfsfunktionen zum Schreiben und lesen der Registry
Methode Bedeutung
readPrivRegStr Methode zum Auslesen der Registry
(HKEY_LOCAL_MACHINE/Software/cDistributor/cApp/cVersion)
writePrivRegStr Methode zum Schreiben von Werten in die Registry
(HKEY_LOCAL_MACHINE/Software/cDistributor/cApp/cVersion)

ServerVars:

Die Hilfsklasse ServerVars wird in der Process-Methode initialisiert. Sie liest die übergebene temporäre INI-Datei aus und legt die dort stehenden Werte in Eigenschaften ab. Diese können dann in eigenen Methoden mit oWebApp.oServerVars.Eigenschaft abgefragt werden.

Eigenschaft Beispiel 
RequestMethod GET
Querystring method=Veranstaltungen~showkalender&monjahr=102000
Logicalpath /devcon.devcon.process
Physicalpath c:\Inetpub\scripts\Devcon\devcon.devcon.process
Requestprotocol HTTP/1.1
Referer /scripts/devcon.dll
Serversoftware Microsoft-IIS/4.0
Servername 212.86.132.98
Serverport 80
Remotehost 149.225.28.178
Remoteadress 149.225.28.178
http_accept image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
http_accept_language de
http_connection Keep-Alive
http_referer http://www.dfpug.de
http_useragent Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)
http_host 212.86.132.98
http_cookie myfirstcookie=1234567; mysecondcookie=7654321
Gmtoffset 3600

Methoden Beschreibung
getVars Füllt die oben angegebenen Eigenschaften mit den Werten aus der temp. INI-Datei

[ 1 ] [ 2 ] [ 3 ] [ 4 ] [ 5