Einzelnen Beitrag anzeigen

mjustin

Registriert seit: 14. Apr 2008
3.010 Beiträge
 
Delphi 2009 Professional
 
#1

dwf - Web Framework für Delphi

  Alt 19. Jan 2012, 16:41
Einen eigenen lokalen HTTP Webserver in Delphi zu erstellen, ist mit dem dwf Web Framework für Delphi eine Sache weniger Zeilen Quelltext.
Delphi-Quellcode:
program ExampleWebServer;

...

begin

  // Anwendungskontext festlegen (gilt für alle nachfolgenden Path Anweisungen)
  &Context('myapp');

  // URL-Pfad unterhalb des Kontexts festlegen
  &Path('helloworld');

  // Der Code für das Erzeugen einer Antwort auf eintreffende HTTP GET Anfagen
  GET
    (procedure(Request: TRequest; Response: TResponse)
    begin
      Response.ContentText :=
        '<html><title>Hello world</title>Hello world!</html>';
    end);

  // Server starten
  StartServer;

  // Ende
  WriteLn('Die Test-URL ist: http://127.0.0.1/myapp/helloworld');
  ReadLn;

end.
Und ein Beispiel für HTTP POST, mit einem Formular:

Delphi-Quellcode:
program ExampleWebServer;

...

begin

  // HTML FORM example --------------------------------------------------
  &Path('form');
  // The Delphi method will process HTTP GET requests -------------------
  GET
   (procedure(Request: TRequest; Response: TResponse)
    begin
      Response.ContentText := '<html><form method="POST" action="form">'
        +'<input name="var" value="hello world"><input type="submit"></form></html>';
    end);

  &Path('form');
  // The Delphi method will process HTTP POST requests -------------------
  POST
   (procedure(Request: TRequest; Response: TResponse)
    begin
      Response.ContentText := 'var=' + Request.Params.Values['var'];
    end);

  StartServer;
  // wait ---------------------------------------------------------------
  WriteLn('Server is running. Hit any key to terminate.');
  ReadLn;

end.
"Pfad-Parameter" können auch über Platzhalter definiert werden, und stehen im Handler dann als normale Requestparamter zur Verfügung:

Delphi-Quellcode:
program ExampleWebServer;

...

begin

  &Path('params/{p1}/{p2}');
  &Produces('text/html');
  GET
    (procedure(Request: TRequest; Response: TResponse)
    begin
      Response.ContentText :=
        Format('<html><title>Hello world</title>Hello world! ... %s %s</html>',
        [Request.Params.Values['p1'], Request.Params.Values['p2']]);
    end);

  StartServer;

  WriteLn('Server is running. Hit any key to terminate.');
  ReadLn;

end.

Last but not least - ein Beispiel mit HTTP Server Sessions:

Delphi-Quellcode:
program Example3Sessions;

...

begin

  // The Delphi method will process HTTP GET requests -------------------
  &Path('counter');
  GET
   (procedure(Request: TRequest; Response: TResponse)
    var
      NextCounter: string;
    begin
      NextCounter := IntToStr(1 + StrToIntDef(Request.Session.Content.Values['Counter'], 0));
      Request.Session.Content.Values['Counter'] := NextCounter;
      Response.ContentText := 'Counter: ' + NextCounter;
    end);

  StartServer;
  // wait ---------------------------------------------------------------
  WriteLn('Server is running. Hit any key to terminate.');
  ReadLn;

end.
Update:

Das dwf Framework wurde inzwischen in die Habari Web Components Library (Version 1.0.1) integriert, in Form der TdjRestfulComponent.

Ein englischsprachiger Blogartikel ist hier im Web:

http://mikejustin.wordpress.com/dwf/
Miniaturansicht angehängter Grafiken
dwf.png   dwfdemo.png   process.png   processes.png  
Michael Justin
habarisoft.com

Geändert von mjustin (22. Apr 2012 um 07:54 Uhr)
  Mit Zitat antworten Zitat