Introducción
El desarrollo de programas web plantea grandes desafíos a las herramientas de desarrollo. Ante las numerosas necesidades de los usuarios, muchas empresas han lanzado un gran número de plataformas de desarrollo: aquellas para desarrollar aplicaciones de escritorio y programas C/S, aquellas para desarrollar middleware y aquellas para desarrollar web. servidores. Esto da como resultado que los programadores se enfrenten a una gran cantidad de herramientas sin forma de comenzar.
DELPHI se diferencia de otras herramientas de desarrollo porque es un sistema abierto, siempre que algunos controles se utilicen de manera flexible, se pueden desarrollar varios tipos de sistemas, ya sean programas N-Tie, programas multiproceso o programas informáticos distribuidos (incluidos DCOM y CORBAR). ), programas TCP, programas web, ActiveX, middleware, programas push e incluso puede usarlo para escribir programas ensambladores.
DELPHI encapsula inteligentemente ISAPI/NSAPI/CGI/WCGI, etc. en una clase. Los usuarios pueden obtener diferentes sistemas siempre que seleccionen los resultados de la compilación durante la compilación.
En DELPHI4, InPRise ha fortalecido aún más su soporte para el desarrollo de programas web y puede desarrollar sistemas mejores y más sólidos. Los siguientes son varios problemas comunes en el desarrollo de aplicaciones web para su referencia. Si no hay ninguna declaración especial, significa que el programa se está ejecutando bajo DELPHI 4.
¿Cómo devolver una imagen desde una aplicación de servidor web?
La aplicación de servidor web no solo puede generar documentos de páginas complejos, sino también devolver diferentes imágenes según las solicitudes del usuario. Por supuesto, existe un método más sencillo. Dependiendo de los parámetros de entrada, la etiqueta <img src...> también apunta a diferentes direcciones URL. No usamos este método aquí, pero usamos la DLL para devolver la imagen.
Por supuesto, primero debes crear un contenedor de páginas (productor de páginas) con el siguiente contenido:
〈html〉
〈body〉Esta es una prueba〈BR〉〈img src=″/scripts/mydll.dll/picture″〉〈/body〉
〈/html〉
A continuación, configuramos el evento de acción correspondiente a PathInfo y devolvemos el resultado de la imagen. El código fuente es el siguiente:
(Nota: la unidad JPEG debe incluirse en la declaración de la unidad)
procedimiento TWebModule1.WebModule1WebActionItem1Action(Remitente: TObject;Solicitud: TWebRequest; Respuesta: TWebResponse; var manejada: booleana);
var
Jpg: TJpegImage;
S: TMemoryStream;
comenzar
Jpg := TJpegImage.Create;
intentar
Jpg.LoadFromFile(′prueba′);
S := TMemoryStream.Create;
intentar
Jpg.SaveToStream(S);
Posición S:= 0;
Respuesta.ContentType := ′image/jpeg′;
Respuesta.ContentStream:= S;
//Debe completarse antes de que se publique la transmisión
Respuesta.EnviarRespuesta;
finalmente
S.Gratis;
fin;
finalmente
Jpg.Gratis;
fin;
fin;
De hecho, este método es más seguro y flexible que el método simple mencionado anteriormente. Se puede utilizar de forma flexible en algunos lugares y ligeras modificaciones basadas en él pueden producir efectos que son difíciles de lograr con herramientas de desarrollo generales.
¿Cómo utilizar el controlador de acceso nativo con la biblioteca de enlaces dinámicos (DLL) ISAPI/NSAPI?
Esto se debe a que DAO 3.0 o DAO 3.5 es un programa seguro para subprocesos (programa seguro para subprocesos), y un servidor web (como IIS) generará múltiples subprocesos de acuerdo con las solicitudes del usuario y también enumerará la DLL correspondiente a ISAPI como un hilo. En este momento, ISAPI notificará a DAO a través de BDE, diciéndole que no cumple con las normas de seguridad de subprocesos.
Hay muchas soluciones si debe acceder a la biblioteca de Access 95/97, puede acceder a ella a través de ODBC. ODBC no pasa por DAO y también es un programa seguro para subprocesos. Además, existen algunos conjuntos de control de terceros a través de los cuales se puede acceder a Access 95/97 directamente desde BDE, lo cual es más eficiente.
El usuario accede a la DLL ISAPI en mi servidor web, pero informa: "Nombre de archivo no válido", aunque el archivo existe. Por cierto, mi base de datos está en un servidor Novell. ¿Por qué es esto?
No ha configurado la asignación de ruta de unidad (MAPING) correspondiente a su cuenta IUSR_XXX. Como Novell no utiliza FAT, la asignación de rutas debe agregarse manualmente. Por supuesto, se puede convertir en un script de inicio de sesión. Tenga en cuenta que si está ejecutando IIS como servidor web y está involucrado con Novell, ya sea como servidor de archivos o de base de datos, debe definir la asignación de ruta.
"Parámetro de configuración no válido para alias {alias_name}" (configuración de alias no válida), este error ocurre cuando configuro un DSN ODBC y accedo al servidor ISAPI/NSAPI a través de él.
Si desea crear un alias ODBC para el usuario de acceso (usuario IIS), tenga cuidado de crear un DSN del SISTEMA (DNS del sistema) en lugar de crear un "DNS de usuario", aunque "DNS de usuario" es la configuración predeterminada.
¿Cómo obtener el nombre y la dirección IP del cliente (máquina que accede)?
Es muy fácil implementar esta función usando el control TCP. Seleccione un control TCP de la página de Internet y obtenga lo que necesita directamente:
Memo1.Lines.Add(TCP1.LocalHostName);
Memo1.Lines.Add(TCP1.LocalIp);
Por supuesto, si no quieres hacer esto, existen formas más complicadas:
utiliza Winsock;
procedimiento TForm1.FormCreate(Remitente: TObject);
var
wVersionRequested: Palabra;
wsaData : TWSAData;
comenzar
{Crear WinSock}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);
fin;
procedimiento TForm1.Button1Click (Remitente: TObject);
var
p: PHostent;
s: matriz[0..128] de char;
p2: pchar;
comenzar
{obtener nombre de la computadora}
ObtenerNombreHost(@s,128);
p:=GetHostByName(@s);
Memo1.Lines.Add(p^.h_Name);
{Obtener dirección IP de la máquina}
p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
Memo1.Lines.Add(p2);
fin;
procedimiento TForm1.FormDestroy(Remitente: TObject);
comenzar
{Liberar WinSock}
Limpieza WSA;
fin;
Esta es una unidad independiente llamada WINSOCK, que puede integrar directamente en su programa.
¿Por qué no puedo crear una verdadera DLL multiproceso en DELPHI 3?
Aunque el asistente ISAPI DLL en DELPHI3 ha generado una gran cantidad de código para crear DLL multiproceso, todavía existe un defecto grave: no declara que esta aplicación es un programa multiproceso. Entonces necesitas agregar una oración:
EsMultiThread := VERDADERO;
Coloque esta oración al principio del bloque de inicio y fin del programa DPR, convirtiéndola en la primera oración.
¿Cómo sé si actualmente estoy conectado a Internet?
La forma más sencilla es utilizar un componente TCP para obtener su IP actual y determinar si está conectado a Internet juzgando la IP. Por ejemplo:
si TCP1.LocalIp = '0.0.0.0' entonces
ShowMessage('¡Actualmente no conectado a Internet!');
Cabe señalar que debido a que no existe una diferencia esencial entre Internet e Intranet, generalmente es imposible determinar si está conectado a Internet o simplemente a la Intranet. ciertamente. También puede agregar un componente PING a PING en un sitio relativamente estable y rápido. Si está conectado, significa que tiene acceso a Internet. Sin embargo, este método no es muy versátil.
¿Cómo imprimir una página web?
Puede optar por utilizar el método AutoPrint del control HTML. Por ejemplo:
utiliza impresoras;
procedimiento TForm1.Button1Click (Remitente: TObject);
var
OldCur: TCursor;
comenzar
OldCur := Pantalla.Cursor;
con impresora hacer
comenzar
comenzarDoc;
HTML1.AutoPrint(identificador);
Título := HTML1.URL;
Enddoc;
fin;
Pantalla.Cursor:= OldCur;
fin;
Además, también puedes utilizar su método PrintPage. Sin embargo, te recomiendo que utilices AutoPrint, porque este control es más flexible y puede filtrar algunos contenidos que no deseas imprimir.
Blog del autor: http://blog.csdn.net/zou5655/