Hora de iniciarmos nosso projeto! Vá em: Project -> New project
Na janela de seleção de projetos, escolha "CGI Application".
Com isso teremos em nossa tela um WebModule e o editor de códigos, juntamente com o Object Inspector que nos auxiliará a criar os eventos que nosso CGI vai receber e tratar.
Hello World para a Web
Para o nosso "Hello World" funcionar, temos que criar uma ação que será chamada em nosso CGI. Esta ação é quem vai gerar uma resposta e retornar para o servidor para que seja exibida no browser.
São alguns simples passos para que possamos, então, ver nossa primeira aplicação Web em funcionamento:
Selecione o "WebModule" e vá ao "Object Inspector". Nele, clique nos "..." que aparecem na frente do item "Actions":
Na janela que abrir, adicione uma ação clicando no botão "Add".
Com o item recém criado selecionado, volte ao Object Inspector e altere sua propriedade "Name" para "acao1". Vá na aba "Events do Object Inspector" e dê um duplo clique no item "OnRequest".
A janela de edição de código será ativada e será criado automaticamente o procedimento a seguir:
procedure TFPWebModule1.acao1Request(Sender: TObject; ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
begin
end;
Dentro deste procedimento vamos criar o retorno HTML do CGI quando a ação "acao1" for chamada. Devemos determinar qual o tipo de retorno (normalmente text/html) e o que for adicionado depois disso já será interpretado pelo navegador, desde texto comum até tags HTML, códigos CSS e JavaScript.
Vamos alterar para o seguinte:
procedure TFPWebModule1.acao1Request(Sender: TObject; ARequest: TRequest; AResponse: TResponse; var Handled: Boolean);
begin
//tipo de resposta (header)
AResponse.ContentType:= 'text/html';
//conteúdo a ser mostrado
AResponse.Content:= '<h1>Olá Web!</h1>';
//informa o CGI de que a ação foi realizada
Handled:= True;
end;
Note que utilizamos a variável "AResponse" para gerar o nosso retorno. Esta é a maneira pela qual o FPWeb trabalha. Tudo o que for alterado nesta variável será interpretado pelo navegador quando for retornado automaticamente ao final da execução da rotina.
O Handled garante que tudo foi executado e o processo pode ser concluído liberando memória no servidor.
Hora de salvar o projeto no local de sua preferência. Lembrando que o nome do projeto tem que ser diferente do nome da Unit principal. Aqui vou chamar apenas de "projeto" e a Unit principal de "main".
Feito isso, vamos compilar somente com: Run > Build.
Se houver algum problema, sugiro que volte aos passos anteriores.
Testando o CGI
Agora é hora de testar nosso CGI e verificar seu retorno. Copie o executável gerado do local onde salvou seu projeto e coloque na pasta
cgi-bin do seu servidor.
Tenha certeza de que seu servidor está rodando e dê permissão 755 para o seu executável. Não se assuste com o tamanho do binário! O
Lazarus salva informações de debug com ele que podem ser retiradas, depois diminuindo o tamanho.
Abra o navegador de sua preferência e acesse:
- http://127.0.0.1/cgi-bin/projeto/acao1
Aê! Funcionou! Seu primeiro CGI com Object Pascal está funcionando!
O leitor deve ter notado que após o nome do projeto, é colocada uma "/", e em seguida o nome da ação que foi definido anteriormente.
É possível criar N ações diferentes e até N WebModules para sua aplicação ou site. Tudo dependerá da complexidade do que for fazer.
E pela variável "AResponse", podemos gerar quase qualquer tipo de conteúdo, carregar arquivos HTML, imagens etc.
Mas há também uma tal "ARequest"... O que ela faz?
Se chegou até aqui com tudo funcionando, hora dos próximos passos!