Introdução
O desenvolvimento de programas Web representa grandes desafios para as ferramentas de desenvolvimento Diante das inúmeras necessidades dos usuários, muitas empresas lançaram um grande número de plataformas de desenvolvimento: aquelas para desenvolvimento de aplicativos de desktop e programas C/S, aquelas para desenvolvimento de middleware e aquelas para desenvolvimento Web. servidores. Isso faz com que os programadores enfrentem um grande número de ferramentas sem ter como começar.
DELPHI é diferente de outras ferramentas de desenvolvimento porque é um sistema aberto. Contanto que você use alguns controles de forma flexível, você pode desenvolver vários tipos de sistemas, sejam programas N-Tie, programas multithread, programas de computação distribuída (incluindo DCOM e CORBAR). ), programas TCP, programas Web, ActiveX, middleware, programas push e você pode até usá-los para escrever programas assembly.
DELPHI encapsula ISAPI/NSAPI/CGI/WCGI, etc. de maneira inteligente em uma classe. Os usuários podem obter sistemas diferentes, desde que selecionem os resultados da compilação durante a compilação.
No DELPHI4, o InPRise reforçou ainda mais o seu apoio ao desenvolvimento de programas Web e pode desenvolver sistemas melhores e mais fortes. A seguir estão vários problemas comuns no desenvolvimento de aplicativos da web para sua referência. Se não houver nenhuma instrução especial, significa que o programa está sendo executado no DELPHI 4.
Como retornar uma imagem de uma aplicação Web Server?
O aplicativo de servidor Web pode não apenas gerar documentos de páginas complexas, mas também retornar imagens diferentes de acordo com as solicitações do usuário. Claro, existe um método mais simples. Dependendo dos parâmetros de entrada, a tag <img src...> também aponta para diferentes endereços URL. Não usamos esse método aqui, mas usamos a DLL para retornar a imagem.
Claro, você deve primeiro criar um contêiner de páginas (produtor de páginas) com o seguinte conteúdo:
〈html〉
〈body〉Isso é um teste〈BR〉〈img src=″/scripts/mydll.dll/picture″〉〈/body〉
〈/html〉
A seguir, definimos o evento de ação correspondente a PathInfo e retornamos o resultado da imagem. O código-fonte é o seguinte:
(Nota: a unidade JPEG deve ser incluída na declaração da unidade)
procedimento TWebModule1.WebModule1WebActionItem1Action(Sender: TObject;Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
var
Jpg: TJpegImage;
S:TMemoryStream;
começar
Jpg := TJpegImage.Create;
tentar
Jpg.LoadFromFile(′teste′);
S := TMemoryStream.Create;
tentar
Jpg.SaveToStream(S);
Posição S.:= 0;
Response.ContentType := ′imagem/jpeg′;
Response.ContentStream := S;
//Deve ser concluído antes do stream ser lançado
Response.SendResponse;
finalmente
S.Livre;
fim;
finalmente
Jpg.Livre;
fim;
fim;
Na verdade, este método é mais seguro e flexível do que o método simples mencionado acima. Ele pode ser usado de forma flexível em alguns lugares, e pequenas modificações baseadas nele podem produzir efeitos que são difíceis de alcançar com ferramentas gerais de desenvolvimento.
Como usar o driver de acesso nativo com a biblioteca de vínculo dinâmico (DLL) ISAPI/NSAPI?
Isso ocorre porque DAO 3.0 ou DAO 3.5 é um chamado thread-safe (programa thread-safe), e um servidor Web (como IIS) irá gerar vários threads de acordo com as solicitações do usuário, e a DLL correspondente ao ISAPI também está listada como um fio. Neste momento, o ISAPI notificará o DAO através do BDE, informando que ele não está em conformidade com os regulamentos de segurança de thread.
Existem muitas soluções. Se você precisar acessar a biblioteca do Access 95/97, poderá acessá-la por meio de ODBC. ODBC não passa pelo DAO e também é um programa thread-safe. Além disso, existem alguns conjuntos de controle de terceiros através dos quais o Access 95/97 pode ser acessado diretamente do BDE, o que é mais eficiente.
O usuário acessa a DLL ISAPI no meu servidor web, mas informa: "Nome de arquivo inválido", embora o arquivo exista. A propósito, meu banco de dados está em um servidor Novell. Por que isso acontece?
Você não configurou o mapeamento do caminho da unidade (MAPING) correspondente à sua conta IUSR_XXX. Como a Novell não usa FAT, o mapeamento de caminho deve ser adicionado manualmente. Claro, isso pode ser transformado em um script de login de inicialização. Lembre-se de que se você estiver executando o IIS como um servidor Web e estiver envolvido com a Novell, seja como servidor de arquivos ou como servidor de banco de dados, deverá definir o mapeamento de caminho.
"Parâmetro de configuração inválido para alias {alias_name}" (configuração de alias inválida), esse erro ocorre quando configuro um DSN ODBC e acesso o servidor ISAPI/NSAPI através dele.
Se você deseja criar um alias ODBC para o usuário de acesso (usuário IIS), tome cuidado para criar um SYSTEM DSN (DNS do sistema) em vez de criar um "DNS do usuário", embora "DNS do usuário" seja a configuração padrão.
Como obter o nome e endereço IP do cliente (máquina de acesso)?
É muito fácil implementar esta função usando o controle TCP. Selecione um controle TCP na página da Internet e obtenha o que você precisa diretamente:
Memo1.Lines.Add(TCP1.LocalHostName);
Memo1.Lines.Add(TCP1.LocalIp);
Claro, se você não quiser fazer isso, existem maneiras mais complicadas:
usa Winsock;
procedimento TForm1.FormCreate(Remetente: TObject);
var
wVersionRequested: Palavra;
wsaData : TWSAData;
começar
{Criar WinSock}
wVersionRequested := MAKEWORD(1, 1);
WSAStartup(wVersionRequested, wsaData);
fim;
procedimento TForm1.Button1Click(Remetente: TObject);
var
p: PHostEnt;
s: array[0..128] de char;
p2: pchar;
começar
{obter nome do computador}
GetHostName(@s,128);
p:=GetHostByName(@s);
Memo1.Lines.Add(p^.h_Name);
{Obter endereço IP da máquina}
p2 := iNet_ntoa(PInAddr(p^.h_addr_list^)^);
Memo1.Lines.Add(p2);
fim;
procedimento TForm1.FormDestroy(Remetente: TObject);
começar
{Lançar WinSock}
Limpeza WSA;
fim;
Esta é uma unidade independente chamada WINSOCK, que você pode incorporar diretamente no seu programa.
Por que não consigo criar uma DLL multithread verdadeira no DELPHI 3?
Embora o assistente ISAPI DLL no DELPHI3 tenha gerado muito código para a criação de DLLs multithread, ainda há uma falha séria: ele não afirma que este aplicativo é um programa multithread. Então você precisa adicionar uma frase:
IsMultiThread := VERDADEIRO;
Coloque esta frase no início do bloco início-fim do programa DPR, tornando-a a primeira frase.
Como posso saber se estou conectado à Internet no momento?
A maneira mais simples é usar um componente TCP para obter seu IP atual e determinar se você está conectado à Internet avaliando o IP. Por exemplo:
se TCP1.LocalIp = '0.0.0.0' então
ShowMessage('Atualmente não conectado à Internet!');
Deve-se notar que, como não há diferença essencial entre a Internet e a Intranet, geralmente é impossível determinar se ela está conectada à Internet ou apenas à Intranet. certamente. Você também pode adicionar um componente PING ao PING para um site relativamente estável e rápido. Se estiver conectado, significa que você tem acesso à Internet. No entanto, este método não é muito versátil.
Como imprimir uma página da web?
Você pode optar por usar o método AutoPrint do controle HTML. Por exemplo:
usa impressoras;
procedimento TForm1.Button1Click(Remetente: TObject);
var
OldCur: TCursor;
começar
OldCur := Tela.Cursor;
com impressora fazer
começar
BeginDoc;
HTML1.AutoPrint(alça);
Título := HTML1.URL;
FimDoc;
fim;
Screen.Cursor := OldCur;
fim;
Além disso, você também pode usar o método PrintPage. Porém, recomendo que você utilize o AutoPrint, pois esse controle é mais flexível e pode filtrar algum conteúdo que você não deseja imprimir.
Blog do autor: http://blog.csdn.net/zou5655/