Série de palestras ASP (12) Envio de conteúdo para o navegador
Autor:Eve Cole
Data da Última Atualização:2009-05-30 19:59:00
Ao processar o script ASP, qualquer texto ou gráfico que não esteja contido nos delimitadores ASP ou nas tags <SCRIPT> será simplesmente retornado ao navegador. O conteúdo pode ser enviado explicitamente ao navegador usando o objeto Response.
Enviando conteúdo Para enviar conteúdo ao navegador a partir de um delimitador ou procedimento ASP, você pode usar o método Write do objeto Response. Por exemplo, a instrução a seguir pode enviar uma saudação diferente dependendo se o usuário visitou esta página:
<%
Se FirstTime = True então
Response.Write "<H3 ALIGN=CENTER>Bem-vindo à página de visão geral</H3>"
Outro
Response.Write "<H3 ALIGN=CENTER>Bem-vindo de volta à página de visão geral</H3>"
Terminar se
%>
Fora do procedimento, você não precisa usar Response.Write para enviar conteúdo de volta ao usuário. O conteúdo que não está dentro de um delimitador de script é enviado diretamente ao navegador, que o formata e exibe. Por exemplo, o processo de script a seguir tem a mesma saída do script acima:
<H3 ALINHAR=CENTRO>
<% Se primeira vez então %>
Bem-vindo à página de visão geral.
<%outro%>
Bem-vindo de volta à página de visão geral.
<% Fim se %>
</H3>
Use comandos de script mistos e HTML quando precisar retornar a saída apenas uma vez ou quando for conveniente adicionar instruções ao texto HTML existente. Use Response.Write quando não quiser separar uma instrução com delimitadores ou quando quiser criar uma string que seja retornada ao navegador. Por exemplo, você pode construir uma string de texto para criar uma linha de tabela usando valores retornados de uma tabela HTML:
Response.Write "<TR><TD>" & Request.Form("Nome") _
& "</TD><TD>" & Request.Form("Sobrenome") & "</TD></TR>"
Configurando o tipo de conteúdo Quando o servidor web retorna o arquivo ao navegador, ele também informa ao navegador o tipo de conteúdo contido no arquivo. Isso permite que o navegador decida se pode exibir o arquivo sozinho ou se deve chamar outro aplicativo. Por exemplo, se o servidor de rede retornar uma tabela do Microsoft Excel, o navegador deverá chamar uma cópia do Microsoft Excel para exibir a página. Os servidores Web identificam os tipos de arquivo mapeando a extensão do arquivo para uma tabela de tipo MIME.
Você pode usar a propriedade ContentType do objeto Response para definir a string do tipo de conteúdo HTTP para o conteúdo enviado ao usuário. Por exemplo, o comando a seguir define o tipo de conteúdo para uma definição de canal:
<% Response.ContentType = "aplicativo/x-cdf" %>
Para obter mais informações sobre canais, consulte "Criando Canais Dinâmicos" neste tópico.
Outros tipos de conteúdo comuns são text/plain (para conteúdo retornado como texto em vez de instruções HTML interpretadas), text/gif (para imagens GIF) e video/quicktime (para filmes no formato Apple QuickTime®). Um conjunto padrão de tipos MIME foi definido e é suportado por um servidor Web ou por um navegador Web. Para ver quais tipos de conteúdo o servidor Web da Microsoft suporta, use o Gerenciador de serviços de Internet para abrir a página de propriedades do seu site, clique na guia Cabeçalhos HTTP e, em seguida, clique na guia Tipos de arquivo.
Redirecionar o navegador Use o método Redirect para redirecionar o navegador para outro URL em vez de enviar o conteúdo ao usuário. Por exemplo, se quiser confirmar se os usuários acessaram seu aplicativo na página inicial para que possam receber um ID de cliente, você pode verificar se eles têm um número de ID de cliente, caso contrário, você pode redirecioná-los para a página inicial;
<%
Se Sessão("CustomerID") = 0 Então
Response.Redirect "homepage.asp"
Terminar se
%>
A menos que o buffer já esteja aberto, você deverá redirecionar o navegador antes que qualquer conteúdo ou cabeçalho seja retornado ao navegador. Colocar a instrução Response.Redirect no topo da página e antes da tag <HTML> garante que nenhum conteúdo seja retornado ao navegador. Se você usar Response.Redirect após retornar conteúdo ou cabeçalhos ao navegador, verá uma mensagem de erro.
Se você estiver usando Response.Redirect no meio da página, use-o com a propriedade Response.Buffer, conforme explicado na seção a seguir.
Conteúdo em buffer Por padrão, o servidor Web retorna resultados de processamento de script e HTML ao processar páginas ASP. No entanto, você pode definir a propriedade Buffer do objeto Response para processar todos os comandos de script do servidor na página antes de enviar qualquer coisa ao usuário.
Você pode usar técnicas de buffer para determinar um ponto no processo de processamento de página em que você não deseja enviar conteúdo antes desse ponto ao usuário. Você também pode usar o método Redirect do objeto Response para redirecionar o usuário para outra página ou usar o método Clear do objeto Response para limpar o buffer e enviar conteúdo diferente ao usuário. O exemplo abaixo usa ambos os métodos.
<%
'Ativar buffer. Esta instrução deve aparecer antes da tag <HTML>.
Resposta.Buffer = Verdadeiro %>
<html>
<corpo>
.
.
.
<%
If Request("FNome") = "" Então
Resposta.Limpar
Response.Redirect "/samples/test.html"
Outro
Solicitação Response.Write("FName")
Terminar se
%>
</body>
</html>
Você também pode usar Response.Buffer para evitar que o servidor Web retorne os cabeçalhos HTTP antes que o script os modifique. Algumas propriedades e métodos, como Response.Expires e Response.Redirect, modificam cabeçalhos HTTP.
Quando a propriedade Buffer estiver configurada em um script e o método Flush não for chamado, o servidor manterá as solicitações Keep-Alive emitidas pelo usuário. Desenvolver esse hábito de script pode ajudar a melhorar o desempenho do servidor porque o servidor não precisa criar uma nova conexão para cada solicitação do usuário (assumindo que o servidor, o usuário e quaisquer servidores proxy suportem os requisitos de Keep-Alive). No entanto, uma desvantagem potencial desta abordagem é que o buffer não exibe nenhuma resposta ao usuário até que ele tenha processado todos os scripts no arquivo ASP atual. Para scripts mais longos e complexos, os usuários podem ser forçados a esperar muito tempo antes de ver esta página.
Por padrão, o buffer está desativado para aplicativos ASP. Você pode usar o Gerenciador de serviços de Internet para ativar buffers para todo o aplicativo ASP.
Permite que servidores proxy armazenem páginas em cache Por meio do servidor proxy, os aplicativos podem enviar páginas aos usuários. Um servidor proxy solicita páginas da Web de um site em nome do navegador do usuário. Os servidores proxy armazenam em cache as páginas HTML para que solicitações repetidas da mesma página possam ser retornadas ao navegador de forma rápida e eficiente. Os servidores proxy executam solicitações e armazenam em cache páginas da web e aliviam a carga na rede e nos servidores da web.
Embora o cache funcione bem para páginas HTML, ele não funciona bem para páginas ASP que contêm informações geradas dinamicamente. Por exemplo, os relatórios sobre as condições do mercado de ações ou as listas de inventário que mostram grandes volumes de negócios exigem informações imediatas. As informações de uma hora atrás são muito imprecisas no momento. Se o aplicativo retornar informações pessoais, por exemplo, uma página inicial personalizada, espera-se que o usuário não consiga ver as informações pessoais de outro usuário.
Por padrão, o próprio servidor ASP Command Proxy não pode armazenar em cache páginas ASP (embora armazene em cache imagens, bitmaps, pequenos aplicativos e outras referências em páginas em cache). Você pode usar a propriedade Response.CacheControl para definir o campo de cabeçalho HTTP Cache Control para permitir o armazenamento em cache de uma determinada página. O valor padrão de Response.CacheControl é a string "Private", que impede que servidores proxy armazenem esta página em cache. Para permitir o armazenamento em cache, defina o campo do cabeçalho de controle de cache como Público:
<% Response.CacheControl = "Público" %>
Como os cabeçalhos HTTP devem ser enviados ao navegador ou servidor proxy antes de qualquer conteúdo da página ser enviado, você pode definir a propriedade Response.CacheControl ou usar um Response.Buffer para armazenar em cache a página antes de qualquer tag HTML.
O campo de cabeçalho Cache Control faz parte da especificação HTTP 1.1. As páginas ASP não podem ser armazenadas em cache em servidores proxy que suportam apenas HTTP 1.0 porque nenhum campo de cabeçalho expirado é enviado.
Impedir que os navegadores armazenem páginas em cache Cada versão do navegador tem suas próprias especificações para armazenar páginas em cache. Para evitar que o navegador armazene páginas ASP em cache, use Response.Expires para definir o cabeçalho de expiração:
<% Resposta.Expires = 0%>
Um valor 0 força a expiração das páginas em cache. Como os cabeçalhos HTTP devem ser enviados ao navegador antes de qualquer página ser enviada, a página pode ser armazenada em cache colocando o atributo Response.Expires antes da tag HTML ou usando um Response.Buffer.
Crie canais dinâmicos
O Internet Explorer 4.0 possui um novo recurso que os planejadores da Web podem usar para combinar páginas da Web com temas comuns em um canal. No navegador, o canal é exibido na barra de título do canal; os usuários acessam o canal clicando no ícone. Os canais são atualizados automaticamente em segundo plano; os usuários não precisam visitar o site para baixar as páginas mais recentes em seus navegadores. Os canais fornecem aos usuários um caminho rápido e direto para navegar em um conjunto de páginas da Web relacionadas, e essas páginas da Web são atualizadas automaticamente.
Usando ASP, você pode escrever scripts para coletar as preferências do usuário e então criar canais dinamicamente. Um arquivo de definição de canal (.cdf) estabelece a organização e a sequência do conteúdo do canal. Os comandos em arquivos .cdf usam a mesma sintaxe da marcação HTML, tornando-os mais fáceis de entender e gerar a partir de scripts. Ao escrever um script ASP para criar um arquivo de definição de canal, o script usa uma extensão .cdx. Quando o ASP lê um arquivo com extensão .cdx, o tipo de conteúdo application/x-cdf é enviado automaticamente, informando ao navegador para usar a definição de canal para interpretar os bytes. Se você não usar .cdx como extensão, o script deverá definir manualmente o tipo de conteúdo para application/x-cdf usando Response.ContentType.
Aqui está um exemplo de como usar canais. O formulário HTML a seguir solicita que o usuário selecione um canal. Quando enviado, o formulário chama um script no arquivo .cdx para criar a definição do canal.
<P> Escolha os canais desejados </P>.
<FORM METHOD="POST" ACTION="chan.cdx">
<P><INPUT TYPE=CHECKBOX NAME=Filmes> Filmes
<P><INPUT TYPE=CHECKBOX NAME=Esportes> Esportes
<P><INPUT TYPE="ENVIAR" VALUE="ENVIAR">
</FORM>
O script em Chan.cdx cria uma definição de canal com base nos valores da tabela enviada com a solicitação.
<% If Request.Form("Filmes") <> "" Then %>
<CANAL>
declarações de definição de canal para as páginas do filme
</CANAL>
<% Fim se %>
<% If Request.Form("Esportes") <> "" Then %>
<CANAL>
declarações de definição de canal para as páginas de esportes
</CANAL>
<% Fim se %>
Enviando arquivos para um servidor Um navegador pode usar o aplicativo Posting Acceptor para enviar arquivos para um servidor Web. Quando o Posting Acceptor carrega arquivos, ele envia campos de formulário codificados em URL listando o nome e o local de cada arquivo recebido. A URL de processamento postal pode ser adicionada a um script que carrega o arquivo para chamar o script ASP para processar esses nomes de campo. Por exemplo, você pode escrever um script que envie automaticamente um e-mail ao administrador do sistema com o nome e a localização do arquivo.