AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Tutorials Delphi Eine einfache CGI-Anwendung (WinCGI.DLL)

Eine einfache CGI-Anwendung (WinCGI.DLL)

Ein Tutorial von sakura · begonnen am 8. Jul 2002
Antwort Antwort
Benutzerbild von sakura
sakura
Registriert seit: 10. Jun 2002
HI DP-ler,

dieses Mal zeige ich Euch, wie man auf einfachste Art und Weise eine einfache CGI-Web Anwendung erstellt.

Hinweis:Dieses Beispiel wurde mit Delphi 5 Enterprise erstellt. Nicht alle Delphi Versionen unterstützen die hier genutzten Features.

Schritt 1: Eine neue Anwendung

Zum Anfang erstellen wir ein neues Projekt. Anstatt einer normalen Anwendung, erstellen wir eine Web Server Anwendung. Im folgenden Dialog entscheiden wir uns für eine WinCGI-DLL.

http://www.gatenetwork.com/delphi-sa...ectproject.gif

http://www.gatenetwork.com/delphi-sa...ectapptype.gif

Delphi hat uns zwei Dateien vorbereitet
  1. Unsere Projektdatei (speichern als: CGIDemo.dpr)
  2. Unser Webmodul (speichern als: uMainWeb.pas)

Schritt 2: ...und Actions

Als nächstes wollen wir zwei Funktionen für unsere CGI Anwendung festlegen. Eine zur Begrüßung, welche es dem Besucher unserer Webseite ermöglicht, die andere zu starten. Die zweite Funktion ermöglicht dem Nutzer das durchstöbern der Festplatte des Servers. (Bitte nicht auf einen Live-Server installieren, der Admin könnte Euch das übel nehmen )

Dazu wählt einfach zweimal die Funktion Add item (Ich habe nur die engl. Delphi Version.) Das erste Item habe ich wbaDefault, das zweite wbaSurfDisk genannt. Zusätzlich kommt noch eine TPageProducer Komponente in das Webmodul.


http://www.gatenetwork.com/delphi-sa...03_additem.gif

http://www.gatenetwork.com/delphi-sa...geproducer.gif

Schritt 3: Setup

Jetzt müssen wir nur noch die Einstellungen für die beiden Actioneinträge setzen.

http://www.gatenetwork.com/delphi-sa...setdefault.gif

http://www.gatenetwork.com/delphi-sa...etsurfdisk.gif

Für die TPageProducer Komponente pgpDefault müssen wir noch die Eigenschaft Strings setzen
Code:
<html>
  <head>
    <title>Jetzt gehts los!</title>
    <meta name="generator" content="<#generator>">
  </head>
  <body>
    <h1>Jetzt gehts los</h1>
    [url="/cgi-bin/CGIDemo.dll/surfdisk?path=C:\"]Surf HD C:\[/url]


   


   


    It is <#now>.
  </body>
</html>
Schritt 4: The meat

In den Eventhandler der zweiten Actionkomponenten (wbaSurfDisk) muss auch noch ein wenig Code und dann haben wir schon das Gesamtergebniss
Delphi-Quellcode:
unit uMainWeb;

interface

uses
  Windows, Messages, SysUtils, Classes, HTTPApp;

type
  TwbmHelloWorld = class(TWebModule)
    pgpDefault: TPageProducer;
    procedure pgpDefaultHTMLTag(
      Sender: TObject; Tag: TTag; const TagString: String; TagParams: TStrings;
      var ReplaceText: String
    );
    procedure wbmHelloWorldwbaSurfDiskAction(
      Sender: TObject; Request: TWebRequest; Response: TWebResponse;
      var Handled: Boolean
    );
  private
    { Private declarations }
    function ParentLink(URL, Path: String): String;
    function GetFolders(URL, Path: String): String;
    function GetFiles(URL, Path: String): String;
  public
    { Public declarations }
  end;

var
  wbmHelloWorld: TwbmHelloWorld;

implementation

uses
  FileCtrl;

{$R *.DFM}

function TwbmHelloWorld.GetFiles(URL, Path: String): String;
var
  SR: TSearchRec;
begin
  if FindFirst(Path + '\*', faAnyFile and not faDirectory, SR) = 0 then
  try
    Result := '<h1>Files</h1><pre>';
    repeat
      Result := Result + SR.Name + #13#10;
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
    Result := Result + '</pre>';
  end else
    Result := '';
end;

function TwbmHelloWorld.GetFolders(URL, Path: String): String;
var
  SR: TSearchRec;
begin
  if FindFirst(Path + '\*', faDirectory, SR) = 0 then
  try
    Result := '<h1>Sub Folders</h1><pre>';
    repeat
      if (SR.Name <> '.') and (SR.Name <> '..') then
        if SR.Attr and faDirectory = faDirectory then
          Result :=
            Result +
            '<a href="' + URL + '?path=' + Path + '\' + SR.Name + '">' +
              SR.Name +
            '</a>'#13#10;
    until FindNext(SR) <> 0;
  finally
    FindClose(SR);
    Result := Result + '</pre>';
  end else
    Result := '';
end;

function TwbmHelloWorld.ParentLink(URL, Path: String): String;
begin
  Result := '';
  while Path <> 'do
  begin
    if AnsiLastChar(Path)^ = '\then
      Break;
    SetLength(Path, Pred(Length(Path)));
  end;
  if Path = 'then
    Exit;
  if DirectoryExists(Path) then
    Result :=
      '<h1>Parent Folder</h1>' +
        '<a href="' + URL + '?path=' + Path + '">' +
          Path +
        '</a>'#13#10;
end;

procedure TwbmHelloWorld.pgpDefaultHTMLTag(
  Sender: TObject; Tag: TTag; const TagString: String; TagParams: TStrings;
  var ReplaceText: String
);
begin
  if TagString = 'generatorthen
    ReplaceText := 'Web CGI App - Hello World v1'
  else if TagString = 'nowthen
    ReplaceText := DateTimeToStr(Now)
  else
    ReplaceText :=
      '<font color="red">[b]Unknown Tag:[/b]</font><font color="blue"> <#' +
        TagString + ' ' + TagParams.Text +
      '></font>';
end;

procedure TwbmHelloWorld.wbmHelloWorldwbaSurfDiskAction(
  Sender: TObject; Request: TWebRequest; Response: TWebResponse;
  var Handled: Boolean
);
var
  Path, OutPut: String;
begin
  Path := Request.QueryFields.Values['path'];
  if AnsiLastChar(Path)^ = '\then
    SetLength(Path, Pred(Length(Path)));
  if not DirectoryExists(Path) then
  begin
    OutPut :=
      '<html><head><title>Oops</title></head><body>' +
        '<h1>Oops</h1>' +
        'Folder [b]' + Path + '[/b] does not exist' +
      '</body></html>';
  end else begin
    OutPut :=
      '<html><head><title>' + Path + '</title></head><body>' +
        ParentLink(Request.URL + Request.PathInfo, Path) +
        GetFolders(Request.URL + Request.PathInfo, Path) +
        GetFiles(Request.URL + Request.PathInfo, Path) +
      '</body></html>';
  end;
  Response.Content := OutPut;
end;

end.

Schritt 5: Plug and Play

Jetzt noch kompilieren und die DLL in ein ausführbares Verzeichnis eines Webserver (PWS oder IIS) installieren und aufrufen. Ich habe die DLL in das Verzeichnis cgi-bin kopiert, damit kann ich diese wie folgt aufrufen:
Code:
http://localhost/cgi-bin/CGIDemo.dll
Und noch der Download des Beispiels (3 KB).

[edit=CalganX]Mfg, CalganX[/edit]
Ich bin nicht zurück, ich tue nur so
 
Themen-Optionen Tutorial durchsuchen
Tutorial durchsuchen:

Erweiterte Suche
Ansicht

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:10 Uhr.
Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf