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.