Cliente Servidor na Web
Desenvolvimento Baseado
em CGI
Material cedido pelo Prof. Edgard
Jamhour
Arquitetura Cliente-Servidor
• Inicialmente, a arquitetura WWW previa uma arquitetura clienteservidor pura.
– todo processamento feito no servidor
• Extensões recentes incluíram também capacidade de
processamento nos clientes.
(HTML)
Java
JavaScript
VBScript
ActiveX
Plugins
requisição
resposta
(CGI)
Soluções Proprietárias
Common Gateway Interface
•
•
•
Forma não proprietária para construir páginas WWW dinâmicas.
CGI não é uma linguagem de programação.
– CGI: Gateway entre WWW e outras aplicações.
CGI é uma interface que permite executar programas e aplicações externas sob o
controle de um servidor HTTP.
Requisição HTTP
WWW
Dados do Cliente
APLICAÇÃO
Servidor
Mensagem MIME e
cabeçalho HTTP
Resposta não
WWW
Seqüência de Eventos da Chamada CGI
Idade minima:
30
3
1
Formulario de Consulta
anos
Idade=30&Depto=Producao&
Temporario=SIM
Selecione o Departamento:
2
Informatica
Producao
Marketing
Contabilidade
programa
servidor
WWW
aplicação
externa
4
IIncluir funcionários em regime temporário:
5
SUBMIT
Pressione para consultar
7
6
servidor
Abraão
José
Paulo
Carlos
......
.....
30
40
23
50
consulta
anos
anos
anos
anos
sistema de
arquivos
banco com os dados de
todos os funcionários de
uma empresa.
A Especificação CGI
• A especificação CGI foi criada a fim de evitar a
necessidade de ter de adicionar novas
funcionalidades constantemente ao servidor HTTP
para atender a demanda de novas aplicações.
• Princípio:
– Definir claramente a estrutura do núcleo do servidor
WWW e fornecer os mecanismos para extensão de
serviços a partir deste núcleo.
– A extensão de serviços deveria ser feita através de
uma API (application programming interface) disponível
para programadores em C, Perl ou outra linguagem.
Variáveis de Ambiente
• Variáveis de ambiente são entidades que existem no
sistema operacional da máquina do usuário.
• As variáveis de ambiente funcionam como variáveis
globais para os processos do sistema operacional e
para as aplicações rodando em modo usuário.
– As variáveis de ambiente fornecem um mecanismo
para troca de informações entre as aplicações.
– As variáveis são acessíveis pelo servidor HTTP e por
qualquer aplicação CGI lançada pelo servidor.
– No caso do ambiente CGI, as variáveis de ambiente
são utilizadas para passar dados entre a requisição
HTTP de um servidor para a aplicação CGI.
Variáveis CGI
•
•
•
•
REQUEST_METHOD: método requisitado pelo cliente
– métodos possíveis: GET e POST
QUERY_STRING: dados passado pelo método GET ou através de ?
– Exemplo: http://www.yahoo.com?carros
CONTENT_LENGTH: tamanho do objeto passado pelo método POST
– contem 0 se o método GET foi usado
CONTENT_TYPE: tipo MIME do objeto passado por post
– tipos e subtipos:
• application: octet-stream, post-scritp
• text: plain, richtext
• image: gif, jpeg
• audio: basic
• video: mpeg
Como a aplicação passa os dados para o
servidor
Nome:
Edgard
Ramal:
1675
Procurar
Cadastrar
Nome=Edgard&Ramal=1675
&opcao=cadastrar
Servidor
Processar
• Os dados do formulário HTML são codificados numa string e enviados
ao WWW.
• O servidor WWW pode repassar os dados para o programa CGI de
duas formas: pelo método GET e pelo método POST.
Método GET
• Os dados são passados pela variável de ambiente QUERY_STRING
• Os dados são lidos pela aplicação no servidor chamando a API que lê a
variável de ambiente.
• Em linguagem C, por exemplo: getenv("QUERY_STRING")
• O formulário HTML é montado da seguinte maneira:
<FORM METHOD = "GET" ACTION = "/Especial/CGI-bin/EnvVar.exe" >
<P>Entre campo1: <INPUT NAME="campo1"></P>
<P>Entre campo2: <INPUT NAME="campo2"></P>
<INPUT TYPE = "submit" VALUE = "Submit Query">
</FORM>
Método POST
• Os dados são passados pela entrada padrão do sistema operacional
– Exemplo: stdin (standar input é normalmente o buffer de teclado)
• Os dados são lidos pela aplicação usando as mesmas funções que lêem
a entrada padrão.
• Em linguagem C, por exemplo: fgets(buffer,tamanho,stdin);
• O formulário HTML é montado da seguinte maneira:
<FORM METHOD = “POST” ACTION = "/Especial/CGI-bin/EnvVar.exe”>
<P>Entre campo1: <INPUT NAME="campo1"></P>
<P>Entre campo2: <INPUT NAME="campo2"></P>
<INPUT TYPE = "submit" VALUE = "Submit Query">
</FORM>
Geração de Páginas HTML Dinâmicas
• A geração de páginas html dinâmicas é feita enviando o fonte da
página diretamente para saída padrão:
–
–
–
–
–
–
–
printf("Content-Type: text/html\n\n"); /*linha obrigatória*/
printf("<HTML>");
printf("<HEAD><TITLE>Titulo</TITLE></HEAD>");
printf("<BODY>");
printf("<P>PAGINA DINAMICA </P>");
printf("</BODY>");
printf("</HTML>");
Resumo: Integração com a Web
•
•
•
Os sistemas operacionais impõem limitações ao tamanho das variáveis de
ambiente.
Por esta razão, o método GET só é indicado para pequenas quantidades de
dados.
Para formulários que transmitam uma grande quantidade de dados para os
servidor recomenda-se a utilização do método POST.
QUERY-STRING
MÉTODO
GET
MÉTODO
POST
Servidor
WWW
STDOUT
Aplicação
CGI
STDIN
Servidor
WWW
STDOUT
Aplicação
CGI
Linguagens de Programação
• Paradigmas de linguagens de programação:
– Procedural: descreve os passos de um algoritmo.
– Orientado a objetos: descreve interação entre objetos.
– Lógica: descreve soluções de predicados.
– Funcional: descreve transformação de funções.
• Classificação quanto ao modo de execução dos aplicativos
– linguagem compilada: C e C++
– linguagem interpretada: Unix, shells, Tcl, Python e Visual Basic.
– Compiladas/Interpretadas: Perl e Java.
Integração com Banco de Dados
Nome:
Edgard
requisição
Servidor
WWW
Ramal:
Procurar
Aplicação
CGI
Cadastrar
resposta
Processar
requisição
resposta
HTML
Nome Rmal
Edgard 1675
Banco de
dados
Servidor de
Banco de Dados
Tipos de Banco de Dados
cliente
•
servidor
tabelas •
cliente
tabelas
Cliente-Servidor:
– As requisições são
processadas sempre no
servidor.
– Apenas a resposta é enviada
ao cliente.
Banco de Dados em Arquivo:
– As requisições são sempre
processadas no cliente.
– Todos os dados das tabelas
são enviados ao cliente para
processamento local.
Banco de Dados em Ambiente WWW
cliente
Servidor de
Banco de
Dados
Servidor
WWW
tabelas
CGI
•
Servidor
WWW
tabelas
cliente
CGI
As consultas são
sempre
processadas no
servidor.
Arquitetura da Aplicação de Banco de
Dados
• A montagem da aplicação com banco de dados em ambiente
Web envolve a integração de vários elementos, conforme mostra
a figura abaixo.
CGI
HTTP
Cliente WWW
(Lógica de
Apresentação)
CLIENTE
Servidor
WWW
(Lógica de
Apresentação)
API’s de acesso a
banco de dados
Programa CGI
(Lógica de
Negócio)
SERVIDOR
SGDB
(Lógica de
Acesso aos
Dados)
API’s para Acesso a Banco de Dados
• CGI:
– Programa executado escrito em qualquer linguagem de programação.
– O CGI é responsável por efetuar a consulta no banco de dados, e enviar o
resultado ao cliente.
• Como o CGI acessa o banco de dados
– Utilizando rotinas de acesso nativas.
• O ambiente de desenvolvimento usado para criar o programa
executável deve ter um conjunto de APIs compatível com o banco de
dados que se quer acessar.
– Utilizando ODBC
• Sistema que permite ao programa CGI acessar qualquer tipo de banco
de dados.
ODBC - Open Database Connectivity
•
•
Conjunto de API’s padronizadas, desenvolvido pela Microsoft, mas tornado
de domínio público.
Permite que clientes windows acessem banco de dados locais ou remotos
em qualquer outro tipo de plataforma.
programa
APIs para
acesso a
ODBC
ODBC
PROVIDER
APIs para
acesso a
ODBC
programa
tabelas
Driver
Específico
para Acessar o
BD
servidor
Driver
Específico
para Acessar o
BD
tabelas
DSN - Data Source Name
• Os programas se referenciam as bases através do DSN
– Data Source Name
• O DSN abstrai a localização física da base para o programa.
• Exemplo:
– Banco de dados Access
• DSN = MeuBD
• Caminho Físico: C:/Arquivos/banco.mdb
– Banco de dados SQL Server
• DSN = MeuBD
• Endereço do Servidor: Nome Netbios do servidor
• Nome do banco de dados no servidor
Envio da Requisição
parâmetros
String SQL
Select, Insert, Update, Delete
Servidor
WWW
PROGRAMA
CGI
ODBC
• O programa CGI decodifica a string recebida pelo método POST e
indentifica os nomes dos campos e valores recebidos.
• Ele verifica qual operação selecionar (Select, Insert, Update e Delete)
analisando a string recebida pelo método get.
• Ele monta uma string SQL e envia para o provedor de ODBC usando
as APIs disponíveis no ambiente de programação.
Captura da Resposta
Status de uma operação, ou
o resultado de uma consulta
Servidor
WWW
PROGRAMA
CGI
ODBC
• A API de acesso ao ODBC retorna o resultado da operação (INSERT,
DELETE ou UPDATE) ou o resultado da consulta (SELECT)
especificada pela string SQL.
• Os dados são usados para formatar uma página de resposta (em
formato texto ou html).
• Os dados são enviados ao cliente para que este os visualize através
do browser.