1. O que é conteúdo dinâmico?
Os sites mais populares ganham dinheiro com publicidade online. O espaço publicitário nas páginas Web é limitado. Para fazer com que o investimento publicitário valha a pena, os anunciantes devem não só colocar uma grande quantidade de informação num pequeno espaço publicitário, mas também garantir que o anúncio pode atrair a atenção dos utilizadores. Na maioria dos sites atuais, os banners colocados nas páginas da Web são geralmente gerados pelo servidor durante a construção da página. Não podemos inserir dinamicamente novos anúncios nas páginas que foram enviadas. Se quiser exibir novos anúncios, a única maneira é atualizar a página. Podemos atualizar a página programaticamente, por exemplo:
use a função setTimeOut do objeto janela do navegador para atualizar a página regularmente. No entanto, ao atualizar os anúncios dessa forma, os usuários sentirão claramente o processo de atualização da página, ao mesmo tempo, também é difícil determinar uma frequência de atualização apropriada;
Defina o tempo de expiração da página para alguns segundos para que o navegador baixe novamente a página sempre que o foco de entrada for para a página (ou seja, o navegador for ativado).
Alguns grandes sites, como yahoo.com e msn.com, já adotaram essas tecnologias. Ambos os métodos têm suas próprias vantagens e desvantagens. Ao usar apenas Java, podemos implementar completamente o sistema de atualização de banners por meio de programação de rede e algum trabalho de programação de interface, mas os problemas de longo tempo de download e atraso de atualização devem ser resolvidos.
2. Use Java para implementar envio de conteúdo
Combinando a comunicação entre frames JavaScript com um miniaplicativo Java que gerencia a comunicação de rede, podemos resolver esse problema usando a tecnologia push. Nesse sistema, a tarefa do Java Applet é conectar-se ao servidor e escutar atualizações de conteúdo. Assim que o novo conteúdo é recebido, o Applet constrói o código HTML que exibe o novo conteúdo, chama uma função JavaScript e passa o HTML contendo o novo conteúdo para a função JavaScript. A função JavaScript usa tecnologia DHTML e DOM para substituir o conteúdo de uma tag
O servidor web escuta apenas solicitações de conexão na porta 80. Portanto, além do servidor Web, também precisamos de um serviço de aplicação de rede que aceite a solicitação de conexão Socket do Applet. Este serviço de aplicativo de rede consulta periodicamente o banco de dados e publica (envia) os dados alterados para todos os miniaplicativos conectados. Graças ao uso de frames ocultos e aos recursos de comunicação entre frames do JavaScript, somos capazes de ocultar do usuário a maior parte da lógica do JavaScript.
A tarefa mais difícil em todo esse processo é a comunicação entre o Java Applet e o código JavaScript. Netscape fornece uma classe chamada netscape.javascript.JSObject. Para usar este objeto, adicione uma tag Applet que contenha o atributo especial "MAYSCRIPT":
Os métodos JSObject permitem que Applets interajam com o objeto do documento e invoquem comandos JavaScript. Por exemplo, colocando o seguinte código no Applet, podemos acessar o objeto window:
import netscape.javascript.*; public class MyApplet extends java.applet.Applet{ private JSObject mainwin; ( this); } }
Após obter a referência JSObject, podemos acessar o objeto janela do documento e chamar a função JavaScript através do método eval() do JSObject.
3. Atualize a página usando DHTML
Ao escrever novo conteúdo do Applet no documento, para não afetar o conteúdo existente, podemos usar a tag HTML
Para IE e Netscape 6, esta tag HTML é:
// Todo conteúdo a ser atualizado deve ser identificado pelo id
Para versões do Netscape 4.x, esta tag HTML é:
Embora possamos atualizar diretamente o conteúdo HTML do Applet referenciando o ID apropriado, para maior clareza Para simplificar, colocaremos a lógica do programa de atualização do código HTML em uma função JavaScript. O código JavaScript a seguir salva o tipo de navegador na variável ie:
applnname=navigator.appName; if(applnname=="Microsoft Internet Explorer") { ie=true } else { ie=false }
O miniaplicativo constrói HTML a partir do novo
;código de dados, salve-o no conteúdo da variável JavaScript e, em seguida, chame o método assignData(). Os dados de conteúdo podem ser qualquer coisa, desde HTML simples a XML e dados binários.
// Chame o método apropriado function assignData() { if(ie) {explore();} else {navig() } } de acordo com o tipo de navegador
Se o navegador for IE ou Netscape 6, o Applet chama o método explore():
//content é uma variável javascript que descreve os novos dados que precisam ser //exibidos em formato HTML function explore() { iexplorer.innerHTML=content ; }
se O navegador for Netscape 4.0 ou superior e o Applet chamar o método navig():
function navig() { document.netscapev.document.write(““ + content + ““); document.netscapev.document.close()
;
No lado do servidor, uma instância da classe ImageApliation.java responde às solicitações de conexão do Socket e cria um novo thread para cada nova solicitação de conexão. Para simplificar o código, cada thread verifica apenas se o arquivo de dados foi alterado. Se o arquivo de dados foi alterado, o thread lê o conteúdo do arquivo e envia os novos dados para o miniaplicativo conectado (o aplicativo de exemplo envia o arquivo inteiro para o miniaplicativo).
No lado do cliente, um quadro oculto contém o Applet ImageApplet.java, portanto a tag do Applet não pode ser vista usando a função de visualização do código-fonte HTML do navegador. O Applet implementa a função de conexão ao servidor (o servidor de origem para baixar o Applet) e implementa um protocolo de comunicação simples. Após estabelecer uma conexão com o servidor, o Applet recebe os dados do servidor, constrói o código HTML e chama a função JavaScript para passar os dados para o documento:
public void upDateHTML(String str){ //data é o nome do o formulário, //quote é uma variável JavaScript //str é o código HTML recém-construído mainwin.eval("document.data.quote.value="" + str + """); ()"); return; }
netscape.javascript.JSObject conclui a comunicação do Applet para JavaScript. Versões diferentes de navegadores clientes requerem versões diferentes. Você pode fazer download do arquivo de classe compactado java40.jar fornecido para o Netscape. O IE já vem com a classe JSObject, mas é um pouco difícil de encontrar. Você pode pesquisar o diretório $windows$JavaPackages para localizar o arquivo ZIP que contém a classe JSObject.
O servidor serializa a instância da classe ImageArrayElement.java em uma string por meio do método toString() e a envia para o Applet. O servidor constrói cada objeto a partir do arquivo de dados, chama o método toString(), concatena as strings que representam todos os objetos e, finalmente, envia a string resultante. Na outra extremidade, o Applet recebe e analisa essa string e reconstrói cada objeto ImageArrayElement. A razão pela qual os dados são enviados aqui na forma de uma longa string é porque este método requer apenas um processo de processamento muito simples, permitindo que os usuários aprendam imediatamente sobre as alterações dos dados em uma velocidade próxima do tempo real, porém, também podemos usar outro; método método, que envia o objeto como um vetor.
Em um aplicativo ativo, você geralmente deve tornar transparente a inserção de novos dados na página atual. Mas no aplicativo de exemplo, para tornar o processo de execução do programa mais intuitivo, ele avisará o usuário quando um novo conteúdo chegar.
A principal vantagem da tecnologia push é que o servidor de aplicação apenas envia os dados alterados para a rede, minimizando assim a latência. Como este Applet é responsável por muito pouco trabalho (não envolve a interface do usuário, esta parte do trabalho é feita pelo navegador), o Applet é pequeno e carrega muito rapidamente.
5. Como executar o exemplo deste artigo
Para testar o aplicativo de amostra deste artigo, você deve ter um servidor web e JDK 1.7 ou superior instalado em sua máquina.
Pontos de instalação:
Descompacte o arquivo compactado ZIP e instale-o no diretório raiz padrão do servidor web.
Para servidores IIS, o diretório raiz padrão é Inetputwwwroot
Para o servidor gratuito incluído no jsdk2.1, o diretório padrão é
Após descompactar o arquivo, todos os arquivos serão instalados no diretório
Adicione as seguintes linhas de código à página padrão. Cada servidor tem sua própria página padrão. A página padrão do IIS é "default.htm". Consulte a documentação do servidor Web para obter instruções específicas:
Etapas para executar o aplicativo:
Abra uma janela DOS, digite
Inicie o servidor web.
Abra um navegador e insira o seguinte URL: http://localhost:8080 . Este URL abrirá a página padrão do servidor web, que deve ter um link "Banner de anúncio dinâmico baseado em Java". Clique neste link para iniciar o aplicativo de amostra deste artigo.
Abra o arquivo “/exp/images.txt” com o Bloco de Notas, copie e cole uma linha de conteúdo e salve o arquivo. Você pode ver imediatamente o sistema exibir uma janela JavaScript solicitando atualizações de conteúdo. Feche a janela JavaScript e a página exibirá novo conteúdo.
Faça download do código completo do exemplo neste artigo aqui, 411 KB/u/info_img/2009-06/20/pushweb.zip