====== Páginas Dinâmicas ====== As páginas WWW estáticas são documentos em formato HTML armazenados no servidor, como [[http://espec.ppgia.pucpr.br|esta página]]. A estrutura básica de uma página HTML segue o formato do exemplo a seguir: Este é o título desta página Este é o conteúdo da página, que pode ter diversas formatações. As páginas estáticas podem conter imagens, sons, animações e outros elementos. Todavia, como seu próprio nome diz, seu conteúdo de informação é estático e sua atualização depende de intervenção manual. Um sistema assim pode ser considerado um sistema //two-tiers// de informação estática, pois o servidor WWW funciona basicamente como um repositório de informação estática. A seguir veremos mecanismos que permitem gerar páginas com conteúdo dinâmico, ou seja, que pode mudar automaticamente. Nesse caso, o sistema passa a ser caracterizado com um sistema //three-tiers//, no qual o servidor WWW atua como um elemento intermediário entre o cliente e o repositório de dados. ===== Programas CGI ===== O método mais antigo e simples para prover informação dinâmica na WWW é o uso do mecanismo de programas CGI - //Common Gateway Interface//. A tecnologia CGI permite a construção sob demanda de páginas WWW com conteúdo variável. Ela se baseia na solicitação de execução de um programa ou script no servidor, que irá gerar uma saída compreensível para o navegador no lado do cliente. Um programa CGI é um arquivo instalado no servidor que, ao ser acessado por um cliente, é executado e devolve ao cliente o resultado de sua execução. A configuração default do servidor Apache somente permite a execução de CGIs presentes no diretório ''/var/www/cgi-bin''. Essa configuração deve ser alterada caso se deseje habilitar a execução de CGIs em outros diretórios, como por exemplo os diretórios ''$HOME/public_html'' dos usuários. Todavia isso deve ser feito com cuidado, para não criar brechas na segurança do sistema. Um exemplo bastante simples de programa CGI (escrito em shell script) pode ser visto [[http://200.134.10.56/cgi-bin/data.cgi|aqui]]: #!/bin/sh echo "Content-type: text/plain" echo "" echo -n "Data atual neste servidor: " date Aqui temos [[http://200.134.10.56/cgi-bin/html.cgi|outro exemplo]] mais elaborado, gerando como saída uma página em HTML: #!/bin/sh echo "Content-type: text/html" echo "" echo "" echo "" echo "Uma página simples em CGI shell" echo "" echo "" echo "As variáveis de ambiente estão acessíveis ao usuário:" echo "" echo "Esta abordagem somente deve ser usada em páginas muito simples." echo "" echo "" É possível a criação de CGIs simples com scripts shell, ou mesmo com programas C/C++, mas essas linguagens não se prestam à construção de CGIs que devam retornar código HTML, pois a construção do mesmo via shell scripts ou programas C é penosa e pouco eficiente. Para tal objetivo costumam ser usadas linguagens apropriadas para tratamento de strings, como Perl ou Python. Eis um exemplo de [[http://200.134.10.56/cgi-bin/discos.cgi|programa CGI em Perl]]. Ele gera uma tabela com informações dos discos locais do servidor no instante da consulta: #!/usr/bin/perl # cabecalho HTTP print "Content-type: text/html\n\n"; # inicio do documento HTML print " Discos locais

Situação dos discos locais

"; # obtem a situação dos discos locais @lista = `df` ; # abertura de tabela print "\n" ; # gera entradas de tabela para as linhas foreach $line ( @lista ) { ($fs, $bks, $used, $avail, $perc, $mount) = split ( /\s+/, $line) ; print " "; } # fechamento de tabela print "
$fs $bks $used $avail $perc $mount
\n"; # fim do documento HTML print "\n";
Resumindo, programas CGI são códigos executáveis lançados pelo servidor WWW como processos separados, cujo resultado da execução (saídas geradas em ''stdout'') são enviadas de volta ao navegador. ===== Páginas ativas ===== Outra forma de gerar conteúdo dinâmico na Web é através do uso de páginas ativas. Neste caso, o documento HTML contém tags especiais definindo instruções executáveis. Essas instruções são executadas pelo servidor WWW no momento da consulta, e o resultado da execução é inserido na página Web e devolvido ao cliente. Atualmente as linguagens para páginas ativas em uso mais freqüentes são: * PHP: de domínio públio, executa em qualquer plataforma. * ASP: proprietária, executa sobre servidores Windows. * JSP: baseada em Java, pode executar na maioria dos ambientes. A discussão sobre as qualidades e defeitos dessas linguagens foge ao escopo desta aula. Além das duas linguagens acima, existem outras possibilidades, como Embedded Perl, Python, etc. Um [[http://dainf.ct.utfpr.edu.br/~maziero/static/svc/simples.php|exemplo simples]] de página em PHP seria o seguinte: O código indicado em azul é identificado por tags especiais ('''') e executado pelo servidor ao carregar a página. O resultado da execução, sem o código, é retornado ao navegador do cliente. Vejamos [[http://dainf.ct.utfpr.edu.br/~maziero/static/svc/imagem.php|outro exemplo mais complexo]], no qual uma imagem é gerada dinamicamente (para observar melhor seu funcionamento, recarregue a página várias vezes, através do botão //reload// de seu navegador): PHP Exemplos - Gráficos

Recarregue a página para mudar a imagem

Outro exemplo de geração de conteúdo dinâmico é [[http://dainf.ct.utfpr.edu.br/~maziero/static/svc/dado.php|esta página]], que gera a imagem de um dado com um valor aleatório cada vez que é acessada. Ela poderia servir, por exemplo, para [[http://dainf.ct.utfpr.edu.br/~maziero/static/svc/general.html|jogar General]]! Ao invés de gerar imagens, o código PHP poderia buscar informações em um servidor de bancos de dados. Dessa forma, o código PHP pode ser considerado o "middle-tier" de um sistema de informação, que mantém a lógica do negócio. Um [[http://espec.ppgia.pucpr.br/~maziero/svc/banco.php|exemplo]] desse funcionamento pode ser observado no script PHP abaixo:

Cadastro vazio !

Usuários cadastrados:

Nome Endereço Cidade Estado E-mail