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. Semaan



Introdução

Neste 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)

Gustavo S. Semaan

Gustavo S. Semaan - Bacharelando em Sistemas de Informação, Técnico em Informática Industrial, é Analista de Sistemas do CAEd / UFJF, desenvolvendo sistema escolar e soluções em avaliações educacionais. Possui experiência em Delphi, vb.NET, PHP e JAVA e utiliza banco de dado SQL Server, Interbase/Firebird e MySQL.