Desenvolvimento - Delphi
Delphi: Desenvolvendo um Web Server
Neste artigo iremos desenvolver passo a passo um simples web server, demonstrando a troca de informações entre este e o browser.
por Gustavo S. SemaanNeste artigo iremos desenvolver passo a passo um simples web server, demonstrando a troca de informações entre este e o browser.
Código HTML
São necessários alguns conhecimentos em HTML, sobretudo FORMs.
Salve o código abaixo em um arquivo no diretório indicado em um Alias do IIS(Exemplo de configuração do IIS no anexo1) com o nome de form.htm.
<HTML> <HEADER> <TITLE>Formulário: Teste</TITLE> </HEADER> <BODY> <FORM METHOD="POST" ACTION="exemplo1.exe"> Nome:<INPUT TYPE="TEXT" NAME="NOME"><BR> Apelido:<INPUT TYPE="TEXT" NAME="APELIDO"><BR> Telefone: <INPUT TYPE="TEXT" NAME="TELEFONE"><BR> <INPUT TYPE="RESET" VALUE="Limpar campos"> <INPUT TYPE="SUBMIT" VALUE="Enviar dados"> </FORM> </BODY> </HTML>
Criação do web server (CGI)
Iremos criar um CGI simples para receber os dados do formulário do arquivo form.htm.
File / New / Other :
Devemos agora escolher o tipo de Web Server que desejamos criar. Neste exemplo utilizaremos "CGI Stand-alone".
Foi criado um WebModule sem nenhum componente.
A classe TWebModule é descendente de TDataModule, container de componentes não visuais(Acesso a banco de dados, interação com Office, ..), porem o TWebModule possui "Action Itens", responsáveis pelo request e response (receber e enviar) de dados em sua aplicação.
Breves conceitos sobre as actions.
Um CGI pode tratar várias requisições de maneiras diferentes, utilizando os actions.
Por exemplo:
- "http://127.0.0.1/artigo/exemplo.exe" trata a Action definida como Default.
- "http://127.0.0.1/artigo/exemplo.exe/form" trata a Action com PathInfo = "form".
- "http://127.0.0.1/artigo/exemplo.exe/email" trata a Action com PathInfo = "email".
Configuração do WebModule
No object inspector, nas propriedades do WebModule devemos editar as Actions. Clicando com o botão direito do mouse na janela "Editing Webmodule1.Action" clicando em Add. Mude a propriedade Default deste Action criado para True e seu PathInfo para "/form". A propriedade MethodType define a forma do fluxo dos dados entre o navegador e o CGI. Utilizaremos POSTO como o utilizado no formulário do HTML(arquivo form.htm).
Evento OnAction do Action criado.
As Actions recebem (TWebRequest) e retornam (TWebResponse) informações com o browser.
Cada Action possui um PathInfo associado, o que nos oferece eventos OnAction para cada um deles. Assim tratamos as requisições de forma diferente.
Assinatura do evento OnAction:
procedure WebModule1WebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean);
Request: Requisição feita pelo cliente
Response: Resposta que retornará ao cliente
Handled: Outros Actions podem completar a resposta desta requisição. Neste caso Handled deve ser False.
Visto algums conceitos sobre os Actions, iremos implementar um código simples para responder os dados enviados pelo HTML. Vamos codificar então o responsável pelo recebimento e envio de respostas da nossa aplicação.
procedure TWebModule1.WebModule1WebActionItem1Action(Sender: TObject; Request: TWebRequest; Response: TWebResponse; var Handled: Boolean); begin Response.Content := "<H2> RETORNO </H2><BR>" + "<b>Nome:</b>" + Request.ContentFields.Values["NOME"] + "<BR>" + "<b>Apelido:</b>" + Request.ContentFields.Values["APELIDO"] + "<BR>" + "<b>Telefone:</b>" + Request.ContentFields.Values["TELEFONE"]; end;
Iremos então compilar o projeto e copiarmos o executável no Path indicado pelo IIS com o nome exemplo1.exe (ou o mesmo indicado pelo HTML).
Pronto! Temos um simples Web Server funcionando!
Anexo 1:
Configurando IIS
Configurar o IIS (Internet Information Services) que será nosso servidor web é uma tarefa simples, porém para facilitar o desenvolvimento do exemplo do artigo iremos seguir passo a passo.
No "Painel de Controle" / "Ferramentas Administrativas" clique em "Gerenciador do Internet Services"
Iremos criar uma nova "Pasta Virtual". Nela relacionaremos um endereço web a um diretório local ("http://127.0.0.1/cgi-bin/exemplo.exe" apontar para "c:\www\exemplo.exe").
Alias é o apelido de sua pasta virtual. No endereço "http://127.0.0.1/cgi-bin/exemplo.exe" o alias seria "cgi-bin".
Agora iremos indicar o diretório local onde está nosso aplicativo "c:\www\exemplo.exe" por exemplo.
MUITO IMPORTANTE: Marcar a opção executar ISAPI ou CGI. Caso esta opção não seja marcada ao tentar acessar o aplicativo pelo browser irá ser feito download do aplicativo, não sendo executado como desejado. Não se esqueça também de iniciar no servidor web caso ele não esteja ativo.
Ferramentas Utilizadas:
Borland Delphi 7
IIS 5.0 (Windows 2000)