Einführung
Die Entwicklung von Webprogrammen stellt Entwicklungstools vor große Herausforderungen. Angesichts der zahlreichen Anforderungen der Benutzer haben viele Unternehmen eine große Anzahl von Entwicklungsplattformen eingeführt: solche für die Entwicklung von Desktop-Anwendungen und C/S-Programmen, solche für die Entwicklung von Middleware und solche für die Webentwicklung Server. Dies führt dazu, dass Programmierer mit einer großen Anzahl von Tools konfrontiert werden, für die es keinen Einstieg gibt.
DELPHI unterscheidet sich von anderen Entwicklungstools, weil es ein offenes System ist. Solange einige Steuerelemente flexibel verwendet werden, können verschiedene Arten von Systemen entwickelt werden, ob N-Tie-Programme, Multithread-Programme oder verteilte Computerprogramme (einschließlich DCOM und CORBAR). ), TCP-Programme, Webprogramme, ActiveX, Middleware, Push-Programme und Sie können es sogar zum Schreiben von Assemblerprogrammen verwenden.
DELPHI kapselt geschickt ISAPI/NSAPI/CGI/WCGI usw. in eine Klasse. Benutzer können verschiedene Systeme erhalten, solange sie die Kompilierungsergebnisse während der Kompilierung auswählen.
Mit DELPHI4 hat InPRise seine Unterstützung für die Entwicklung von Webprogrammen weiter gestärkt und kann bessere und stärkere Systeme entwickeln. Im Folgenden finden Sie einige häufig auftretende Probleme bei der Entwicklung von Webanwendungen als Referenz. Wenn keine spezielle Anweisung vorhanden ist, bedeutet dies, dass das Programm unter DELPHI 4 läuft.
Wie kann ich ein Bild von einer Webserveranwendung zurückgeben?
Die Webserveranwendung kann nicht nur komplexe Seitendokumente generieren, sondern je nach Benutzeranforderungen auch unterschiedliche Bilder zurückgeben. Natürlich gibt es eine einfachere Methode. Abhängig von den Eingabeparametern verweist das <img src...>-Tag auch auf unterschiedliche URL-Adressen. Wir verwenden diese Methode hier nicht, sondern verwenden die DLL, um das Bild zurückzugeben.
Natürlich müssen Sie zunächst einen Seitencontainer (Seitenproduzent) mit folgendem Inhalt erstellen:
〈html〉
〈Körper〉Dies ist ein Test〈BR〉〈img src=″/scripts/mydll.dll/picture″〉〈/body〉
〈/html〉
Als nächstes legen wir das Aktionsereignis fest, das PathInfo entspricht, und geben das Bildergebnis zurück. Der Quellcode lautet wie folgt:
(Hinweis: JPEG-Einheit muss in der Einheitendeklaration enthalten sein)
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
Jpg: TJpegImage;
S: TMemoryStream;
beginnen
Jpg := TJpegImage.Create;
versuchen
Jpg.LoadFromFile(′test′);
S := TMemoryStream.Create;
versuchen
Jpg.SaveToStream(S);
S.Position := 0;
Response.ContentType := ′image/jpeg′;
Response.ContentStream := S;
//Muss abgeschlossen werden, bevor der Stream freigegeben wird
Response.SendResponse;
Endlich
S.Frei;
Ende;
Endlich
JPG.Free;
Ende;
Ende;
Tatsächlich ist diese Methode sicherer und flexibler als die oben erwähnte einfache Methode. Es ist an manchen Stellen flexibel einsetzbar und kann durch leichte darauf basierende Modifikationen zu Effekten führen, die mit allgemeinen Entwicklungstools nur schwer zu erreichen sind.
Wie verwende ich einen nativen Zugriffstreiber mit der ISAPI/NSAPI Dynamic Link Library (DLL)?
Dies liegt daran, dass DAO 3.0 oder DAO 3.5 ein sogenanntes Thread-sicheres (thread-sicheres) Programm ist und ein Webserver (z. B. IIS) gemäß Benutzeranforderungen mehrere Threads generiert und auch die ISAPI entsprechende DLL als auflistet ein Thread. Zu diesem Zeitpunkt benachrichtigt ISAPI DAO über BDE und teilt ihm mit, dass es die Thread-Sicherheitsbestimmungen nicht einhält.
Es gibt viele Lösungen. Wenn Sie auf die Access 95/97-Bibliothek zugreifen müssen, können Sie über ODBC darauf zugreifen. ODBC durchläuft kein DAO und ist außerdem ein Thread-sicheres Programm. Darüber hinaus gibt es einige Kontrollsätze von Drittanbietern, über die direkt von BDE aus auf Access 95/97 zugegriffen werden kann, was effizienter ist.
Der Benutzer greift auf die ISAPI-DLL auf meinem Webserver zu, meldet aber: „Ungültiger Dateiname“, obwohl die Datei existiert. Meine Datenbank liegt übrigens auf einem Novell-Server. Warum ist das so?
Sie haben die Laufwerkspfadzuordnung (MAPING) für Ihr IUSR_XXX-Konto nicht konfiguriert. Da Novell kein FAT verwendet, muss die Pfadzuordnung manuell hinzugefügt werden. Natürlich kann daraus ein Boot-Anmeldeskript gemacht werden. Beachten Sie, dass Sie die Pfadzuordnung definieren müssen, wenn Sie IIS als Webserver ausführen und als Dateiserver oder Datenbankserver an Novell beteiligt sind.
„Ungültiger Konfigurationsparameter für Alias {alias_name}“ (ungültige Alias-Konfiguration). Ein solcher Fehler tritt auf, wenn ich einen ODBC-DSN einrichte und über ihn auf den ISAPI/NSAPI-Server zugreife.
Wenn Sie einen ODBC-Alias für den Zugriffsbenutzer (IIS-Benutzer) erstellen möchten, achten Sie darauf, einen SYSTEM-DSN (System-DNS) anstelle eines „Benutzer-DNS“ zu erstellen, obwohl „Benutzer-DNS“ die Standardeinstellung ist.
Wie erhalte ich den Namen und die IP-Adresse des Clients (Zugriffsrechners)?
Diese Funktion lässt sich sehr einfach über die TCP-Steuerung implementieren. Wählen Sie auf der Internetseite ein TCP-Steuerelement aus und erhalten Sie direkt, was Sie benötigen:
Memo1.Lines.Add(TCP1.LocalHostName);
Memo1.Lines.Add(TCP1.LocalIp);
Wenn Sie dies nicht möchten, gibt es natürlich auch kompliziertere Möglichkeiten:
verwendet Winsock;
procedure TForm1.FormCreate(Sender: TObject);
var
wVersionRequested: Word;
wsaData: TWSAData;
beginnen
{WinSock erstellen}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);
Ende;
procedure TForm1.Button1Click(Sender: TObject);
var
p: PHostEnt;
s: array[0..128] of char;
p2: pchar;
beginnen
{Computernamen abrufen}
GetHostName(@s,128);
p:=GetHostByName(@s);
Memo1.Lines.Add(p^.h_Name);
{Maschinen-IP-Adresse abrufen}
p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
Memo1.Lines.Add(p2);
Ende;
procedure TForm1.FormDestroy(Sender: TObject);
beginnen
{WinSock veröffentlichen}
WSACleanup;
Ende;
Dabei handelt es sich um eine unabhängige Einheit namens WINSOCK, die Sie direkt in Ihr Programm einbetten können.
Warum kann ich in DELPHI 3 keine echte Multithread-DLL erstellen?
Obwohl der ISAPI-DLL-Assistent in DELPHI3 viel Code zum Erstellen von Multithread-DLLs generiert hat, gibt es immer noch einen schwerwiegenden Fehler: Er erklärt nicht, dass diese Anwendung ein Multithread-Programm ist. Sie müssen also einen Satz hinzufügen:
IsMultiThread := TRUE;
Platzieren Sie diesen Satz am Anfang des Anfang-Ende-Blocks des DPR-Programms und machen Sie ihn zum ersten Satz.
Woher weiß ich, ob ich derzeit mit dem Internet verbunden bin?
Der einfachste Weg besteht darin, eine TCP-Komponente zu verwenden, um Ihre aktuelle IP-Adresse abzurufen und anhand der IP-Adresse festzustellen, ob Sie mit dem Internet verbunden sind. Zum Beispiel:
wenn TCP1.LocalIp = '0.0.0.0' dann
ShowMessage('Derzeit keine Verbindung zum Internet!');
Es ist zu beachten, dass es im Allgemeinen unmöglich ist, festzustellen, ob es mit dem Internet oder nur mit dem Intranet verbunden ist, da es keinen wesentlichen Unterschied zwischen Internet und Intranet gibt. sicherlich. Sie können auch eine PING-Komponente hinzufügen, um eine relativ stabile und schnelle Site anzupingen. Wenn eine Verbindung besteht, bedeutet dies, dass Sie Zugriff auf das Internet haben. Allerdings ist diese Methode nicht sehr vielseitig.
Wie drucke ich eine Webseite?
Sie können die AutoPrint-Methode des HTML-Steuerelements verwenden. Zum Beispiel:
verwendet Drucker;
procedure TForm1.Button1Click(Sender: TObject);
var
OldCur: TCursor;
beginnen
OldCur := Screen.Cursor;
mit Drucker tun
beginnen
BeginDoc;
HTML1.AutoPrint(handle);
Titel := HTML1.URL;
EndDoc;
Ende;
Screen.Cursor := OldCur;
Ende;
Darüber hinaus können Sie auch die PrintPage-Methode verwenden. Ich empfehle Ihnen jedoch, AutoPrint zu verwenden, da diese Steuerung flexibler ist und einige Inhalte filtern kann, die Sie nicht drucken möchten.
Blog des Autors: http://blog.csdn.net/zou5655/