Introduction
Le développement de programmes Web pose de grands défis aux outils de développement Face aux nombreux besoins des utilisateurs, de nombreuses entreprises ont lancé un grand nombre de plateformes de développement : celles pour le développement d'applications bureautiques et de programmes C/S, celles pour le développement de middleware et celles pour le développement Web. serveurs. Cela conduit les programmeurs à se retrouver confrontés à un grand nombre d'outils sans aucun moyen de démarrer.
DELPHI est différent des autres outils de développement car il s'agit d'un système ouvert. Tant que vous utilisez certains contrôles de manière flexible, vous pouvez développer différents types de systèmes, qu'il s'agisse de programmes N-Tie, de programmes multithreads ou de programmes informatiques distribués (y compris DCOM et CORBAR). ), programmes TCP, programmes Web, ActiveX, middleware, programmes push, et vous pouvez même l'utiliser pour écrire des programmes assembleur.
DELPHI encapsule intelligemment ISAPI/NSAPI/CGI/WCGI, etc. dans une classe. Les utilisateurs peuvent obtenir différents systèmes tant qu'ils sélectionnent les résultats de la compilation lors de la compilation.
Dans DELPHI4, InPRise a encore renforcé son soutien au développement de programmes Web et peut développer des systèmes meilleurs et plus solides. Voici plusieurs problèmes courants liés au développement d’applications Web pour votre référence. S'il n'y a pas d'instruction particulière, cela signifie que le programme s'exécute sous DELPHI 4.
Comment renvoyer une image depuis une application Web Server ?
L'application serveur Web peut non seulement générer des documents de pages complexes, mais également renvoyer différentes images en fonction des demandes des utilisateurs. Bien sûr, il existe une méthode plus simple. Selon les paramètres d'entrée, la balise <img src...> pointe également vers différentes adresses URL. Nous n'utilisons pas cette méthode ici, mais utilisons la DLL pour renvoyer l'image.
Bien entendu, vous devez d'abord créer un conteneur de page (page producteur) avec le contenu suivant :
〈html〉
〈body〉Ceci est un test〈BR〉〈img src=″/scripts/mydll.dll/picture″〉〈/body〉
〈/html〉
Ensuite, nous définissons l'événement d'action correspondant à PathInfo et renvoyons le résultat de l'image. Le code source est le suivant :
(Remarque : l'unité JPEG doit être incluse dans la déclaration d'unité)
procédure TWebModule1.WebModule1WebActionItem1Action(Expéditeur : TObject;Requête : TWebRequest ; Réponse : TWebResponse ; var Gérée : Booléen) ;
var
Jpg : TJpegImage ;
S : TMemoryStream ;
commencer
Jpg := TJpegImage.Create;
essayer
Jpg.LoadFromFile(′test′);
S := TMemoryStream.Create;
essayer
Jpg.SaveToStream(S);
Position S := 0 ;
Response.ContentType := ′image/jpeg′;
Réponse.ContentStream := S;
//Doit être terminé avant la sortie du flux
Réponse.SendResponse ;
enfin
S.Gratuit ;
fin;
enfin
Jpg.Gratuit ;
fin;
fin;
En fait, cette méthode est plus sûre et plus flexible que la méthode simple mentionnée ci-dessus. Il peut être utilisé de manière flexible à certains endroits, et de légères modifications basées sur celui-ci peuvent produire des effets difficiles à obtenir avec des outils de développement généraux.
Comment utiliser le pilote d'accès natif avec la bibliothèque de liens dynamiques (DLL) ISAPI/NSAPI ?
En effet, DAO 3.0 ou DAO 3.5 est ce qu'on appelle un thread-safe (programme thread-safe), et un serveur Web (tel que IIS) générera plusieurs threads en fonction des demandes de l'utilisateur, et la DLL correspondant à ISAPI est également répertoriée. comme un fil. À ce stade, ISAPI informera DAO via BDE, lui indiquant qu'il ne respecte pas les réglementations en matière de sécurité des threads.
Il existe de nombreuses solutions. Si vous devez accéder à la bibliothèque Access 95/97, vous pouvez y accéder via ODBC. ODBC ne passe pas par DAO et est également un programme thread-safe. De plus, il existe certains ensembles de contrôles tiers grâce auxquels Access 95/97 est accessible directement à partir de BDE, ce qui est plus efficace.
L'utilisateur accède à la DLL ISAPI sur mon serveur Web, mais signale : "Nom de fichier invalide", bien que le fichier existe. Au fait, ma base de données se trouve sur un serveur Novell. Pourquoi est-ce ?
Vous n'avez pas configuré le mappage du chemin du lecteur (MAPING) correspondant à votre compte IUSR_XXX. Comme Novell n'utilise pas FAT, le mappage de chemin doit être ajouté manuellement. Bien sûr, il peut être transformé en script de connexion au démarrage. Gardez à l'esprit que si vous exécutez IIS en tant que serveur Web et que vous êtes impliqué dans Novell, en tant que serveur de fichiers ou serveur de base de données, vous devez définir le mappage de chemin.
"Paramètre de configuration invalide pour l'alias {alias_name}" (configuration d'alias invalide), une telle erreur se produit lorsque je configure un DSN ODBC et que j'accède au serveur ISAPI/NSAPI via celui-ci.
Si vous souhaitez créer un alias ODBC pour l'utilisateur d'accès (utilisateur IIS), veillez à créer un SYSTEM DSN (DNS système) au lieu de créer un "DNS utilisateur", bien que "DNS utilisateur" soit le paramètre par défaut.
Comment obtenir le nom et l'adresse IP du client (machine accédante) ?
Il est très simple d'implémenter cette fonction à l'aide du contrôle TCP. Sélectionnez un contrôle TCP sur la page Internet et obtenez directement ce dont vous avez besoin :
Memo1.Lines.Add(TCP1.LocalHostName);
Mémo1.Lines.Add(TCP1.LocalIp);
Bien sûr, si vous ne souhaitez pas faire cela, il existe des moyens plus compliqués :
utilise Winsock;
procédure TForm1.FormCreate(Expéditeur : TObject);
var
wVersionRequested : Word ;
wsaData : TWSAData;
commencer
{Créer WinSock}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);
fin;
procédure TForm1.Button1Click(Expéditeur : TObject);
var
p : PHostEnt ;
s : tableau[0..128] de caractères ;
p2 : pchar ;
commencer
{obtenir le nom de l'ordinateur}
GetHostName (@s,128);
p:=GetHostByName (@s);
Memo1.Lines.Add(p^.h_Name);
{Obtenir l'adresse IP de la machine}
p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
Mémo1.Lines.Add(p2);
fin;
procédure TForm1.FormDestroy(Expéditeur : TObject);
commencer
{Version WinSock}
WSANettoyage ;
fin;
Il s'agit d'une unité indépendante appelée WINSOCK, que vous pouvez intégrer directement dans votre programme.
Pourquoi ne puis-je pas créer une véritable DLL multithread dans DELPHI 3 ?
Bien que l'assistant DLL ISAPI de DELPHI3 ait généré beaucoup de code pour créer des DLL multi-thread, il subsiste un sérieux défaut : il n'indique pas que cette application est un programme multi-thread. Vous devez donc ajouter une phrase :
IsMultiThread := VRAI ;
Placez cette phrase au début du bloc début-fin du programme DPR, ce qui en fait la première phrase.
Comment savoir si je suis actuellement connecté à Internet ?
Le moyen le plus simple consiste à utiliser un composant TCP pour obtenir votre adresse IP actuelle et à déterminer si vous êtes connecté à Internet en jugeant l'adresse IP. Par exemple:
si TCP1.LocalIp = '0.0.0.0' alors
ShowMessage('Pas actuellement connecté à Internet !');
Il convient de noter que, comme il n’existe pas de différence essentielle entre Internet et Intranet, il est généralement impossible de déterminer s’il est connecté à Internet ou simplement connecté à l’Intranet. certainement. Vous pouvez également ajouter un composant PING à PING, un site relativement stable et rapide. S'il est connecté, cela signifie que vous avez accès à Internet. Toutefois, cette méthode n’est pas très polyvalente.
Comment imprimer une page Web ?
Vous pouvez choisir d'utiliser la méthode AutoPrint du contrôle HTML. Par exemple:
utilise des imprimantes ;
procédure TForm1.Button1Click(Expéditeur : TObject);
var
OldCur : TCurseur ;
commencer
OldCur := Screen.Cursor;
avec l'imprimante faire
commencer
DébutDoc ;
HTML1.AutoPrint(poignée);
Titre := HTML1.URL;
Document de fin ;
fin;
Screen.Cursor := OldCur;
fin;
De plus, vous pouvez également utiliser sa méthode PrintPage. Cependant, je vous recommande d'utiliser AutoPrint, car ce contrôle est plus flexible et peut filtrer certains contenus que vous ne souhaitez pas imprimer.
Blog de l'auteur : http://blog.csdn.net/zou5655/