![]() |
Web Server Anwendungen
Kennt jemand 'nen gutes Tutorial oder Buch über das Erstellen von Web Server Anwendungen?
|
Nein, aber was genau willst Du erreichen, vielleicht kann ich Dir ja helfen, ich machen den lieben langen Arbeitstag nichts anderes.
|
Mich würde mal interessieren wie z.B. die Forensoftware von ArneE aufgebaut ist oder wie man prinzipiell sowas macht.
|
Welche Delphi Version steht Dir zur Verfügung - davon hängt ab, wieviel von Hand gemacht werden muss, bzw. welche Funktionen von Delphi genutzt werden können.
:cat: |
5 Enterprise
|
Zitat:
Der Schlüssel bei HTML-basierten Systemen sind die Daten die bei einem HHTP-Request übergeben werden. Z.b. übermittelt forum.html?post=131 der Datei forum.html ein Parameter namens post mit dem Wert 131. Diese Information kann diese Datei, z. B. ein CGI-,PHP-Script oder eine in Delphi geschriebene CGI-Anwendung, dann auswerten und z. B. den Beitrag Nummer 131 anzeigen. Das Prinzip hier ist also: Du speicherst die Beiträge der Benutzer in einer DB. Diesen Beiträgen weist du Nummern zu, und um die Beiträge anzusehen, muss derjenige, der dies tun will, dir übermitteln, welchen Beitrag er ansehen will. Bis hierher ist es egal, ob du das HTTP-Protokoll benutzt oder ein eigenes. Nur bei der Art der Übermittlung gibt es viele Möglichkeiten: Bei der HTTP-Methode hast du die Möglichkeiten des POST- und des (obengenannten) GET-Request, wenn du selber Client- und Serverprotokolle schreibst, kannst du natürlich den Befehl beliebig nennen und die Art der Befehlsübermittlung frei bestimmen. |
Das ist eigentlich alles einigermaßen klar, kenne ich von PHP. Nur was ich halt nicht verstehe ist, wie eine Anwendung HTML Befehle an den Browser sendet oder was auch immer da passiert:?:
|
Zitat:
![]() |
Kennst du ne URL wo man mehr Infos über CGI bekommt?
|
Wenn ich mich nicht ganz täusche, dann sind cgis in delphi an sich reine konsolenapplikationen, die dann als "ausgabe" html - code ausspucken ... (zumindest bei win-servern kann ich mir dqas so vorstellen ...) dieses müsste dann in eine datei umgeleitet werden und der webserver liefert dem clienten dann diese ausgabedatei ...
irgendwie so war das mal ... (ist etwas her, dass ich mich damit befasst habe.....) |
Das scheint ja alles wirklich viel umständlicher zu sein, als dies mit php zu machen.
|
Hier mal ein Beispiel für eine CGI Anwendung:
Code:
Und so schwer ist das nun auch wieder nicht.
program MyCgi;
uses Windows, SysUtils; {$APPTYPE CONSOLE} var QueryString: string; begin QueryString := GetEnvironmentVariable('Query_String'); { Argumente mit ? übergeben: 'MyCgi.exe?Param1=Irgendwas&Post=443' } WriteLn('Content-type: text/html');WriteLn; // http-Header schicken WriteLn('<html><body bgcolor=white>'); WriteLn(' ' + QueryString + </p>'); WriteLn('</body></html>'); end. |
Schwer sieht das nicht aus. Ist denn so der generelle Aufbau oder hast du da jetzt Sachen weggelassen?
Kennst du ne gute Seite wo man sowas lernen kann? |
Ich werde mich jetzt mal dran machen und ein kleines Projekt mit Hilfe von D5 Enterprise erstellen. Also, ein wenig noch...
|
Du bist der Beste! Laß dir nur Zeit, eilt nicht. :D
|
Zitat:
Ich habe aber etwas meiner Meinung nach wichtiges weggelassen. Nämlich die Umwandlungsroutine für den Query_String.
Code:
function HexToChar(const S: string): Char;
function HexCharToByte(c: Char): Byte; begin if c in ['0'..'9'] then Result := Ord(c) - Ord('0') else if c in ['a'..'f'] then Result := 10 + ord(c) - ord('a') else if c in ['A'..'F'] then Result := 10 + ord(c) - ord('A') else Result := 0; end; begin if Length(S) = 2 then Result := Char((HexCharToByte(S[1]) shl 4) or (HexCharToByte(S[2]))) else Result := #32; end; procedure QueryStringToList(const QueryString: string; List: TStrings); var S: string; i: Integer; F, P: PChar; begin if QueryString = '' then Exit; F := PChar(QueryString); P := F; while True do begin if P^ in [#0, '&'] then begin SetString(S, F, P - F); F := P + 1; i := 1; while i < Length(S) do begin if S[i] = '%' then begin S[i] := HexToChar(Copy(S, i + 1, 2)); Delete(S, i + 1, 2); end; Inc(i); end; List.Add(S); end; if P^ = #0 then Break; Inc(P); end; end; Zitat:
Die Daten in der Environment Variable Query_String sind die GET Daten. Die POST Daten werden kann man über ReadLn einlesen. Die Länge der POST Daten wird durch die Environment Variable "Content_Length" und der Typ der Daten mit "Content_Type" an das CGI Programm übergeben. |
Das Thema interessiert mich auch. Wie kann man Cookie-Daten einlesen?
|
Zitat:
|
Zu dem GetEnvironmentVariable:
In welcher Unit steht das? Wenn ich das aus der windows.pas benutze, krieg ich ne Fehlermeldung, weil die Parameter falsch sind (ist ja im PDSK klar ersichtlich). Hast du da in deinen Posts einen Fehler gemacht oder beziehst du diese Funktion aus einer anderen Unit? |
Nicht der Beste, aber ich habs in die FAQs gestellt.
![]() |
Ich habe noch ein paar Fehler im Post ausgebessert.
Zu GetEnvironmentVariable: Ab Delphi 6 ist diese Funktion in SysUtils. Hier hast du eine Version, die auch unter D345 läuft:
Code:
function GetEnvVar(const Name: string): string;
var P: PChar; begin P := StrAlloc(10000); try GetEnvironmentVariable(PChar(Name), P, 10000); Result := P; finally StrDispose(P); end; end; @sakura: Meine CGI Variante ist eher für die NonVCL Leute. :) Ich nutze natürlich auch die WinCGI-Variante von dir, wenn ich mal ein CGI-Programm schreiben muss (was selten vorkam/kommt). |
Danke, jbg, für die Funktion. Ich selbst benutze noch D5. Ich war gerade dabei, die Funkion der WinAPI mit den ganzen Pointern zu schreiben, aber das erübrigt sich jetzt :D .
Ich finde im Übrigen deine Variante besser als Sakuras. 1. ist sie kleiner (was bei CGI-Anwendungen allerdings nahezue egal ist, also ist das kein Pluspunkt :shock: ), 2. schreibt man alles selbst und kann so das Programm selbst strukturieren unnd 3. ist es sowieso egal, da ich nicht vorhabe in absehbarer Zeit, CGIs in Delphi zu entwickeln. Aber interessant war diese Einführung allemal. Danke. |
:hi:
Ein brauchbares Tutorial, allerdings in englisch, gibt es hier: ![]() Hier findet man die Erstellung von Datenbankanwendungen usw. und auch einige Tools zum Download. Das Ganze ist ein Online-Buch, welches zum Teil fertig ist (und nach Fertigstellung wahrscheinlich nicht mehr umsonst zu haben sein wird). :coder: |
Zitat:
Ich finde Borlands Weg auch nicht so geglückt, aber ich glaube, das Arne sein Forum auf diese Art und Weise gebastelt hat. Und auch Borlands Weg hat seine Vorteile, da Borland bereits viel Arbeit übernommen hat. Und wenn man beruflich Web Anwendungen schreibt, dann schreibt man in den seltensten Fällen "from scratch", sondern nutzt so viele Vorgaben wie möglich. Allerdings schreibe auch ich meine ISAPI Anwendungen, sowohl Filter als auch Extensions, lieber komplett von Hand. Kurz: Immerhin habe ich Borlands Weg gezeigt. Ich bin noch dabei, sämtliche ISAPI Headers zu übersetzen und werde diese nach Fertigstellung auch über die JEDI-Bibliothek zur Verfügung stellen. :) |
JEDI-Bibliothek ?!? :?: :!: :?:
Vielleicht steh ich ja nur auf dem Schlauch aber was ist das genau, wo gibts das ?!? |
Die Delphi-JEDI ist eine Open-Source Gemeinde, welche es sich zum Ziel gesetzt hat, möglichst viele Windows API Schnittstellen von C/C++ nach OOPascal/Delphi zu portieren.
![]() |
Danke, schau ich mir gleich mal an! :shock:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 16:56 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz